如何解决如何从其他数据块访问一个数据块增量表
我想通过在其中一个 Databricks 中创建全局 Hive 元存储来从其他 Databricks 环境访问一个 Databricks 环境增量表。如果可能,请告诉我。
提前致谢。
解决方法
这里有两个方面:
- 数据本身 - 它们应该可用于其他工作区 - 这是通过共享存储帐户/容器并将数据写入其中来完成的。您可以mount that storage account,或使用直接访问(通过服务主体或AAD passtrough) - 您不应将数据写入其他工作区不可用的内置 DBFS Root。使用
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'
- 使用由多个工作区共享的 external metastore - 在这种情况下,您只需要正确保存数据:
dataframe.write.format("delta").option("path","some_path_on_adls")\
.saveAsTable("db_name.table_name")
您仍然需要将其保存到共享位置,以便可以从另一个工作区访问数据,但您不需要显式注册该表,因为另一个工作区将从同一数据库读取元数据。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。