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"'
用单引号(')引起来的引用字符串可以包含未转义的双引号(")。
两个引号('')是转义序列。
引用字符串可以包含换行符。

整数字面量

整数字面量是十进制数字(0 到 9)的序列。整数可以以“+”或“-”为前缀,分别表示正值和负值。

示例

123
-123

整数字面量解释为BIGINT

浮点数字面量

语法选项

[+-]DIGITS.[DIGITS][e[+-]DIGITS]
[DIGITS].DIGITS[e[+-]DIGITS]
DIGITSe[+-]DIGITS

DIGITS 表示一个或多个十进制数字(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
游标
游标名称
循环
数据
数据库
日期
日期时间间隔代码
日期时间间隔精度

释放
十进制
十年
十进制
声明
默认
默认值
可延迟
延迟
定义
已定义
定义者

删除
密集排名
深度
解除引用
派生
降序
描述
描述
描述符
确定性
诊断
不允许
断开连接
调度
不同

双精度
星期几
年内天数
删除
动态
动态函数
动态函数代码
每个
元素
否则

结束
结束执行
结束帧
结束分区
纪元
等于
转义
每个
除了
异常
排除
不包括
执行
执行
存在
指数
解释
扩展
外部
提取

获取
过滤器
最终
第一个
第一个值
浮点
向下取整
后续

外键
Fortran
找到
秒的几分之一
帧行
释放

完全
函数
融合
G
一般
生成
几何
获取
全局
转到
跳转
授予
已授予

分组

拥有
层次结构
保持
小时
标识
如果
立即
立即
实现
导入

包括
增量
指示器
初始
最初
内部
输入输出
输入
不敏感
插入
实例
可实例化
整数
整数
交集
交叉点
间隔

调用者

隔离
Java
连接
JSON
K

键成员
键类型
标签
滞后
语言

最后
最后一个值
横向
引导
前导

长度
级别

喜欢
正则表达式匹配
限制
自然对数
本地
本地时间
本地时间戳
位置
定位器
较低
M
映射
匹配
匹配
匹配
匹配编号
匹配识别
最大值
最大值
度量
成员
合并
消息长度
消息字节长度
消息文本
方法
微秒
千年
最小值
分钟
最小值

修改
模块

更多
多集
MUMPS
名称
名称
国家
自然
国家字符
国家长文本
嵌套

下一个


规范化
已标准化

第 N 个值
N 等分

可为空
如果为空
空值
数字
数值
对象
正则表达式匹配次数
字节长度
字节

偏移量

省略



打开
选项
选项

订单
排序
序数
其他
输出
外部
输出
超过
重叠
覆盖
覆盖
填充
参数
参数模式
参数名称
参数序号
参数特定目录
参数特定名称
参数特定模式
部分
分区
Pascal
直通
过去
路径
模式

百分比
百分位数连续
百分位数离散
百分位排名
期间
置换
放置
计划
PLI
部分
位置
正则表达式位置
权力
先于
之前
精度
准备
保留

主要
优先
特权
过程
公共
季度
范围
排名
阅读
读取
真实
递归
引用
参考
引用
回归平均 X
回归平均 Y
回归计数
回归截距
回归 R 平方
回归斜率
回归 SXX
回归 SXY
回归 SYY
相对
释放
可重复
替换
重置
重新启动
限制
结果
返回
返回基数
返回长度
返回字节长度
返回 SQL 状态
返回
撤销
正确
角色
回滚
汇总
例程
例程目录
例程名称
例程模式

行数
行号

运行
保存点
比例
模式
模式名称
范围
范围目录
范围名称
范围模式
滚动
搜索
第二
部分
安全性
寻找
选择
自身
敏感
序列
可序列化
服务器
服务器名称
会话
会话用户
设置


显示
类似
简单
大小
跳过
小型整数
一些
来源
空间
具体
特定名称
特定类型
SQL
SQL 异常
SQL 状态
SQL 警告
SQL 大整数
SQL 二进制
SQL 位
SQL 大二进制对象
SQL 布尔值
SQL 字符
SQL 长文本
SQL 日期
SQL 十进制
SQL 双精度
SQL 浮点
SQL 整数
SQL 日间隔
SQL 日到小时间隔
SQL 日到分钟间隔
SQL 日到秒间隔
SQL 小时间隔
SQL 小时到分钟间隔
SQL 小时到秒间隔
SQL 分钟间隔
SQL 分钟到秒间隔
SQL 月间隔
SQL 秒间隔
SQL 年间隔
SQL 年到月间隔
SQL 长可变二进制
SQL 长可变字符
SQL 长可变国家字符
SQL 国家字符
SQL 国家长文本
SQL 数值
SQL 国家可变字符
SQL 实数
SQL 小型整数
SQL 时间
SQL 时间戳
SQL 微型整数
SQL 时间戳间隔日
SQL 时间戳间隔秒的几分之一
SQL 时间戳间隔小时
SQL 时间戳间隔微秒
SQL 时间戳间隔分钟
SQL 时间戳间隔月
SQL 时间戳间隔季度
SQL 时间戳间隔秒
SQL 时间戳间隔周
SQL 时间戳间隔年
SQL 可变二进制
SQL 可变字符
平方根
开始
状态
语句
静态
总体标准差
样本标准差

结构
风格
子类来源
子多集
子集
替换
子字符串
正则表达式子字符串
成功
总和
对称
系统
系统时间
系统用户

表名
表抽样
表属性
临时
然后
并列
时间
时间戳
添加时间戳
时间戳差值
时区小时
时区分钟
微型整数

顶层计数
尾随
事务
活动事务
已提交事务
已回滚事务
转换
转换
翻译
正则表达式翻译
翻译
处理
触发器
触发器目录
触发器名称
触发器模式
修剪
修剪数组

截断
类型
转义
无界
未提交
之下
联合
唯一
未知
无名
展开
更新
上限
更新插入
使用
用户
用户定义类型目录
用户定义类型代码
用户定义类型名称
用户定义类型模式
使用



总体方差
样本方差
可变二进制
可变字符
可变
版本
版本控制
视图

何时
无论何时
哪里
宽度桶
窗口


没有
工作
包装器

XML

区域

终止分号

语句可以选择使用分号 (;) 作为终止符,前提是它是在通过应用程序编程接口 (API) 提交的查询字符串的上下文中。某些交互式工具要求语句使用分号作为终止符。在一个包含多个语句的请求中,语句必须用分号分隔,但对于最后一个语句,分号是可选的。

注释

注释是解析器忽略的字符序列。Beam SQL 支持以下类型的注释。

单行注释

单行注释由注释之前添加 -- 完成。

示例

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;

注释包含所有字符,包括换行符,从第一个出现的“/*”到第一个后续出现的“*/”之间。不支持嵌套注释。第二个示例包含一个嵌套注释,这使得查询无效。

此页面部分内容基于 Google 创建和共享的作品,并根据Creative Commons 3.0 署名许可中的条款使用。