Spark SQL适配Airflow:原有SQL转换及null时输出8位空字符串
Spark SQL转换方案及空值处理
原SQL转换为Spark SQL(保留原逻辑)
原SQL依赖varchar(8)类型限制,Spark SQL不支持该语法,需替换为STRING类型配合SUBSTR截取前8位,转换后代码如下:
CASE WHEN LENGTH(TRIM(SUBSTR(CAST(NVL(table.aa_bb_cnt, '') AS STRING), 1, 8))) = 0 THEN '0' ELSE SUBSTR(CAST(table.aa_bb_cnt AS STRING), 1, 8) END AS aa_bb_cnt
空值(null)输出8个空字符串的处理方案
如果需要在table.aa_bb_cnt为null时直接输出8个空格(即8个空字符串形式),可调整CASE条件优先判断空值,使用REPEAT函数生成指定数量的空格:
CASE WHEN table.aa_bb_cnt IS NULL THEN REPEAT(' ', 8) WHEN LENGTH(TRIM(SUBSTR(CAST(table.aa_bb_cnt AS STRING), 1, 8))) = 0 THEN '0' ELSE SUBSTR(CAST(table.aa_bb_cnt AS STRING), 1, 8) END AS aa_bb_cnt
关键说明
- Spark SQL仅支持
STRING字符串类型,用SUBSTR(col, 1, 8)实现原SQL中varchar(8)的长度限制效果 REPEAT(' ', 8)函数可快速生成8个连续空格,满足空值时输出8个空字符串的需求- 保留原逻辑中对空内容(trim后长度为0)输出'0'的判断逻辑
内容的提问来源于stack exchange,提问作者vivi
相关产品推荐
相关产品推荐

