【问题标题】:Azure Data Studio: _delta_log/*.*' cannot be listedAzure Data Studio:无法列出 _delta_log/*.*\'
【发布时间】:2023-01-23 16:24:47
【问题描述】:

我正在尝试使用 Azure Synapse 无服务器 SQL 池查询我的增量表。 使用 SQL 管理员凭据登录 Azure Data Studio。

这是我尝试对table 进行的简单查询:

SELECT
    TOP 100 *
FROM
    OPENROWSET(
        BULK 'https://(...).dfs.core.windows.net/(...)/table/',
        FORMAT = 'DELTA'
    ) AS [result]

我收到错误:

Content of directory on path 'https://.../table/_delta_log/*.*' cannot be listed.

如果我查询任何其他表,例如table_copy我没有错误。

我可以查询我拥有的每张表,除了这张table

按照我找到的每一篇文档和主题,尝试了以下操作:

  • (IAM) 设置存储 Blob 贡献者、存储 Blob 所有者、存储队列数据贡献者和所有者
  • 在 ACL 中为托管身份 (Synapse Studio) 设置读、写、执行访问和默认权限,
  • 将 ACL 传播到每个孩子
  • 恢复了文件夹的默认权限
  • 制作表格的副本,删除原始表格,然后再次覆盖它(pyspark)
# Read original table
table_copy = spark.read.format("delta")
                  .option("recursiveFileLookup", "True")
                  .load(f"abfss://...@....dfs.core.windows.net/.../table/")

# Create a copy of it
table_copy.write.format('delta')
                .mode("overwrite")
                .option("overwriteSchema","true")
                .save(f"abfss://...@....dfs.core.windows.net/.../table_copy/")

# Remove original one
dbutils.fs.rm('abfss://...@....dfs.core.windows.net/.../table/',recurse=True)

# Overwrite it
table_copy.write.format('delta')
                .mode("overwrite")
                .option("overwriteSchema","true")
             .save(f"abfss://...@....dfs.core.windows.net/.../table/")

如果我将table 复制到table_copy,我可以阅读它。

请注意,在 Azure Synapse UI 中,我可以查询 table。在它之外我不能。

【问题讨论】:

    标签: azure azure-synapse delta-lake azure-data-studio


    【解决方案1】:

    似乎权限和防火墙设置设置正确。

    您可以尝试检查表的格式是否正确(Delta 格式)并且它具有正确的模式,还可以检查您的目录 delta_log 创建与否。

    试试这个方法:

    首先我没有任何增量表。所以我使用spark.read创建了示例数据框df

    然后,我使用abfss://<container_name>@<storage_account_name>...路径将数据框df覆盖为增量格式,并使用saveAsTable名称并行创建了一个表:test_table

    table_path = f"abfss://<container_name>@<storage_account_name>.dfs.core.windows.net/<folder>"
    
    df.write.format("delta").mode("overwrite").option("path", table_path).saveAsTable("test_table")
    

    您可以检查test_tableabfss存储位置。我成功地得到了delta格式的数据。

    其他替代方式您可以创建一个新的增量表并将数据从旧表复制到新的增量表。您可以像这样使用查询:

    【讨论】:

      猜你喜欢
      • 2023-01-19
      • 2020-08-13
      • 2021-07-21
      • 2021-09-20
      • 2022-11-28
      • 2022-08-03
      • 2022-08-10
      • 2021-09-01
      • 2020-04-09
      相关资源
      最近更新 更多