问题描述
我正在尝试使用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_time
和SLA_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解决方案。