在我阅读Spark / Hive SQL文档时,似乎发现插入到具有列列表的表中不支持。
我有一个源表和一个目标表,它们具有不同的列数和需要复制的不同列名。
这是否意味着我必须在PySpark中编写代码才能完成此工作,因为Spark SQL将无法做到这一点?
示例:
input_table( cola, colb, colc, cold, cole)
output_table(fieldx, fieldy, fieldz)
在SQL中(假设使用RDBMS,例如MS-SQL,PostgreSQL等),我将执行以下操作:
insert into output_table(fieldx, fieldy, fieldz) select cola, colb, colc from input_table
Spark SQL不允许这样做,它不接受Insert SQL语句中的列列表。
问题:如何在PySpark或(理想情况下)在Spark-SQL(我正在使用Spark 2.4)中以最少的代码和最高的性能执行此任务?
谢谢
答案 0 :(得分:3)
将output
中不会从input_table
复制的列指定为null
中的select
。 (如果允许的话,只有一组列而不是全部列会与列列表一起insert
使用,则将发生这种情况)
insert into output_table
select cola, colb, colc,null as other1,--..specify non-copied column values as null
from input_table