雪花任务导致查询中的时区错误
Posted
技术标签:
【中文标题】雪花任务导致查询中的时区错误【英文标题】:Snowflake Tasks causing error in timezone in queries 【发布时间】:2020-01-06 23:13:34 【问题描述】:我正在使用to_timeatamp_ntz("column value")
以及其他列的存储过程中运行一个简单的插入查询。
当我使用雪花 UI 运行它并使用我的帐户登录时,这可以正常工作。
当我使用我的 Visual Studio 实例中的 python 脚本调用它时,这很好用。
当计划任务调用相同的存储过程时,它会失败。
我在想它是否与用户的“系统”时区与我的时区有关。
存储过程 LOAD_Data() 中的执行错误:无法转换变量 将“2019-11-27T13:42:03.221Z”值设置为 TIMESTAMP_NTZ At Statement.execute,第 24 行位置 57
我尝试在任务和存储过程中提供时区作为会话参数,但似乎没有解决问题。有什么想法吗?
【问题讨论】:
我用“INSERT INTO TEST_TIMESTAMP(T1) SELECT TO_TIMESTAMP_NTZ('2019-11-27T13:42:03.221Z');”做了一个任务其中列是 NTZ_TIMESTAMP(9) 并且它运行成功。我是否缺少要复制的东西?让我知道您是否可以设置一个类似的非常简单的任务,看看它是否有效。我想知道它是特定于参数还是数据。 由于您从Statement.execute()
调用中收到错误消息,因此包含生成错误的语句会很有用。
能否提供存储过程的代码?
【参考方案1】:
我猜测(因为您没有包含导致错误的 SQL 语句)您在创建 Statement
对象时尝试绑定 Date
对象。那是行不通的。
您可以绑定的唯一参数是数字、字符串、null
和特殊的 SfDate
对象,您只能从结果集中获得(据我所知)。大部分其他参数必须在绑定前使用mydate.toJSON()
、JSON.stringify(myobj)
等转换成string
,例如:
var stmt = snowflake.createStatement(
sqlText: `SELECT :1::TIMESTAMP_LTZ NOW`, binds: [(new Date).toJSON()]
);
Date
对象错误可能会产生误导,因为导致错误的 Date
对象可以转换并显示为错误消息中的字符串。
【讨论】:
【参考方案2】:我发现了问题: 我的任务正在使用类似于这样的复制粘贴效果:
CREATE TASK TASK_LOAD_an_sp
WAREHOUSE = COMPUTE_WH
TIMEZONE = 'US/Eastern'
SCHEDULE = 'USING CRON 0/30 * * * * America/New_York'
TIMESTAMP_INPUT_FORMAT = 'YYYY-MM-DD HH24'
AS
Call LOAD_an_sp();
时间戳输入格式导致了这种情况。
【讨论】:
所以你从任务 ddl 中删除了TIMESTAMP_INPUT_FORMAT
并且工作了吗?我遇到了同样的问题,我想在设置它时,所有具有不同格式时间的数据都将被忽略或引发错误。以上是关于雪花任务导致查询中的时区错误的主要内容,如果未能解决你的问题,请参考以下文章