Spark SQL 中的更新查询
Posted
技术标签:
【中文标题】Spark SQL 中的更新查询【英文标题】:update query in Spark 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。 【参考方案1】:Spark SQL 还不支持UPDATE
语句。
Hive 从 hive 0.14 版开始支持UPDATE
。但即使使用 Hive,它也仅支持对那些支持 事务 的表进行更新/删除,hive documentation 中提到了这一点。
查看数据块论坛中的答案,确认 UPDATES/DELETES are not supported in Spark SQL 与 doesn'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
【讨论】:
以上是关于Spark SQL 中的更新查询的主要内容,如果未能解决你的问题,请参考以下文章
Spark SQL 查询以获取在 AWS S3 中存储为 CSV 的 Athena 表的最后更新时间戳