使用 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 中的 tmysql 行将唯一行从数据库加载到数据仓库中
使用 talend 或 sqoop 将数据从 hbase 导入 hdfs