求SAS合并表DATA步代码对应的Spark SQL等价实现
SAS到Spark SQL的等价转换:纵向拼接表
原SAS代码的作用
这段SAS代码是将SOURCE_TABLE1和SOURCE_TABLE2纵向拼接(上下合并所有行)生成新表NEW_TABLE。如果两个源表列名/列数不一致,SAS会自动为缺失的列填充缺失值(.)。
Spark SQL等价实现
情况1:两个表列完全匹配(列名、顺序、数据类型一致)
直接使用UNION ALL(保留所有行,包括重复行,和SAS原逻辑完全一致):
CREATE TABLE NEW_TABLE AS SELECT * FROM SOURCE_TABLE1 UNION ALL SELECT * FROM SOURCE_TABLE2;
情况2:两个表列不一致(列名/列数不同)
需要手动对齐列,用NULL填充缺失的列,模拟SAS自动补缺失值的行为:
假设SOURCE_TABLE1包含col1、col2,SOURCE_TABLE2包含col1、col3,示例代码如下:
CREATE TABLE NEW_TABLE AS SELECT col1, col2, NULL AS col3 FROM SOURCE_TABLE1 UNION ALL SELECT col1, NULL AS col2, col3 FROM SOURCE_TABLE2;
注意事项
- Spark SQL要求拼接的结果集必须列数相同、对应列数据类型兼容,列不一致时必须手动补全
- 务必使用
UNION ALL而非UNION:UNION会自动去重,和SAS原代码保留所有重复行的逻辑不符 - 如果仅需创建临时表,可将
CREATE TABLE替换为CREATE TEMPORARY VIEW
内容的提问来源于stack exchange,提问作者Ram
相关产品推荐
相关产品推荐

