从 U-SQL 引用 ADL 存储 gen2 文件

Referencing ADL storage gen2 files from U-SQL

我有一个 ADL 帐户设置了两个存储:设置为默认的常规 ADLS gen1 存储和一个启用了 "Hierarchical namespace" 的 blob 存储,如果重要的话,它使用存储密钥连接到 ADLS(否此时托管身份)。第一个与问题无关,只是为了这个问题,第二个以 testdlsg2 的名称注册。我在 Azure 门户的数据资源管理器中都看到了。

现在,我在该 blob 存储中有一个名为 logs 的容器,在该容器的根目录下有我要处理的日志文件。

如何从 U-SQL 引用特定存储和特定容器中的那些文件?

我阅读了 ADLS Gen2 URI documentation 并提出了以下 U-SQL:

@data =
    EXTRACT
        Timestamp long,
        // skip, skip, skip
        LogDate DateTime,
        LogOrder int
    FROM "abfss://logs@testdlsg2.dfs.core.windows.net/log_{LogDate:yyyy}{LogDate:MM}{LogDate:dd}_{LogOrder}.log.gz"
    USING Extractors.Text(delimiter: ' ', quoting: true, skipFirstNRows: 1);

// the rest is irrelevant

不幸的是,当我将其提交给 ADL 时,作业失败并出现以下错误:

CsEnumerateDirectoryWithPaging failed with error 0x83090A1A (The operation is not supported on the provided Url type). Cosmos Path: abfss://logs@testdlsg2.dfs.core.windows.net/

当使用具有相对路径的本地存储时,查询在本地工作正常。

根据评论,U-SQL 不适用于 Azure Data Lake Gen 2,而且不太可能永远适用。有一个您应该阅读的反馈项目:

https://feedback.azure.com/forums/327234-data-lake/suggestions/36445702-add-support-for-adls-gen2-to-adla

在 2020 年,考虑使用 Azure Databricks 启动新的 Azure 分析项目。