Beam Calcite SQL の字句構造
Beam Calcite SQL ステートメントは、一連のトークンで構成されます。トークンには、識別子、引用符付き識別子、リテラル、キーワード、演算子、および特殊文字が含まれます。トークンは、空白 (スペース、バックスペース、タブ、改行) またはコメントで区切ることができます。
識別子
識別子は、列、テーブル、およびその他のデータベースオブジェクトに関連付けられた名前です。
識別子は、文字またはアンダースコアで始める必要があります。後続の文字は、文字、数字、またはアンダースコアにすることができます。引用符付き識別子は、バッククォート (`
) 文字で囲まれた識別子であり、スペースや記号などの任意の文字を含めることができます。ただし、引用符付き識別子は空にすることはできません。予約キーワードは、バッククォートで囲まれている場合にのみ識別子として使用できます。
構文 (ここでは正規表現として定義)
[A-Za-z_][A-Za-z_0-9]*
例
Customers5
_dataField1
ADGROUP
無効な例
5Customers
_dataField!
GROUP
5Customers
は、文字またはアンダースコアではなく、数字で始まっています。_dataField!
には、文字、数字、またはアンダースコアではない特殊文字「!」が含まれています。GROUP
は予約キーワードであるため、バッククォート文字で囲まれていない場合は識別子として使用できません。
識別子と引用符付き識別子の両方で大文字と小文字は区別されませんが、いくつかのニュアンスがあります。詳細については、大文字と小文字の区別を参照してください。
引用符付き識別子には、以下で定義されている文字列リテラルと同じエスケープシーケンスがあります。
リテラル
リテラルは、組み込みデータ型の定数値を表します。一部のデータ型はリテラルとして表現できますが、すべてではありません。
文字列リテラル
文字列リテラルとバイトリテラルの両方は、単一 ('
) 引用符で引用符で囲む必要があります。
引用符付きリテラル
リテラル | 例 | 説明 |
---|---|---|
引用符付き文字列 |
| 単一 (' ) 引用符で囲まれた引用符付き文字列には、エスケープされていない二重 (" ) 引用符を含めることができます。2 つの引用符 ( '' ) がエスケープシーケンスです。引用符付き文字列には改行を含めることができます。 |
整数リテラル
整数リテラルは、10 進数字 (0 から 9) のシーケンスです。整数には、正の値と負の値をそれぞれ表すために、「+
」または「-
」をプレフィックスとして付けることができます。
例
123
-123
整数リテラルは BIGINT
として解釈されます。
浮動小数点リテラル
構文オプション
[+-]DIGITS.[DIGITS][e[+-]DIGITS]
[DIGITS].DIGITS[e[+-]DIGITS]
DIGITSe[+-]DIGITS
DIGITS
は 1 つ以上の 10 進数 (0 から 9) を表し、e
は指数マーカー (e または E) を表します。
例
123.456e-67
.1E4
58.
4e2
小数点または指数マーカーを含む数値リテラルは、double 型であると想定されます。
値が有効な float 範囲内にある場合、浮動小数点リテラルを float 型に暗黙的に強制変換できます。
NaN または無限大のリテラル表現はありません。
配列リテラル
配列リテラルは、ARRAY
キーワードがプレフィックスとして付けられた角かっこで囲まれた、カンマ区切りの要素リストです。
例
ARRAY[1, 2, 3]
ARRAY['x', 'y', 'xy']
構造体リテラル
構文
(elem[, elem...])
elem
は構造体内の要素です。elem
は、式または列名ではなく、リテラルデータ型である必要があります。
出力型は、(構造体は名前付き型ではありません) 入力式の型に一致する型を持つ匿名フィールドを持つ匿名構造体型です。
例 | 出力型 |
---|---|
(1, 2, 3) | STRUCT<BIGINT,BIGINT,BIGINT> |
(1, 'abc') | STRUCT<BIGINT,STRING> |
日付リテラル
構文
DATE 'YYYY-M[M]-D[D]'
日付リテラルには、DATE
キーワードの後に、単一引用符で囲まれた標準の日付形式に準拠する文字列リテラルが含まれます。日付リテラルは、1 年から 9999 年 (両端を含む) の範囲をサポートします。この範囲外の日付は無効です。
たとえば、次の日付リテラルは 2014 年 9 月 27 日を表します。
DATE '2014-09-27'
標準の日付形式の文字列リテラルも、DATE 型の式が予期される場所で使用すると、暗黙的に DATE 型に強制変換されます。たとえば、クエリでは
SELECT * FROM foo WHERE date_col = "2014-09-27"
文字列リテラル "2014-09-27"
は日付リテラルに強制変換されます。
時間リテラル
構文
TIME '[H]H:[M]M:[S]S[.DDDDDD]]'
TIME リテラルには、TIME
キーワードと、単一引用符で囲まれた標準の時間形式に準拠する文字列リテラルが含まれます。
たとえば、次の時間は午後 12 時 30 分を表します。
TIME '12:30:00.45'
タイムスタンプリテラル
構文
TIMESTAMP 'YYYY-[M]M-[D]D [[H]H:[M]M:[S]S[.DDDDDD]]'
タイムスタンプリテラルには、TIMESTAMP
キーワードと、単一引用符で囲まれた標準のタイムスタンプ形式に準拠する文字列リテラルが含まれます。
タイムスタンプリテラルは、1 年から 9999 年 (両端を含む) の範囲をサポートします。この範囲外のタイムスタンプは無効です。
たとえば、次のタイムスタンプは 2014 年 9 月 27 日の午後 12 時 30 分を表します。
TIMESTAMP '2014-09-27 12:30:00.45'
大文字と小文字の区別
Beam SQL では、大文字と小文字の区別に関して次の規則に従います。
カテゴリ | 大文字と小文字を区別するか? | 注記 |
---|---|---|
キーワード | いいえ | |
関数名 | いいえ | |
テーブル名 | はい | |
列名 | はい | |
文字列値 | はい | |
文字列比較 | はい | |
クエリ内のエイリアス | いいえ | |
正規表現一致 | 注記を参照 | 正規表現一致は、式自体で大文字と小文字を区別しないように指定しない限り、デフォルトでは大文字と小文字が区別されます。 |
LIKE 一致 | はい |
予約キーワード
キーワードは、Beam SQL 言語で特別な意味を持つトークンのグループであり、次の特性があります。
- キーワードは、バッククォート (`) 文字で囲まれていない限り、識別子として使用できません。
- キーワードでは大文字と小文字は区別されません。
Beam SQL には、次の予約キーワードがあります。
A ABS ABSOLUTE ACTION ADA ADD ADMIN AFTER ALL ALLOCATE ALLOW ALTER ALWAYS AND ANY APPLY ARE ARRAY ARRAY_MAX_CARDINALITY AS ASC ASENSITIVE ASSERTION ASSIGNMENT ASYMMETRIC AT ATOMIC ATTRIBUTE ATTRIBUTES AUTHORIZATION AVG BEFORE BEGIN BEGIN_FRAME BEGIN_PARTITION BERNOULLI BETWEEN BIGINT BINARY BIT BLOB BOOLEAN BOTH BREADTH BY C CALL CALLED CARDINALITY CASCADE CASCADED CASE CAST CATALOG CATALOG_NAME CEIL CEILING CENTURY CHAIN CHAR CHAR_LENGTH CHARACTER CHARACTER_LENGTH CHARACTER_SET_CATALOG CHARACTER_SET_NAME CHARACTER_SET_SCHEMA CHARACTERISTICS CHARACTERS CHECK CLASSIFIER CLASS_ORIGIN CLOB CLOSE COALESCE COBOL COLLATE COLLATION COLLATION_CATALOG COLLATION_NAME COLLATION_SCHEMA COLLECT COLUMN COLUMN_NAME COMMAND_FUNCTION COMMAND_FUNCTION_CODE COMMENT COMMIT COMMITTED CONDITION CONDITION_NUMBER CONNECT CONNECTION CONNECTION_NAME CONSTRAINT CONSTRAINT_CATALOG CONSTRAINT_NAME CONSTRAINT_SCHEMA CONSTRAINTS CONSTRUCTOR CONTAINS CONTINUE CONVERT CORR CORRESPONDING COUNT COVAR_POP COVAR_SAMP CREATE CROSS CUBE CUME_DIST CURRENT CURRENT_CATALOG CURRENT_DATE CURRENT_DEFAULT_TRANSFORM_GROUP CURRENT_PATH CURRENT_ROLE CURRENT_ROW CURRENT_SCHEMA CURRENT_TIME CURRENT_TIMESTAMP CURRENT_TRANSFORM_GROUP_FOR_TYPE CURRENT_USER CURSOR CURSOR_NAME CYCLE DATA DATABASE DATE DATETIME_INTERVAL_CODE DATETIME_INTERVAL_PRECISION DAY DEALLOCATE DEC DECADE DECIMAL DECLARE DEFAULT DEFAULTS DEFERRABLE DEFERRED DEFINE DEFINED DEFINER DEGREE DELETE DENSE_RANK DEPTH DEREF DERIVED DESC DESCRIBE DESCRIPTION DESCRIPTOR DETERMINISTIC DIAGNOSTICS DISALLOW DISCONNECT DISPATCH DISTINCT DOMAIN DOUBLE DOW DOY DROP DYNAMIC DYNAMIC_FUNCTION DYNAMIC_FUNCTION_CODE EACH ELEMENT ELSE EMPTY END END-EXEC END_FRAME END_PARTITION EPOCH EQUALS ESCAPE EVERY EXCEPT EXCEPTION EXCLUDE EXCLUDING EXEC EXECUTE EXISTS EXP EXPLAIN EXTEND EXTERNAL EXTRACT FALSE FETCH FILTER FINAL FIRST FIRST_VALUE FLOAT FLOOR FOLLOWING FOR FOREIGN FORTRAN FOUND FRAC_SECOND FRAME_ROW FREE FROM FULL FUNCTION FUSION G GENERAL GENERATED GEOMETRY GET GLOBAL GO GOTO GRANT GRANTED GROUP GROUPING GROUPS HAVING HIERARCHY HOLD HOUR IDENTITY IF IMMEDIATE IMMEDIATELY IMPLEMENTATION IMPORT IN INCLUDING INCREMENT INDICATOR INITIAL INITIALLY INNER INOUT INPUT INSENSITIVE INSERT INSTANCE INSTANTIABLE INT INTEGER INTERSECT INTERSECTION INTERVAL INTO INVOKER IS ISOLATION JAVA JOIN JSON K KEY KEY_MEMBER KEY_TYPE LABEL LAG LANGUAGE LARGE LAST LAST_VALUE LATERAL LEAD LEADING LEFT LENGTH LEVEL LIBRARY LIKE LIKE_REGEX LIMIT LN LOCAL LOCALTIME LOCALTIMESTAMP LOCATION LOCATOR LOWER M MAP MATCH MATCHED MATCHES MATCH_NUMBER MATCH_RECOGNIZE MAX MAXVALUE MEASURES MEMBER MERGE MESSAGE_LENGTH MESSAGE_OCTET_LENGTH MESSAGE_TEXT METHOD MICROSECOND MILLENNIUM MIN MINUTE MINVALUE MOD MODIFIES MODULE MONTH MORE MULTISET MUMPS NAME NAMES NATIONAL NATURAL NCHAR NCLOB NESTING | NEW NEXT NO NONE NORMALIZE NORMALIZED NOT NTH_VALUE NTILE NULL NULLABLE NULLIF NULLS NUMBER NUMERIC OBJECT OCCURRENCES_REGEX OCTET_LENGTH OCTETS OF OFFSET OLD OMIT ON ONE ONLY OPEN OPTION OPTIONS OR ORDER ORDERING ORDINALITY OTHERS OUT OUTER OUTPUT OVER OVERLAPS OVERLAY OVERRIDING PAD PARAMETER PARAMETER_MODE PARAMETER_NAME PARAMETER_ORDINAL_POSITION PARAMETER_SPECIFIC_CATALOG PARAMETER_SPECIFIC_NAME PARAMETER_SPECIFIC_SCHEMA PARTIAL PARTITION PASCAL PASSTHROUGH PAST PATH PATTERN PER PERCENT PERCENTILE_CONT PERCENTILE_DISC PERCENT_RANK PERIOD PERMUTE PLACING PLAN PLI PORTION POSITION POSITION_REGEX POWER PRECEDES PRECEDING PRECISION PREPARE PRESERVE PREV PRIMARY PRIOR PRIVILEGES PROCEDURE PUBLIC QUARTER RANGE RANK READ READS REAL RECURSIVE REF REFERENCES REFERENCING REGR_AVGX REGR_AVGY REGR_COUNT REGR_INTERCEPT REGR_R2 REGR_SLOPE REGR_SXX REGR_SXY REGR_SYY RELATIVE RELEASE REPEATABLE REPLACE RESET RESTART RESTRICT RESULT RETURN RETURNED_CARDINALITY RETURNED_LENGTH RETURNED_OCTET_LENGTH RETURNED_SQLSTATE RETURNS REVOKE RIGHT ROLE ROLLBACK ROLLUP ROUTINE ROUTINE_CATALOG ROUTINE_NAME ROUTINE_SCHEMA ROW ROW_COUNT ROW_NUMBER ROWS RUNNING SAVEPOINT SCALE SCHEMA SCHEMA_NAME SCOPE SCOPE_CATALOGS SCOPE_NAME SCOPE_SCHEMA SCROLL SEARCH SECOND SECTION SECURITY SEEK SELECT SELF SENSITIVE SEQUENCE SERIALIZABLE SERVER SERVER_NAME SESSION SESSION_USER SET SETS MINUS SHOW SIMILAR SIMPLE SIZE SKIP SMALLINT SOME SOURCE SPACE SPECIFIC SPECIFIC_NAME SPECIFICTYPE SQL SQLEXCEPTION SQLSTATE SQLWARNING SQL_BIGINT SQL_BINARY SQL_BIT SQL_BLOB SQL_BOOLEAN SQL_CHAR SQL_CLOB SQL_DATE SQL_DECIMAL SQL_DOUBLE SQL_FLOAT SQL_INTEGER SQL_INTERVAL_DAY SQL_INTERVAL_DAY_TO_HOUR SQL_INTERVAL_DAY_TO_MINUTE SQL_INTERVAL_DAY_TO_SECOND SQL_INTERVAL_HOUR SQL_INTERVAL_HOUR_TO_MINUTE SQL_INTERVAL_HOUR_TO_SECOND SQL_INTERVAL_MINUTE SQL_INTERVAL_MINUTE_TO_SECOND SQL_INTERVAL_MONTH SQL_INTERVAL_SECOND SQL_INTERVAL_YEAR SQL_INTERVAL_YEAR_TO_MONTH SQL_LONGVARBINARY SQL_LONGVARCHAR SQL_LONGVARNCHAR SQL_NCHAR SQL_NCLOB SQL_NUMERIC SQL_NVARCHAR SQL_REAL SQL_SMALLINT SQL_TIME SQL_TIMESTAMP SQL_TINYINT SQL_TSI_DAY SQL_TSI_FRAC_SECOND SQL_TSI_HOUR SQL_TSI_MICROSECOND SQL_TSI_MINUTE SQL_TSI_MONTH SQL_TSI_QUARTER SQL_TSI_SECOND SQL_TSI_WEEK SQL_TSI_YEAR SQL_VARBINARY SQL_VARCHAR SQRT START STATE STATEMENT STATIC STDDEV_POP STDDEV_SAMP STREAM STRUCTURE STYLE SUBCLASS_ORIGIN SUBMULTISET SUBSET SUBSTITUTE SUBSTRING SUBSTRING_REGEX SUCCEEDS SUM SYMMETRIC SYSTEM SYSTEM_TIME SYSTEM_USER TABLE TABLE_NAME TABLESAMPLE TBLPROPERTIES TEMPORARY THEN TIES TIME TIMESTAMP TIMESTAMPADD TIMESTAMPDIFF TIMEZONE_HOUR TIMEZONE_MINUTE TINYINT TO TOP_LEVEL_COUNT TRAILING TRANSACTION TRANSACTIONS_ACTIVE TRANSACTIONS_COMMITTED TRANSACTIONS_ROLLED_BACK TRANSFORM TRANSFORMS TRANSLATE TRANSLATE_REGEX TRANSLATION TREAT TRIGGER TRIGGER_CATALOG TRIGGER_NAME TRIGGER_SCHEMA TRIM TRIM_ARRAY TRUE TRUNCATE TYPE UESCAPE UNBOUNDED UNCOMMITTED UNDER UNION UNIQUE UNKNOWN UNNAMED UNNEST UPDATE UPPER UPSERT USAGE USER USER_DEFINED_TYPE_CATALOG USER_DEFINED_TYPE_CODE USER_DEFINED_TYPE_NAME USER_DEFINED_TYPE_SCHEMA USING VALUE VALUES VALUE_OF VAR_POP VAR_SAMP VARBINARY VARCHAR VARYING VERSION VERSIONING VIEW WEEK WHEN WHENEVER WHERE WIDTH_BUCKET WINDOW WITH WITHIN WITHOUT WORK WRAPPER WRITE XML YEAR ZONE |
終端セミコロン
ステートメントは、アプリケーションプログラミングインターフェース(API)を通じて送信されるクエリ文字列のコンテキストで、オプションで終端セミコロン(;
)を使用できます。一部のインタラクティブツールでは、ステートメントに終端セミコロンが必要です。複数のステートメントを含むリクエストでは、ステートメントはセミコロンで区切る必要がありますが、最後のステートメントではセミコロンはオプションです。
コメント
コメントは、パーサーによって無視される文字のシーケンスです。Beam SQLは、次のタイプのコメントをサポートしています。
単一行コメント
1行コメントは、コメントの前に--
を付けることでサポートされます。
例
SELECT x FROM T; --xはフィールドで、Tはテーブルです
コメントには、'--
'シーケンスから行末までのすべての文字が含まれます。オプションで、'--
'の後にスペースを追加できます。
複数行コメント
複数行のコメントは、/* <コメント> */
を使用してコメントを囲むことでサポートされます。
例
SELECT x FROM T /* x is a field and T is a table */
WHERE x = 3;
無効な例
SELECT x FROM T /* comment starts here
/* comment ends on this line */
this line is not considered a comment */
WHERE x = 3;
コメントには、改行を含むすべての文字が、最初の出現箇所である'/*
'と、その後の最初の出現箇所である'*/
'で囲まれています。ネストされたコメントはサポートされていません。2番目の例には、クエリを無効にするネストされたコメントが含まれています。
このページのコンテンツの一部は、Googleが作成および共有したものを基に修正したものであり、Creative Commons 3.0 Attribution Licenseに記載された条件に従って使用されています。