Beam Calcite SQL の字句構造

Beam Calcite SQL ステートメントは、一連のトークンで構成されます。トークンには、識別子引用符付き識別子リテラルキーワード演算子、および特殊文字が含まれます。トークンは、空白 (スペース、バックスペース、タブ、改行) またはコメントで区切ることができます。

識別子

識別子は、列、テーブル、およびその他のデータベースオブジェクトに関連付けられた名前です。

識別子は、文字またはアンダースコアで始める必要があります。後続の文字は、文字、数字、またはアンダースコアにすることができます。引用符付き識別子は、バッククォート (`) 文字で囲まれた識別子であり、スペースや記号などの任意の文字を含めることができます。ただし、引用符付き識別子は空にすることはできません。予約キーワードは、バッククォートで囲まれている場合にのみ識別子として使用できます。

構文 (ここでは正規表現として定義)

[A-Za-z_][A-Za-z_0-9]*

Customers5
_dataField1
ADGROUP

無効な例

5Customers
_dataField!
GROUP

5Customers は、文字またはアンダースコアではなく、数字で始まっています。_dataField! には、文字、数字、またはアンダースコアではない特殊文字「!」が含まれています。GROUP は予約キーワードであるため、バッククォート文字で囲まれていない場合は識別子として使用できません。

識別子と引用符付き識別子の両方で大文字と小文字は区別されませんが、いくつかのニュアンスがあります。詳細については、大文字と小文字の区別を参照してください。

引用符付き識別子には、以下で定義されている文字列リテラルと同じエスケープシーケンスがあります。

リテラル

リテラルは、組み込みデータ型の定数値を表します。一部のデータ型はリテラルとして表現できますが、すべてではありません。

文字列リテラル

文字列リテラルとバイトリテラルの両方は、単一 (') 引用符で引用符で囲む必要があります。

引用符付きリテラル

リテラル説明
引用符付き文字列
  • 'it''s'
  • 'Title: "Boy"'
単一 (') 引用符で囲まれた引用符付き文字列には、エスケープされていない二重 (") 引用符を含めることができます。
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に記載された条件に従って使用されています。