使用 talend 将数据从 as400 加载到雪花时数据发生变化

Posted

技术标签:

【中文标题】使用 talend 将数据从 as400 加载到雪花时数据发生变化【英文标题】:Data getting changed when loading data from as400 to snowflake by using talend 【发布时间】:2020-06-04 02:38:28 【问题描述】:

我正在使用 talend 将数据从 as400 加载到雪花,有一个 varchar 列以 yyyymmdd 格式存储日期,当我将数据加载到雪花中时,数据正在发生变化,例如 as400 中的 19890501 值在雪花中加载为 19890500 ,我尝试在雪花中保留 varchar、日期和数字数据类型,但仍然是同样的问题,任何人都面临同样的问题,请帮助我。

【问题讨论】:

【参考方案1】:

这听起来像是一个经典的时区转换问题。来回 6 小时可以将时间戳推迟一天。例如,您所拥有的“20190102”可能在数据库内部实际上被视为“20190101 00:00:00”,如果在导出数据时发生任何转换,这将推回 20190101。我认为与 as400 类似的其他旧数据库也有类似问题。

请注意,即使您将其保存为 varchar,这也可能在某些平台上发生。有时这些系统会尝试使用您帐户的时区向您显示日期,但它们会在内部将其存储为 UTC。所以当转换为 varchar 时,它可能会保存为 UTC。

一种解决方法是通过切掉数据的 YYYYMMMDD 部分,将时间戳“强制”为纯日期,而不是时间戳,本质上是将其硬编码为字符串,直到它进入 Snowflake。

不过,没有捷径可走。需要进行一些故障排除才能确定这是否真的是您的问题,如果是,如何最好地处理它。

【讨论】:

【参考方案2】:

我会仔细检查您的原始数据库和 Snowflake 之间的时区,然后尝试在帐户级别对齐 - 这应该很容易做到:

https://docs.snowflake.com/en/sql-reference/parameters.html#timezone

【讨论】:

以上是关于使用 talend 将数据从 as400 加载到雪花时数据发生变化的主要内容,如果未能解决你的问题,请参考以下文章

使用 talend 将 CSV 文件红移

如何使用 talend 中的 tmysql 行将唯一行从数据库加载到数据仓库中

使用 talend 或 sqoop 将数据从 hbase 导入 hdfs

Talend tCreateTable 错误:NullPointerException

使用 SQL 从 AS400 中提取数据的问题

复制到运行良好但不加载数据 gzip 文件