数据转换/Select
select句式是 Byzer-lang 中处理数据最重要的方式之一。 Byzer-lang 中的select句式除了最后as 表名以外,完全兼容 Spark SQL。 一般来讲,可以结合使用 Spark SQL 中的函数和算子以及 Byzer 的一些特定语法命令或 UDF 来完成数据转换的功能 1. 基本语法 最简单的一个select语句: select 1 as col1 as table1;
select
句式是 Byzer-lang 中处理数据最重要的方式之一。
Byzer-lang 中的
select
句式除了最后as 表名
以外,完全兼容 Spark SQL。 一般来讲,可以结合使用 Spark SQL 中的函数和算子以及 Byzer 的一些特定语法命令或 UDF 来完成数据转换的功能
1. 基本语法
最简单的一个 select
语句:
select 1 as col1
as table1;
结果为:col1: 1。
从上面代码可以看到,Byzer-lang 中的 select
语法和传统 SQL select
语法唯一的差别就是后面多了一个 as tableName
。 这也是为了方便后续对该 SQL 处理的结果进行引用引入的微小改良。
正常的 SQL 语句:
SELECT
b.*
FROM
table_a as a
LEFT JOIN table_b as b
ON a.id = b.id
WHERE
a.study_id in( '12345678' )
AND a.status <> 3
AND b.use_status = 0;
Byzer 语法:
SELECT
b.*
FROM
table_a as a
LEFT JOIN table_b as b
ON a.id = b.id
WHERE
a.study_id in( '12345678' )
AND a.status <> 3
AND b.use_status = 0 as new_table;
select * from new_table as traindata;
比如,对于 new_table
, 用户可以在新的 select
语句中进行引用:
2. Select 句式中的模板功能
实际在书写 select
语句可能会非常冗长。Byzer-lang 提供了两种方法帮助大家简化代码。
对于如下代码示例:
select "" as features, 1 as label as mockData;
select
SUM( case when features is null or features='' then 1 else 0 end ) as features,
SUM( case when label is null or label='' then 1 else 0 end ) as label,
1 as a from mockData as output;
如果字段特别多,而且都要做类似的事情,可能要写非常多的 SUM 语句。
用户可以通过如下语法进行改进:
select "" as features, 1 as label as mockData;
select
#set($colums=["features","label"])
#foreach( $column in $colums )
SUM( case when `$column` is null or `$column`='' then 1 else 0 end ) as $column,
#end
1 as a from mockData as output;
#set
设置了一个模板变量 $columns
, 然后使用 #foreach
对该变量进行循环,里面的 SUM 本质上成了一个模板。 系统在执行该 select
语句的时候,会自动根据这些指令展开成类似前面手写的代码。
Byzer-lang 还提供了一个更加易用的模板方案:
set sum_tpl = '''
SUM( case when `{0}` is null or `{0}`='' then 1 else 0 end ) as {0}
''';
select ${template.get("sum_tpl","label")},
${template.get("sum_tpl","label")}
from mockData as output;
通过变量声明设置一个模板,该模板通过名为 sum_tpl
变量持有,并且支持位置参数。接着,在 select
句式中使用 ${template.get}
对模板进行渲染了。 第一个参数是模板名,后面的参数则是模板的参数。
更多推荐
所有评论(0)