使用Azure Data Factory将数据加载到Snowflake时出现问题

人气:581 发布:2022-10-16 标签: azure-data-factory azure-data-factory-2 azure-sql-database azure-blob-storage snowflake-cloud-data-platform

问题描述

我正在尝试使用Azure Data Factory将一个小型数据表从Azure SQL导入到Snowflake。

通常情况下,我使用此方法不会有任何问题: https://docs.microsoft.com/en-us/azure/data-factory/connector-snowflake?tabs=data-factory#staged-copy-to-snowflake

但是现在我遇到了一个问题,源表如下所示: 有两列SLA_Processing_start_timeSLA_Processing_end_time的数据类型为TIME

不知何故,在将数据写入临时区域时,数据被更改为类似0:08:00:00.0000000,0:17:00:00.0000000的内容,从而导致如下错误:

Time '0:08:00:00.0000000' is not recognized File

映射如下所示:

我曾尝试添加类似'HH24:MI:SS.FF'TIME_FORMAT属性,但无济于事。 您对08:00:00为什么变成0:08:00:00.0000000以及如何避免它有什么想法吗?

推荐答案

终于,我能够在我的环境中重新创建您的案例。 我也有同样的错误,前导零提前出现(0:08:00:00.0000000)。 我甚至抓取了它在BlobStorage上创建的文件,而零已经在那里了。 此活动创建不带任何错误处理(双引号、转义字符等)的CSV文本文件。 在Snowflake端,它创建一个临时舞台并加载这些文件。 遗憾的是,它不会自行清理,并在BlobStorage上留下空目录。此外,您不能使用第二代ADLS。:(

ADF中的这个连接器不是很好,我甚至在AWS环境中使用它都有问题,我必须在Azure中设置一个Snowflake帐户。 我尝试了几种解决方法,您似乎有两个选择:

简单解决方案:

将两端的数据类型更改为DateTime,然后在Snowflake端转换此属性。如果您无法在源端更改类型,则只需使用";query";选项,并使用CAST/CONVERT函数写入SELECT即可。

推荐解决方案:

使用复制数据活动在BlobStorage/ADL上插入数据(此活动无论如何都是这样做的),最好是拼图文件格式和自行设计的结构(Best practices for using Azure Data Lake Storage)。 为您的BlobStorage/ADL创建永久雪花阶段。 添加查找活动并将数据从其中的文件加载到表中,您可以使用常规查询或编写存储过程并调用它。

多亏了这一点,您可以更好地控制正在发生的事情,并为您的组织构建DataLake解决方案。

284