我们刚刚使用Hive Metastore从实木复合地板迁移到了Databricks Delta。到目前为止,一切似乎
工作正常,当我尝试使用DESCRIBE EXTENDED my_table
打印新的Delta表的位置时,该位置是正确的,尽管它与hiveMetastore
数据库中找到的位置不同。当我访问hiveMetastore
数据库时,我可以成功识别目标表(还将提供者正确设置为Delta)。为了检索先前的信息,我正在执行sds
中dbs
,tbls
,table_params
和hiveMetastore db
表之间的联接,并按表名进行过滤,如下所示:
val sdsDF = spark.read
.format("jdbc")
.option("url", activeConnection.url)
.option("dbtable", "hiveMetastore.SDS")
.option("user", activeConnection.user)
.option("password", activeConnection.pwd)
.load()
val tblsDf = spark.read
.format("jdbc")
.option("url", activeConnection.url)
.option("dbtable", "hiveMetastore.TBLS")
.option("user", activeConnection.user)
.option("password", activeConnection.pwd)
.load()
val dbsDf = spark.read
.format("jdbc")
.option("url", activeConnection.url)
.option("dbtable", "hiveMetastore.DBS")
.option("user", activeConnection.user)
.option("password", activeConnection.pwd)
.load()
val paramsDf = spark.read
.format("jdbc")
.option("url", activeConnection.url)
.option("dbtable", "hiveMetastore.TABLE_PARAMS")
.option("user", activeConnection.user)
.option("password", activeConnection.pwd)
.load()
val resDf = sdsDF.join(tblsDf, "SD_ID")
.join(dbsDf, "DB_ID")
.join(paramsDf, "TBL_ID")
.where('TBL_NAME.rlike("mytable"))
.select($"TBL_NAME", $"TBL_TYPE", $"NAME".as("DB_NAME"), $"DB_LOCATION_URI", $"LOCATION".as("TABLE_LOCATION"), $"PARAM_KEY", $"PARAM_VALUE")
所有以前的操作都是从databricks笔记本执行的。
我的问题是,即使表名相同,为什么我也会得到两个不同的位置?如果不在hiveMetastore数据库上,则存储的Delta表的正确位置在哪里?