【问题标题】:Spark SQL Insert Select with a column list?带有列列表的 Spark SQL 插入选择?
【发布时间】:2019-01-09 09:35:18
【问题描述】:

当我阅读 Spark/Hive SQL 文档时,Spark 2.4 及更早版本似乎不支持 Insert 到具有 列列表 的表中。

我有一个源表和一个目标表,其中包含不同的列数和不同的列名,我需要复制它们。

这是否意味着我必须在 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 不允许这样做,它不接受插入 SQL 语句中的列列表。

问题:如何在 PySpark 或(理想情况下)在 Spark-SQL(我使用的是 Spark 2.4)中以最少的代码和最高的性能完成这项任务?

谢谢

【问题讨论】:

  • 这是在更高版本的 Spark (> 2.4) 中更新的东西,您可以在其中指定列?不支持这种基本的 sql 语法似乎很差......

标签: apache-spark


【解决方案1】:

output 中不会从input_table 复制的列指定为select 中的null。 (如果允许的话,当只有一组列而不是全部列将与列列表一起 inserted 时,会发生这种情况)

insert into output_table
select cola, colb, colc,null as other1,--..specify non-copied column values as null 
from input_table

【讨论】:

  • 谢谢,这是我开始做的,这会表现最佳吗?我需要在某些选择列上使用一些 SQL 函数/表达式来转换它们,例如将某些值大写,提取一些子字符串,转换其他列等。数据源很大,数十亿行.. ...
猜你喜欢
  • 1970-01-01
  • 2015-09-27
  • 1970-01-01
  • 2017-09-25
  • 2017-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-02
相关资源
最近更新 更多