MaxCompute SQL支持使用正则表达式select_expr
选列。
使用正则表达式select_expr
:
SELECT `abc.*` FROM t;
选出t
表中所有列名以abc
开头的列。SELECT `(ds)?+.+` FROM t;
选出t
表中列名不为ds
的所有列。SELECT `(ds|pt)?+.+` FROM t;
选出t
表中排除ds
和pt
两列的其它列。SELECT `(d.*)?+.+` FROM t;
选出t
表中排除列名以d
开头的其它列。
说明
在排除多个列时,如果col2是col1的前缀,则需保证col1写在col2的前面(较长的col写前面)。例如,一个表有2个分区无需被select
,一个分区名为ds
,另一个为dshh
,则正确表达式为SELECT `(dshh|ds)?+.+` FROM tbl;
;错误表达式为SELECT `(ds|dshh)?+.+` FROM tbl;
。
ORDER BY/SORT BY/DISTRIBUTE BY
distribute by
用于对数据按照某几列的值做Hash分片,必须使用select
的输出列别名。select region from sale_detail distribute by region; -- 列名即是别名,可以运行。 select region as r from sale_detail distribute by region; -- 报错返回,后面必须加列的别名。 select region as r from sale_detail distribute by r;
sort by
用于局部排序,语句前必须加distribute by
。实际上sort by
是对distribute by
的结果进行局部排序。必须使用select
的输出列别名。select region from sale_detail distribute by region sort by region; select region as r from sale_detail sort by region; -- 没有distribute by,报错退出。
order by
不和distribute by/sort by
共用,同时group by
也不和distribute by/sort by
共用,必须使用select
的输出列别名。
说明
order by/sort by/distribute by
的Key必须是select
语句的输出列,即列的别名。列的别名可以为中文。- 在MaxCompute SQL解析中,
order by/sort by/distribute by
是后于select
操作的,因此它们只能接受select
语句的输出列为Key。