无法将数据从 Snowflake 复制到 Azure Blob

Posted

技术标签:

【中文标题】无法将数据从 Snowflake 复制到 Azure Blob【英文标题】:Cannot copy data from Snowflake into Azure Blob 【发布时间】:2021-03-28 10:41:20 【问题描述】:

我正在尝试使用 Azure 数据工厂将数据从 Snowflake 复制到 Azure Blob。

我使用的角色对表具有选择权限,并且使用 Snowflake 控制台查询数据没有问题。

我还可以使用相同的 SAS 令牌从其他来源(在 Azure 中)复制到目标 blob。

这是我的查询,由 Azure 数据工厂生成(省略了细节)

COPY INTO 'azure://****.blob.core.windows.net/snowflake-stage/********-****-****-****-************/SnowflakeExportCopyCommand/'
FROM (select * from MYSCHEMA.MYTABLE)
CREDENTIALS = (AZURE_SAS_TOKEN = '****')
FILE_FORMAT = (type = CSV COMPRESSION = GZIP RECORD_DELIMITER = '
' FIELD_OPTIONALLY_ENCLOSED_BY = '"' ESCAPE = '\\' NULL_IF = '')
HEADER = TRUE
SINGLE = FALSE
OVERWRITE = TRUE
MAX_FILE_SIZE  = 268435456

这是我得到的错误:

ErrorCode=UserErrorOdbcOperationFailed,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=ERROR [42501] 无法访问远程文件:访问被拒绝。

请检查您的凭据,Source=Microsoft.DataTransfer.Runtime.GenericOdbcConnectors,''Type=System.Data.Odbc.OdbcException,Message=ERROR [42501] 无法访问远程文件:访问被拒绝。请检查您的 凭据,来源=雪花,'

是否需要更多 Snowflake 权限才能进行此类复制?或者这可能是 Azure 容器写入权限的问题?

【问题讨论】:

您的 URL 中的 snowflake-stage 是舞台名称还是容器名称? 你确定你使用的令牌对容器有写权限吗? @AbhiReddy 它是容器名称。 @MikeWalton 是的。这似乎与对容器的访问有关,而不是雪花方面的问题。我已经在答案中标记了“解决方案”。 【参考方案1】:

此问题的“解决方案”表明 blob 本身的权限可能存在错误。

将容器权限切换为公共,然后再次切换回私有可以解决此问题。

【讨论】:

以上是关于无法将数据从 Snowflake 复制到 Azure Blob的主要内容,如果未能解决你的问题,请参考以下文章

雪花 - 无法将暂存区域中的 JSON 拆分文件复制到表中

从 AWS S3 复制到 <Snowflake table>

将数据批量加载到使用 BCP 从 SQL Server 导出的 Snowflake 时出现 UTF-8 错误

雪花“PARTITION BY”复制选项,包括输出数据集中的分区列

Snowflake数据仓库中如何使用内联文件格式从stage中查询数据

将 CSV 文件从 S3 加载到 Snowflake 时出现 SQL 编译错误