1. 程式人生 > >flink流計算隨筆(8)

flink流計算隨筆(8)

SQL標準的Apache Calcite

statement:
      setStatement
  |   resetStatement
  |   explain
  |   describe
  |   insert
  |   update
  |   merge
  |   delete
  |   query

setStatement:
      [ ALTER ( SYSTEM | SESSION ) ] SET identifier '=' expression

resetStatement:
      [ ALTER ( SYSTEM | SESSION ) ] RESET identifier
  |
[ ALTER ( SYSTEM | SESSION ) ] RESET ALL explain: EXPLAIN PLAN [ WITH TYPE | WITH IMPLEMENTATION | WITHOUT IMPLEMENTATION ] [ EXCLUDING ATTRIBUTES | INCLUDING [ ALL ] ATTRIBUTES ] [ AS JSON | AS XML ] FOR ( query | insert | update | merge | delete ) describe: DESCRIBE
DATABASE databaseName | DESCRIBE CATALOG [ databaseName . ] catalogName | DESCRIBE SCHEMA [ [ databaseName . ] catalogName ] . schemaName | DESCRIBE [ TABLE ] [ [ [ databaseName . ] catalogName . ] schemaName . ] tableName [ columnName ] | DESCRIBE [ STATEMENT ] ( query | insert | update
| merge | delete ) insert: ( INSERT | UPSERT ) INTO tablePrimary [ '(' column [, column ]* ')' ] query update: UPDATE tablePrimary SET assign [, assign ]* [ WHERE booleanExpression ] assign: identifier '=' expression merge: MERGE INTO tablePrimary [ [ AS ] alias ] USING tablePrimary ON booleanExpression [ WHEN MATCHED THEN UPDATE SET assign [, assign ]* ] [ WHEN NOT MATCHED THEN INSERT VALUES '(' value [ , value ]* ')' ] delete: DELETE FROM tablePrimary [ [ AS ] alias ] [ WHERE booleanExpression ] query: values | WITH withItem [ , withItem ]* query | { select | selectWithoutFrom | query UNION [ ALL | DISTINCT ] query | query EXCEPT [ ALL | DISTINCT ] query | query MINUS [ ALL | DISTINCT ] query | query INTERSECT [ ALL | DISTINCT ] query } [ ORDER BY orderItem [, orderItem ]* ] [ LIMIT [ start, ] { count | ALL } ] [ OFFSET start { ROW | ROWS } ] [ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ] withItem: name [ '(' column [, column ]* ')' ] AS '(' query ')' orderItem: expression [ ASC | DESC ] [ NULLS FIRST | NULLS LAST ] select: SELECT [ STREAM ] [ ALL | DISTINCT ] { * | projectItem [, projectItem ]* } FROM tableExpression [ WHERE booleanExpression ] [ GROUP BY { groupItem [, groupItem ]* } ] [ HAVING booleanExpression ] [ WINDOW windowName AS windowSpec [, windowName AS windowSpec ]* ] selectWithoutFrom: SELECT [ ALL | DISTINCT ] { * | projectItem [, projectItem ]* } projectItem: expression [ [ AS ] columnAlias ] | tableAlias . * tableExpression: tableReference [, tableReference ]* | tableExpression [ NATURAL ] [ ( LEFT | RIGHT | FULL ) [ OUTER ] ] JOIN tableExpression [ joinCondition ] | tableExpression CROSS JOIN tableExpression | tableExpression [ CROSS | OUTER ] APPLY tableExpression joinCondition: ON booleanExpression | USING '(' column [, column ]* ')' tableReference: tablePrimary [ matchRecognize ] [ [ AS ] alias [ '(' columnAlias [, columnAlias ]* ')' ] ] tablePrimary: [ [ catalogName . ] schemaName . ] tableName '(' TABLE [ [ catalogName . ] schemaName . ] tableName ')' | tablePrimary [ EXTEND ] '(' columnDecl [, columnDecl ]* ')' | [ LATERAL ] '(' query ')' | UNNEST '(' expression ')' [ WITH ORDINALITY ] | [ LATERAL ] TABLE '(' [ SPECIFIC ] functionName '(' expression [, expression ]* ')' ')' columnDecl: column type [ NOT NULL ] values: VALUES expression [, expression ]* groupItem: expression | '(' ')' | '(' expression [, expression ]* ')' | CUBE '(' expression [, expression ]* ')' | ROLLUP '(' expression [, expression ]* ')' | GROUPING SETS '(' groupItem [, groupItem ]* ')' windowRef: windowName | windowSpec windowSpec: [ windowName ] '(' [ ORDER BY orderItem [, orderItem ]* ] [ PARTITION BY expression [, expression ]* ] [ RANGE numericOrIntervalExpression { PRECEDING | FOLLOWING } | ROWS numericExpression { PRECEDING | FOLLOWING } ] ')'

在insert中,如果insert或UPSERT語句沒有指定目標列的列表,查詢的列數必須與目標表相同,除非是在某些一致性級別。

在merge中,至少有一個匹配時和未匹配時的子句必須出現。

tablePrimary可能只包含特定符合性級別的擴充套件子句;在這些相同的一致性級別中,insert中的任何列都可以被columnDecl替換,其效果類似於將其包含在EXTEND子句中。

在orderItem中,如果表示式是正整數n,它表示SELECT子句中的第n項。

在查詢中,count和start可以是無符號整型字面值,也可以是值為整型的動態引數。 aggregate聚合查詢是包含GROUP BY或HAVING子句或SELECT子句中的聚合函式的查詢。在SELECT中,具有和ORDER BY子句的聚合查詢中,所有表示式都必須是當前組中的常量(即,按照group BY子句或常量的定義對常量進行分組)、聚合函式或常量與聚合函式的組合。聚合和分組函式只能出現在聚合查詢中,而且只能出現在SELECT、HAVING或ORDER BY子句中。 標量子查詢是用作表示式的子查詢。如果子查詢不返回行,則該值為空;如果它返回多個行,則為錯誤。

IN、EXISTS和scalar子查詢可以出現在表示式的任何地方(例如SELECT子句、where子句、ON子句連線或聚合函式的引數)。

一個IN、EXISTS或scalar子查詢可能相互關聯;也就是說,它可以引用包含查詢的FROM子句中的表。

selectWithoutFrom等價於值,但不是標準SQL,只允許在某些符合級別中使用。

MINUS相當於EXCEPT,但不是標準SQL,只允許在某些一致性級別上使用。

交叉應用和外部應用只允許在某些符合級別。

“限制開始,計數”相當於“限制計數偏移開始”,但只允許在某些符合級別。