规范
输出字段名语义
登录后可跨设备保存划线和私人笔记登录
输出字段名语义
本规范说明了应如何根据给定的用户查询生成输出记录批次中的字段名。字段名规则适用于由 SQL 查询和 DataFrame API 规划的 DataFusion 查询。
字段名规则
所有裸列(bare column)的字段名都不得包含关系/表限定符。
SELECT t1.id、SELECT id和df.select_columns(&["id"])都应得到字段名:id
所有复合列表达式的字段名都必须包含关系/表限定符。
SELECT foo + bar应得到字段名:table.foo PLUS table.bar
函数名必须转换为小写。
SELECT AVG(c1)应得到字段名:avg(table.c1)
字符串字面量不得被引号或双引号包裹。
SELECT 'foo'应得到字段名:foo
运算符表达式必须用括号包裹。
SELECT -2应得到字段名:(- 2)
运算符与操作数之间必须以空格分隔。
SELECT 1+2应得到字段名:(1 + 2)
函数参数之间必须以逗号
,和一个空格分隔。SELECT f(c1,c2)和df.select(vec![f.udf("f")?.call(vec![col("c1"), col("c2")])])应得到字段名:f(table.c1, table.c2)
附录
示例及与其他系统的比较
用于测试样例查询的数据模式:
CREATE TABLE t1 (id INT, a VARCHAR(5));
INSERT INTO t1 (id, a) VALUES (1, 'foo');
INSERT INTO t1 (id, a) VALUES (2, 'bar');
CREATE TABLE t2 (id INT, b VARCHAR(5));
INSERT INTO t2 (id, b) VALUES (1, 'hello');
INSERT INTO t2 (id, b) VALUES (2, 'world');投影列
查询:
SELECT t1.id, a, t2.id, b
FROM t1
JOIN t2 ON t1.id = t2.idDataFusion Arrow 记录批次输出:
| id | a | id | b |
|---|---|---|---|
| 1 | foo | 1 | hello |
| 2 | bar | 2 | world |
Spark、MySQL 8 和 PostgreSQL 13 输出:
| id | a | id | b |
|---|---|---|---|
| 1 | foo | 1 | hello |
| 2 | bar | 2 | world |
SQLite 3 输出:
| id | a | b |
|---|---|---|
| 1 | foo | hello |
| 2 | bar | world |
函数转换列
查询:
SELECT ABS(t1.id), abs(-id) FROM t1;DataFusion Arrow 记录批次输出:
| abs(t1.id) | abs((- t1.id)) |
|---|---|
| 1 | 1 |
| 2 | 2 |
Spark 输出:
| abs(id) | abs((- id)) |
|---|---|
| 1 | 1 |
| 2 | 2 |
MySQL 8 输出:
| ABS(t1.id) | abs(-id) |
|---|---|
| 1 | 1 |
| 2 | 2 |
PostgreSQL 13 输出:
| abs | abs |
|---|---|
| 1 | 1 |
| 2 | 2 |
SQlite 3 输出:
| ABS(t1.id) | abs(-id) |
|---|---|
| 1 | 1 |
| 2 | 2 |
函数与运算符
查询:
SELECT t1.id + ABS(id), ABS(id * t1.id) FROM t1;DataFusion Arrow 记录批次输出:
| t1.id + abs(t1.id) | abs(t1.id * t1.id) |
|---|---|
| 2 | 1 |
| 4 | 4 |
Spark 输出:
| id + abs(id) | abs(id * id) |
|---|---|
| 2 | 1 |
| 4 | 4 |
MySQL 8 输出:
| t1.id + ABS(id) | ABS(id * t1.id) |
|---|---|
| 2 | 1 |
| 4 | 4 |
PostgreSQL 输出:
| ?column? | abs |
|---|---|
| 2 | 1 |
| 4 | 4 |
SQLite 输出:
| t1.id + ABS(id) | ABS(id * t1.id) |
|---|---|
| 2 | 1 |
| 4 | 4 |
投影字面量
查询:
SELECT 1, 2+5, 'foo_bar';DataFusion Arrow 记录批次输出:
| 1 | (2 + 5) | foo_bar |
|---|---|---|
| 1 | 7 | foo_bar |
Spark 输出:
| 1 | (2 + 5) | foo_bar |
|---|---|---|
| 1 | 7 | foo_bar |
MySQL 输出:
| 1 | 2+5 | foo_bar |
|---|---|---|
| 1 | 7 | foo_bar |
PostgreSQL 输出:
| ?column? | ?column? | ?column? |
|---|---|---|
| 1 | 7 | foo_bar |
SQLite 3 输出:
| 1 | 2+5 | ‘foo_bar’ |
|---|---|---|
| 1 | 7 | foo_bar |
评论
登录后参与评论
正在加载评论…
KnowForge