Am使用talend将数据从as400加载到雪花中,有一个varchar列,以yyyymmdd格式存储日期,当我将数据加载到雪花中时,数据正在更改,例如as400中的ex 19890501值正在雪花中加载为19890500 ,我尝试将varchar,日期和数字数据类型保留在雪花中,但仍然是同一问题,任何人都面临相同的问题,请帮帮我。
答案 0 :(得分:0)
这听起来像是经典的时区转换问题。来回往返6个小时可以推迟一天的时间戳记。例如,您在数据库内部实际上拥有的“ 20190102”可能会被视为“ 20190101 00:00:00”,如果在导出数据时发生任何转换,它将回退到20190101。我在其他较旧的数据库中也遇到过类似的问题,我认为它们与as400类似。
请注意,即使您将其另存为varchar,在某些平台上也会发生这种情况。有时,这些系统会尝试使用您帐户的时区向您显示日期,但它们会在内部将其存储为UTC。因此,当转换为varchar时,它可能会另存为UTC。
一种解决方法是,通过分割数据的YYYYMMMDD部分,将其硬编码为字符串,直到进入Snowflake,以将其“强制”为纯日期,而不是时间戳。
但是,没有魔术捷径。需要花一些时间进行故障排除,才能确定这确实是您的问题,如果是,那么如何最好地解决问题。
答案 1 :(得分:0)
我会仔细检查原始数据库和Snowflake之间的时区,然后尝试在帐户级别进行调整-这应该很容易做到:
https://docs.snowflake.com/en/sql-reference/parameters.html#timezone