【问题标题】:update query in Spark SQLSpark SQL 中的更新查询
【发布时间】:2016-05-30 03:54:25
【问题描述】:

我想知道我可以像使用 sparksql 中的更新查询一样:

sqlContext.sql("update users set name = '*' where name is null")

我得到了错误:

org.apache.spark.sql.AnalysisException: 
Unsupported language features in query:update users set name = '*' where name is null

如果 sparksql 不支持更新查询还是我写错了代码?

【问题讨论】:

  • 可能是版本问题
  • 我使用 spark-1.6.1。

标签: apache-spark apache-spark-sql


【解决方案1】:

Spark SQL 还不支持UPDATE 语句。

Hive 从 hive 0.14 版开始支持UPDATE。但即使使用 Hive,它也仅支持对那些支持 事务 的表进行更新/删除,hive documentation 中提到了这一点。

查看数据块论坛中的答案,确认 UPDATES/DELETES are not supported in Spark SQLdoesn't support transactions 相同。如果我们认为,对于大数据中的大多数存储格式,支持随机更新是非常复杂的。它需要扫描巨大的文件、更新特定的记录并重写潜在的 TB 数据。这不是正常的 SQL。

【讨论】:

  • Spark 项目中有一个 open ticket 以改进对 Hive 事务表(即支持更新的 Hive 表)的支持issues.apache.org/jira/browse/SPARK-15348
  • 现在是否支持这方面的任何新更新?或任何替代方法?
【解决方案2】:

现在可以使用Databricks Delta Lake

【讨论】:

    【解决方案3】:

    如果基础表是增量格式,Spark SQL 现在支持更新、删除和此类数据修改操作。

    检查一下: https://docs.delta.io/0.4.0/delta-update.html#update-a-table

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-20
      • 1970-01-01
      • 1970-01-01
      • 2015-05-20
      相关资源
      最近更新 更多