tencent cloud

数据湖计算

产品动态
产品简介
产品概述
产品优势
应用场景
购买指南
计费概述
退费说明
欠费说明
调整配置费用说明
快速入门
新用户开通全流程
DLC 数据导入指引
一分钟入门 DLC 数据分析
一分钟入门 DLC 权限管理
一分钟入门分区表
开启数据优化
跨源分析 EMR Hive 数据
标准引擎配置指引
配置数据访问策略
操作指南
控制台操作介绍
开发指南
运行环境
SparkJar 作业开发指南
PySpark 作业开发指南
查询性能优化指南
UDF 函数开发指南
系统约束
客户端访问
JDBC 访问
TDLC 命令行工具访问
第三方软件联动
Python 访问
实践教程
通过 Power BI 访问 DLC 数据操作指南
建表实践
使用 Apache Airflow 调度 DLC 引擎提交任务
StarRocks 直接查询 DLC 内部存储
Spark 计算成本优化实践
DATA + AI
使用 DLC 分析 CLS 日志
使用角色 SSO 访问 DLC
资源级鉴权指南
在 DLC 中实现 TCHouse-D 读写操作
DLC 原生表
SQL 语法
SuperSQL 语法
标准 Spark 语法概览
标准 Presto 语法概览
保留字
API 文档
History
Introduction
API Category
Making API Requests
Data Table APIs
Task APIs
Metadata APIs
Service Configuration APIs
Permission Management APIs
Database APIs
Data Source Connection APIs
Data Optimization APIs
Data Engine APIs
Resource Group for the Standard Engine APIs
Data Types
Error Codes
通用类参考
错误码
配额与限制
第三方软件连接DLC操作指南
常见问题
权限类常见问题
引擎类常见问题
功能类常见问题
Spark 作业类常见问题
DLC 政策
隐私协议
数据处理和安全协议
服务等级协议
联系我们

SELECT STATEMENT

PDF
聚焦模式
字号
最后更新时间: 2024-08-07 17:27:58
SELECT 语句:从零个或多个表中检索数据行。

语法

[ WITH with_query [, ...] ]
SELECT [ ALL | DISTINCT ] select_expression [, ...]
[ FROM from_item [, ...] ]
[ WHERE condition ]
[ GROUP BY [ ALL | DISTINCT ] grouping_element [, ...] ]
[ HAVING condition ]
[ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ]
[ ORDER BY expression [ ASC | DESC ] [ NULLS FIRST | NULLS LAST] [, ...] ]
[ LIMIT [ count | ALL ] ]

参数

[ WITH with_query [, ....] ]

可使用 WITH 来展平嵌套查询或简化子查询。with_query 语法如下:
subquery_table_name [ ( column_name [, ...] ) ] AS (subquery)
subquery_table_name 是临时表的唯一名称,该临时表用于定义 WITH 子句子查询的结果。每个 subquery 都必须具有一个可在 FROM 子句中引用的表名称。
column_name [, ...] 是可选的输出列名称列表。列名称数目必须等于或小于 subquery 定义的列数。
subquery 是任意查询语句。

[ ALL | DISTINCT ] select_expr

ALL 和 DISTINCT 选项指定是否应返回重复的行。如果没有给出这些选项,则默认值为 ALL(返回所有匹配的行)。DISTINCT 指定从结果集中删除重复行。

FROM from_item [, ...]

from_item 可以是视图、表、子查询,如果多表 join,支持的 join 类型如下:
[ INNER ] JOIN
LEFT [ OUTER ] JOIN
RIGHT [ OUTER ] JOIN
FULL [ OUTER ] JOIN
CROSS JOIN
ON join_condition,如果使用 join_condition,您可以为多个表中的联接键指定列名称;如果使用 join_column,则要求 join_column 在两个表中都存在。

[ WHERE condition ]

根据您指定的 condition 筛选结果,返回满足条件的结果集。

[ GROUP BY [ ALL | DISTINCT ] grouping_expressions [, ...] ]

GROUP BY 表达式可以按照指定的列名对输出进行分组。

[HAVING condition ]

与聚合函数和 GROUP BY 子句一起使用。控制哪些组处于选中状态,从而消除不满足 condition 的组。此筛选在计算组和聚合之后发生。

[{UNION | INTERSECT | EXCEPT} [ALL | DISTINCT] union_query]

UNIONINTERSECTEXCEPT 将多个结果组合在一起,UNION 将第一个查询生成的行与第二个查询生成的行组合在一起。为了消除重复,UNION 构建一个散列表,这会消耗内存。为了更好的性能,建议使用 UNION ALL。
INTERSECT 仅返回第一个和第二个查询的结果中存在的行。
EXCEPT 返回第一个查询结果中的行,不包括第二个查询找到的行。

[ORDER BY expression [ ASC | DESC ] [ NULLS FIRST | NULLS LAST] [, ...] ]

按一个或多个输出 expression 对结果集进行排序,当子句包含多个表达式时,将根据第一个 expression 对结果集进行排序。然后,第二个 expression 应用于具有第一个表达式中的匹配值的行,以此类推。

示例

WITH Clause

WITH 子句定义在查询中使用的命名关系。它允许展平嵌套查询或简化子查询。例如,以下查询是等效的:
WITH x AS (SELECT a, MAX(b) AS b FROM t GROUP BY a)
SELECT a, b FROM x;
也可以跟多个子查询:
WITH
t1 AS (SELECT a, MAX(b) AS b FROM x GROUP BY a),
t2 AS (SELECT a, AVG(d) AS d FROM y GROUP BY a)
SELECT t1.*, t2.*
FROM t1
JOIN t2 ON t1.a = t2.a;

GROUP BY Clause

GROUPBY 子句将 SELECT 语句的输出分成包含匹配值的行组。简单的 GROUPBY 子句可以包含由输入列组成的任何表达式,也可以是按位置选择输出列的序数:
SELECT count(*), nationkey FROM customer GROUP BY 2;
SELECT count(*), nationkey FROM customer GROUP BY nationkey;
SELECT count(*) FROM customer GROUP BY mktsegment;

GROUPING SETS

分组集允许用户指定要分组的列的多个列表。不属于给定分组列子列表的列被设置为空。
SELECT origin_state, origin_zip, destination_state, sum(package_weight)
FROM shipping
GROUP BY GROUPING SETS (
(origin_state),
(origin_state, origin_zip),
(destination_state));
SELECT origin_state, NULL, NULL, sum(package_weight)
FROM shipping GROUP BY origin_state
UNION ALL
SELECT origin_state, origin_zip, NULL, sum(package_weight)
FROM shipping GROUP BY origin_state, origin_zip
UNION ALL
SELECT NULL, NULL, destination_state, sum(package_weight)
FROM shipping GROUP BY destination_state;

HAVING Clause

HAVING 子句与 aggregate 函数和 groupby 子句一起使用,以控制选择哪些组。HAVING 子句消除了不满足给定条件的组。
SELECT count(*), mktsegment, nationkey,
CAST(sum(acctbal) AS bigint) AS totalbal
FROM customer
GROUP BY mktsegment, nationkey
HAVING sum(acctbal) > 5700000
ORDER BY totalbal DESC;

IN

IN 操作符允许您在 WHERE 子句中规定多个值。
SELECT name
FROM nation
WHERE regionkey IN (SELECT regionkey FROM region)

EXISTS

EXISTS 运算符用于判断查询子句是否有记录,如果有一条或多条记录存在返回 True,否则返回 False。
SELECT column_name(s)
FROM table_name
WHERE EXISTS
(SELECT column_name FROM table_name WHERE condition)

USING

用 using 关键字进行简化。
查询必须是相等条件连接。
等值连接中的列必须具有相同的名称和数据类型。
SELECT *
FROM table_1
JOIN table_2
USING (key_A, key_B)
SELECT *
FROM (
VALUES
(1, 3, 10),
(2, 4, 20)
) AS table_1 (key_A, key_B, y1)
LEFT JOIN (
VALUES
(1, 3, 100),
(2, 4, 200)
) AS table_2 (key_A, key_B, y2)
USING (key_A, key_B);

CROSS JOIN

交叉连接返回两个关系的笛卡尔积(所有组合)。
SELECT *
FROM nation
CROSS JOIN region

LIMIT Clause

LIMIT 子句限制结果集中的行数。
SELECT orderdate FROM orders LIMIT 5

ORDER BY Clause

ORDER BY 子句用于按一个或多个输出表达式对结果集进行排序。
语法:ORDER BY expression [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...]
SELECT name, age FROM person ORDER BY age
SELECT * FROM student
ORDER BY student_id
SELECT * FROM student
ORDER BY student_id,student_name

EXCEPT

EXCEPT 子句/操作符用于合并两个 SELECT 语句,并从那些没有被第二个 SELECT 语句返回的第一个 SELECT 语句返回行。这意味着 EXCEPT 仅返回行,在第二个 SELECT 语句不可用。
正如使用 UNION 操作,同样的规则时,使用 EXCEPT 操作符适用。
SELECT * FROM (VALUES 13, 42)
EXCEPT
SELECT 13

INTERSECT

从 SELECT 语句返回两个或多个结果集的不同行。
SELECT * FROM (VALUES 13, 42)
INTERSECT
SELECT 1

UNION

将两个或多个 SELECT 语句的结果集合并到一个结果集中。要保留结果集中的重复行,请使用UNION ALL运算符。
SELECT 13
UNION
SELECT 42
SELECT id FROM a
UNION ALL
SELECT id FROM b;

TABLESAMPLE

BERNOULLI:选择每一行作为表样本,概率为样本百分比。使用 Bernoulli 方法对表进行采样时,将扫描表的所有物理块并跳过某些行(基于采样百分比与运行时计算的随机值之间的比较)。结果中包含一行的概率独立于任何其他行。这不会减少从磁盘读取采样表所需的时间。如果进一步处理采样输出,可能会影响总查询时间。
SYSTEM:这种采样方法将表划分为逻辑数据段,并以此粒度对表进行采样。此采样方法要么从特定数据段中选择所有行,要么跳过它(基于采样百分比和运行时计算的随机值之间的比较)。在系统采样中选择的行将取决于所使用的连接器。例如,当与 Hive 一起使用时,它取决于数据在 HDFS 上的布局方式。这种方法不能保证独立的抽样概率。
SELECT *
FROM users TABLESAMPLE BERNOULLI (50);
SELECT *
FROM users TABLESAMPLE SYSTEM (75);

PIVOT Clause

根据特定的列返回聚合值。
SELECT * FROM person
PIVOT (
SUM(age) AS a, AVG(class) AS c
FOR name IN ('John' AS john, 'Mike' AS mike)
);

Lateral View Clause

LATERAL VIEW [ OUTER ] generator_function ( expression [ , ... ] ) [ table_alias ] AS column_alias [ , ... ]

转义

要转义单引号,请在其前面加上另一个单引号,如以下示例所示:
Select 'dlc''test'
创建表的时候指定转义符或者逃逸符,例如使用下列方式创建:
CREATE EXTERNAL TABLE IF NOT EXISTS `csv_test_2222` (
`_c0` STRING,
`_c1` INTEGER,
`_c2` INTEGER,
`_c3` INTEGER
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES (
'separatorChar' = '''',
'quoteChar' = ''''
)
STORED AS `textfile`
LOCATION 'cosn://dlc-nj-1258469122/csv/100M/


帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈