Beam Calcite SQL 词法结构
Beam Calcite SQL 语句由一系列标记组成。标记包括标识符、引用标识符、字面量、关键字、运算符和特殊字符。标记可以用空格(空格、退格键、制表符、换行符)或注释分隔。
标识符
标识符是与列、表和其他数据库对象相关联的名称。
标识符必须以字母或下划线开头。后面的字符可以是字母、数字或下划线。引用标识符是用反引号(`)括起来的标识符,可以包含任何字符,例如空格或符号。但是,引用标识符不能是空的。保留关键字 只能在用反引号括起来的情况下用作标识符。
语法(此处定义为正则表达式)
[A-Za-z_][A-Za-z_0-9]*
示例
Customers5
_dataField1
ADGROUP
无效示例
5Customers
_dataField!
GROUP
5Customers
以数字开头,而不是字母或下划线。_dataField!
包含特殊字符“!”,它不是字母、数字或下划线。GROUP
是保留关键字,因此不能在不使用反引号括起来的情况下用作标识符。
标识符和引用标识符都区分大小写,但有一些细微差别。有关详细信息,请参见大小写敏感性。
引用标识符具有与字符串字面量相同的转义序列,如下所示。
字面量
字面量表示内置数据类型的常数值。某些但并非所有数据类型都可以用字面量表示。
字符串字面量
字符串和字节字面量都必须用单引号(')引起来。
引用字面量
字面量 | 示例 | 描述 |
---|---|---|
引用字符串 |
| 用单引号(')引起来的引用字符串可以包含未转义的双引号(")。 两个引号('')是转义序列。 引用字符串可以包含换行符。 |
整数字面量
整数字面量是十进制数字(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 署名许可中的条款使用。