在 HDP 3.1.0 中,HWC hive-warehouse-connector- assembly-1.0.0.3.1.0.0-78.jar,我无法根据数据库追加(或覆盖)到现有表。
我在一个名为 DSN 的数据上进行了测试,它可以工作,而在另一个名为 CLEAN_CRYPT 的数据库上则失败。 两个数据库都是加密的 + kerberos
import com.hortonworks.spark.sql.hive.llap.HiveWarehouseSession._
import com.hortonworks.spark.sql.hive.llap.HiveWarehouseSession
val hive = com.hortonworks.spark.sql.hive.llap.HiveWarehouseBuilder.session(spark).build()
hive.execute("show databases").show()
hive.setDatabase("clean_crypt")
val df=hive.execute("select * from test")
df.write.format(HIVE_WAREHOUSE_CONNECTOR).option("table","test").mode("append").save
错误消息是“表已存在”。我尝试了覆盖模式但没有成功。 如果我放下 table ,它就会通过!!!
有什么想法吗?
最佳答案
这可能与多个用户报告的 HWC bug 有关 here .
我发现只有当您尝试在写入时使用 partitionBy
时才会发生这种情况,例如:
df.write.partitionBy("part")
.mode(SaveMode.Overwrite)
.format(com.hortonworks.hwc.HiveWarehouseSession.HIVE_WAREHOUSE_CONNECTOR)
.option("table", "`default`.`testout`").save;
另一方面,如果您删除 partitionBy
部分,分区将按预期工作(因为分区信息已存储在 Hive 表中),但如果您使用覆盖模式(而不是,对于例如,追加),HWC 将删除并重新创建您的表,并且不会重新应用分区信息。
关于scala - Spark HWC 无法写入现有表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59946572/