1

我正在尝试使用 COPY INTO 来摄取存储帐户(ADLS Gen2)上文件夹中的文件。

如果我连接每个文件的路径,它就可以工作。

COPY INTO dbo.internal_heap
FROM 'https://storageaccount.dfs.core.windows.net/folderA/folderB/1.orc',
     'https://storageaccount.dfs.core.windows.net/folderA/folderB/2.orc',
     'https://storageaccount.dfs.core.windows.net/folderA/folderB/3.orc',
     'https://storageaccount.dfs.core.windows.net/folderA/folderB/4.orc'
WITH (
    FILE_TYPE = 'ORC'
    ,CREDENTIAL=(IDENTITY= 'Managed Identity')
)

如果我使用这样的通配符:

COPY INTO dbo.internal_heap
    FROM 'https://storageaccount.dfs.core.windows.net/folderA/folderB/*.orc'
    WITH (
        FILE_TYPE= 'ORC'
        ,CREDENTIAL=(IDENTITY= 'Managed Identity')
    )

我有这个错误:

Msg 110813, Level 16, State 1, Line 1
Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: startIndex

有什么线索吗?

4

2 回答 2

2

我从 Synapse 团队得到了答复。

如果所有 ORC 文件名都从 'part-' 开始,您需要像这样指定您的位置:

COPY INTO dbo.internal_heap
    FROM 'https://storageaccount.dfs.core.windows.net/folderA/folderB/part-*.orc'
    WITH (
        FILE_TYPE= 'ORC'
        ,CREDENTIAL=(IDENTITY= 'Managed Identity')
    )
于 2020-04-17T17:55:09.453 回答
0

文档显示通配符是可能的,但确实提出了以下建议:

为获得最佳性能,请避免指定会扩展大量文件的通配符。如果可能,列出多个文件位置而不是指定通配符。

文档还声明“递归应用通配符扩展......”所以我你的错误是因为你有多个文件夹而发生的?尝试删除您在同一父目录中的任何其他文件夹,就像调试练习一样。

COPY INTO仍在预览中,因此此时可能会有一两个小错误。考虑通过 Azure 门户向 MS 提出支持请求。

于 2020-04-17T10:57:24.993 回答