星号 (*) 子句
描述
它是一种简写方式,用于命名 FROM 子句中所有可引用列,或 FROM 子句中特定表引用(table reference)的列或字段。星号子句最常用于 SELECT 列表。Spark 还支持将其用于函数调用以及 SELECT 列表和 WHERE 子句中的某些 n 元操作。
语法
[ name . ] * [ except_clause ]
except_clause
EXCEPT ( { column_name | field_name } [, ...] )
参数
-
name
如果存在,将要命名的列或字段限制为指定的可引用字段、列或表中的列或字段。
-
except_clause
可选地从 select_star 子句中标识的可引用列集中移除列或字段。
-
column_name
一个您可以引用的列集中的列。
-
field_name
是对可引用列集中的列的字段的引用。如果您从 STRUCT 中排除所有字段,结果将是一个空 STRUCT。每个名称必须引用可引用列集中的列或其字段。否则,Spark SQL 会引发 UNRESOLVED_COLUMN 错误。如果名称重叠或不唯一,Spark 会引发 EXCEPT_OVERLAPPING_COLUMNS 错误。
-
示例
-- Return all columns in the FROM clause
SELECT * FROM VALUES(1, 2) AS TA(c1, c2), VALUES('a', 'b') AS TB(ca, cb);
1 2 a b
-- Return all columns from TA
SELECT TA.* FROM VALUES(1, 2) AS TA(c1, c2), VALUES('a', 'b') AS TB(ca, cb);
1 2
-- Return all columns except TA.c1 and TB.cb
SELECT * EXCEPT (c1, cb) FROM VALUES(1, 2) AS TA(c1, c2), VALUES('a', 'b') AS TB(ca, cb);
2 a
-- Return all columns, but strip the field x from the struct.
SELECT TA.* EXCEPT (c1.x) FROM VALUES(named_struct('x', x, 'y', 'y'), 2) AS (c1, c2), VALUES('a', 'b') AS TB(ca, cb);
{ y } 2 a b
-- Return the first not-NULL column in TA
SELECT coalesce(TA.*) FROM VALUES(1, 2) AS TA(c1, c2), VALUES('a', 'b') AS TB(ca, cb);
1
-- Return 1 if any column in TB contains a 'c'.
SELECT CASE WHEN 'c' IN (TB.*) THEN 1 END FROM VALUES(1, 2) AS TA(c1, c2), VALUES('a', 'b') AS TB(ca, cb);
NULL
-- Return all column as a single struct
SELECT (*) FROM VALUES(1, 2) AS TA(c1, c2), VALUES('a', 'b') AS TB(ca, cb);
{ c1: 1, c2: 2, ca: a, cb: b }
-- Flatten a struct into individual columns
SELECT c1.* FROM VALUES(named_struct('x', 1, 'y', 2)) AS TA(c1);
1 2