【问题标题】:How to access one databricks delta tables from other databricks如何从其他数据块访问一个数据块增量表
【发布时间】:2021-09-30 06:52:31
【问题描述】:
我想通过在其中一个 Databricks 中创建全局 Hive 元存储来从其他 Databricks 环境访问一个 Databricks 环境增量表。让我知道是否可能。
提前致谢。
【问题讨论】:
-
我试图通过在ADLS Gen 2 中创建增量表来实现类似的目标。但是一直坚持将数据作为行和列而不是包含所有数据的字符串。
标签:
databricks
azure-databricks
delta-lake
hive-metastore
【解决方案1】:
这里有两个方面:
- 数据本身 - 它们应该可用于其他工作区 - 这是通过共享存储帐户/容器并将数据写入其中来完成的。您可以mount that storage account 或使用直接访问(通过服务主体或AAD passtrough) - 您不应将数据写入其他工作区不可用的内置 DBFS 根。使用
dataframe.write.format("delta").save("some_path_on_adls") 写入数据后,您可以从有权访问该共享工作区的另一个工作区读取这些数据 - 这也可以完成
- 通过 Spark API:
spark.read.format("delta").load("some_path_on_adls")
- 通过 SQL 使用以下语法而不是表名(请参阅docs):
delta.`some_path_on_adls`
- 元数据 - 如果您想将保存的数据表示为带有数据库和表名而不是路径的 SQL 表,那么您可以使用以下选项:
- 使用内置的 Metastore 将数据保存到 ADLS 上的位置,然后在自己的 Metastore 内的另一个工作空间中创建所谓的外部表。在源工作区中执行以下操作:
dataframe.write.format("delta").option("path", "some_path_on_adls")\
.saveAsTable("db_name.table_name")
并在另一个工作区执行以下 SQL(通过笔记本中的 %sql 或通过 spark.sql 函数:
CREATE TABLE db_name.table_name USING DELTA LOCATION 'some_path_on_adls'
dataframe.write.format("delta").option("path", "some_path_on_adls")\
.saveAsTable("db_name.table_name")
您仍然需要将其保存到共享位置,因此可以从另一个工作区访问数据,但您不需要显式注册表,因为另一个工作区将从同一数据库读取元数据。