zoukankan      html  css  js  c++  java
  • Flink基础(三十三):FLINK-SQL语法(九)DDL(五)EXPLAIN 语句

    EXPLAIN 语句用来解释一条 query 语句或者 INSERT 语句的逻辑计划和优化后的计划。

    运行一条 EXPLAIN 语句

    EXPLAIN 语句可以通过 TableEnvironment 的 executeSql() 执行,也可以在 SQL CLI 中执行 EXPLAIN 语句。 若 EXPLAIN 操作执行成功,executeSql() 方法返回解释的结果,否则会抛出异常。

    以下的例子展示了如何在 TableEnvironment 和 SQL CLI 中执行一条 EXPLAIN 语句。

    val env = StreamExecutionEnvironment.getExecutionEnvironment()
    val tEnv = StreamTableEnvironment.create(env)
    
    // register a table named "Orders"
    tEnv.executeSql("CREATE TABLE MyTable1 (count bigint, work VARCHAR(256) WITH (...)")
    tEnv.executeSql("CREATE TABLE MyTable2 (count bigint, work VARCHAR(256) WITH (...)")
    
    // explain SELECT statement through TableEnvironment.explainSql()
    val explanation = tEnv.explainSql(
      "SELECT count, word FROM MyTable1 WHERE word LIKE 'F%' " +
      "UNION ALL " + 
      "SELECT count, word FROM MyTable2")
    println(explanation)
    
    // explain SELECT statement through TableEnvironment.executeSql()
    val tableResult = tEnv.executeSql(
      "EXPLAIN PLAN FOR " + 
      "SELECT count, word FROM MyTable1 WHERE word LIKE 'F%' " +
      "UNION ALL " + 
      "SELECT count, word FROM MyTable2")
    tableResult.print()
    Flink SQL> CREATE TABLE MyTable1 (count bigint, work VARCHAR(256);
    [INFO] Table has been created.
    
    Flink SQL> CREATE TABLE MyTable2 (count bigint, work VARCHAR(256);
    [INFO] Table has been created.
    
    Flink SQL> EXPLAIN PLAN FOR SELECT count, word FROM MyTable1 WHERE word LIKE 'F%' 
    > UNION ALL 
    > SELECT count, word FROM MyTable2;

    执行 EXPLAIN 语句后的结果为:

    == Abstract Syntax Tree ==
    LogicalUnion(all=[true])
      LogicalFilter(condition=[LIKE($1, _UTF-16LE'F%')])
        FlinkLogicalTableSourceScan(table=[[default_catalog, default_database, MyTable1]], fields=[count, word])
      FlinkLogicalTableSourceScan(table=[[default_catalog, default_database, MyTable2]], fields=[count, word])
      
    
    == Optimized Logical Plan ==
    DataStreamUnion(all=[true], union all=[count, word])
      DataStreamCalc(select=[count, word], where=[LIKE(word, _UTF-16LE'F%')])
        TableSourceScan(table=[[default_catalog, default_database, MyTable1]], fields=[count, word])
      TableSourceScan(table=[[default_catalog, default_database, MyTable2]], fields=[count, word])
    
    == Physical Execution Plan ==
    Stage 1 : Data Source
        content : collect elements with CollectionInputFormat
    
    Stage 2 : Data Source
        content : collect elements with CollectionInputFormat
    
        Stage 3 : Operator
            content : from: (count, word)
            ship_strategy : REBALANCE
    
            Stage 4 : Operator
                content : where: (LIKE(word, _UTF-16LE'F%')), select: (count, word)
                ship_strategy : FORWARD
    
                Stage 5 : Operator
                    content : from: (count, word)
                    ship_strategy : REBALANCE

    语法

    EXPLAIN PLAN FOR <query_statement_or_insert_statement>

    本文来自博客园,作者:秋华,转载请注明原文链接:https://www.cnblogs.com/qiu-hua/p/14053396.html

  • 相关阅读:
    Packet Tracer 5.2实验(十五) 网络端口地址转换NAPT配置
    Packet Tracer 5.3实验(十六) 网络设备系统升级
    PostgreSQL学习手册(一) 数据表
    Access insert 语法错误
    Access2003转换成SQL2005。
    C#实现ACCESS数据库备份还原
    js 图片滚动
    根据日期算出天数
    datetime赋空值
    如何把Sql Server2005 数据库转换成Access
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/14053396.html
Copyright © 2011-2022 走看看