Databricks 安装 Open/Public Azure Blob 存储

Databricks Mount Open/Public Azure Blob Store

使用 Microsoft 的开放数据集 (here),我想在我的 Databricks 环境中创建(外部)tables 以供在 Databricks SQL 环境和外部( BI 工具)添加到此镶木地板源。

对正确的方法有点困惑。这是我试过的。

方法 1:我尝试创建一个 mount_point (/mnt/taxiData) 到 open/public Azure 商店,我从中d 使用正常的 CREATE TABLE dw.table USING PARQUET LOCATION '/mnt/taxi' 使用以下 python 代码,但是,我得到一个 ERROR: Storage Key is not a valid base64 encoded string.

注意:此 azure 商店已营业,public。没有密钥,不需要secret.get。

storageAccountName = "azureopendatastorage"
storageAccountAccessKey = r""
blobContainerName = "nyctlc"
dbutils.fs.mount(
    source = "wasbs://{}@{}.blob.core.windows.net".format(blobContainerName, storageAccountName),
    mount_point = "/mnt/taxiData",
    extra_configs = {'fs.azure.account.key.' + storageAccountName + '.blob.core.windows.net': storageAccountAccessKey}
  )

方法 - 2:使用:CREATE TABLE dw.table USING PARQUET LOCATION 'wasbs://nyctlc@azureopendatastorage.blob.core.windows.net/yellow/' 因为 wasbs 位置是 open/public.

结果 - 我没有收到任何错误,但我得到一个外部空 table 具有正确的架构,但没有数据。

方法-3:如果我创建一个数据框 (df = spark.read.parquet('wasbs://..),它工作正常。我得到一个 DF与数据。但是,如果我然后添加 .write.saveAsTable(dw.table) - 它会将数据从 Open Store 拉到我的 /dbfs 存储。这不是我想要的。

最佳方法和解决方法?

对于方法 1,我认为 dbutils.fs.mount 中的检查过于严格 - 将此作为错误报告给 Azure 支持是有意义的。

方法 2 - 创建一个 table 是不够的,它还需要发现分区(Parquet 不是自动发现分区的 Delta)。您可以使用 MSCK REPAIR TABLE SQL 命令来做到这一点。像这样:

MSCK REPAIR TABLE dw.table

完成后您将看到数据: