问题描述
我目前在 databricks 中有一个附加表(spark 3,databricks 7.5)
parsedDf \
.select("somefield","anotherField",'partition','offset') \
.write \
.format("delta") \
.mode("append") \
.option("mergeSchema","true") \
.save(f"/mnt/defaultDatalake/{append_table_name}")
它之前是用 create table command 创建的,我不使用 INSERT
命令写入它(如上所示)
现在我希望能够使用 sql 逻辑来查询它,而无需每次都通过 createOrReplaceTempView。是否可以在不删除表的情况下将表添加到当前数据?我需要做哪些更改来支持这一点?
更新:
我试过了:
res= spark.sql(f"CREATE TABLE exploration.oplog USING DELTA LOCATION '/mnt/defaultDataLake/{append_table_name}'")
但是得到一个 AnalysisException
您正在尝试创建外部表 exploration
。dataitems_oplog
从 /mnt/defaultDataLake/specificpathhere
使用 Databricks Delta,但在
输入路径为空。
虽然路径不为空。
解决方法
从 Databricks Runtime 7.0 开始,您可以根据现有数据在 Hive Metastore 中创建表,自动发现架构、分区等(请参阅 documentation for all details)。基本语法如下(用实际值替换 <>
中的值):
CREATE TABLE <database>.<table>
USING DELTA
LOCATION '/mnt/defaultDatalake/<append_table_name>'
附言在托管表和非托管表的不同方面有 more documentation 可供阅读。
P.P.S.在 DBR 7.5ML 上对我来说效果很好: