如何设置 Delta Live Tables 访问 Azure Data Lake 文件的授权?

问题描述 投票:0回答:3

我正在用 sql 编写 delta live table 笔记本来访问数据湖中的文件,如下所示:

CREATE OR REFRESH STREAMING LIVE TABLE MyTable
AS SELECT * FROM cloud_files("DataLakeSource/MyTableFiles", "parquet", map("cloudFiles.inferColumnTypes", "true"))

每当我需要访问 Azure Data Lake 时,我通常会执行以下操作来设置访问:

service_credential = dbutils.secrets.get(scope="myscope",key="mykey")

spark.conf.set("fs.azure.account.auth.type.mylake.dfs.core.windows.net", "OAuth")
spark.conf.set("fs.azure.account.oauth.provider.type.mylake.dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")
spark.conf.set("fs.azure.account.oauth2.client.id.MyLake.dfs.core.windows.net", "99999999-9999-9999-9999-999999999")
spark.conf.set("fs.azure.account.oauth2.client.secret.mylake.dfs.core.windows.net", service_credential)
spark.conf.set("fs.azure.account.oauth2.client.endpoint.mylake.dfs.core.windows.net", "https://login.microsoftonline.com/99999999-9999-9999-9999-9999999999/oauth2/token")

由于我无法像上面那样添加 python 单元来设置 sql delta live 表笔记本内的访问权限,因此如何/在哪里添加用于访问数据湖文件的配置?

我考虑过在配置下将配置信息添加到管道中,但这当然不适用于调用 dbutils.secrets.get

databricks azure-databricks delta-live-tables
3个回答
1
投票

您可以创建一个单独的笔记本,其中包含连接信息并首先调用它,然后调用 SQL delta 实时表笔记本。


0
投票

创建 Delta Live Tables 管道时,使用两个笔记本:

  1. 具有
    CREATE OR REFRESH STREAMING LIVE TABLE MyTable
    定义的 SQL 笔记本
  2. 具有
    service_credential
    fs.azure.account
    属性的 Python 笔记本

DLT 运行时应该能够解析笔记本的顺序并启动授权。


亚历克斯·奥特的评论似乎是正确的:

您需要提供此配置作为管道定义的一部分。

两个笔记本之间不存在依赖关系(一个使用 SQL,另一个使用

spark.conf.set
甚至
SET
),因此 DLT 运行时无法选择一个作为第一个执行,因此设置属性。


更有趣的(在回答这个问题时我并不真正了解)如下(在为 Delta Live Tables 配置管道设置中找到):

您可以使用 UI 或 JSON 规范配置大多数设置。一些高级选项只能使用 JSON 配置来使用。

然后在配置您的计算设置

Delta Live Tables UI 中的计算设置主要针对用于管道更新的默认集群。如果您选择指定需要凭据才能访问数据的存储位置,则必须确保维护集群也配置了这些权限。

Delta Live Tables 为集群设置提供了与 Databricks 上其他计算类似的选项。与其他管道设置一样,您可以修改集群的 JSON 配置以指定 UI 中不存在的选项

换句话说,您必须使用 Delta Live Tables API 或类似工具(Databricks Terraform 提供商),以便您可以访问集群相关设置

使用实例配置文件配置 S3 访问

另一个选项似乎是 使用实例配置文件配置 S3 访问,它要求您 “在包含 Databricks 工作区的 AWS 账户中拥有足够的权限,并且是 Databricks 工作区管理员。”


0
投票

经过大量搜索,我终于找到了说明如何执行此操作的必要文档。我在这里添加答案是为了让其他有同样问题的人受益。 您需要更新管道定义 JSON,如 this 链接所示。 在我的示例中,我使用了帐户密钥,但您可以使用与任何其他密钥相同的方法。 您的集群定义将如下所示。

"clusters": [
        {
            "label": "default",
            "node_type_id": "Standard_DS3_v2",
            "driver_node_type_id": "Standard_DS3_v2",
            "num_workers": 0
        },
        {
            "label": "updates",
            "spark_conf": {
                "spark.hadoop.fs.azure.account.key.<storage_acct>.dfs.core.windows.net": "{{secrets/<scope_name>/<secret_name>}}"
            }
        }
    ],

您需要为维护集群定义重复此操作。

© www.soinside.com 2019 - 2024. All rights reserved.