使用Informatica IICS填充Snowflake TIMESTAMP_TZ列报错求助
问题根源
你碰到的PM Parse Error核心问题有两个:
fn:current-dateTime()在Taskflow里返回的本身就是带时区的日期时间对象,不是字符串,完全没必要用to_date()做多余转换;to_date()函数仅用于将普通日期字符串转为日期类型,它根本识别不了ISO 8601格式(带T分隔符和Z时区标识)的时间字符串,这就是报错提示Invalid date value string: 2023-01-17T16:06:58.019Z的直接原因。
解决方案
方案1:直接映射(优先推荐)
删掉映射里的to_date()转换逻辑,直接把Taskflow变量$$inp_load_dttm映射到Snowflake的TIMESTAMP_TZ列就行。因为fn:current-dateTime()的输出类型和Snowflake的TIMESTAMP_TZ天然兼容,Informatica会自动处理类型匹配。
方案2:字符串转TIMESTAMP_TZ(仅当变量被转为字符串时用)
如果你的$$inp_load_dttm被意外转成了字符串类型,别用to_date(),改用TO_TIMESTAMP_TZ()函数并指定匹配的格式:
TO_TIMESTAMP_TZ($$inp_load_dttm, 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"')
- 格式说明:
"T"和"Z"是字面量匹配,对应字符串里的T和Z;FF3匹配三位毫秒值,完美适配fn:current-dateTime()的输出格式。
错误日志参考
MAPPING> TE_7002 [2023-01-17 11:07:50.987] Transformation stopped due to a fatal error in the mapping. The expression [To_Date($$inp_load_dttm)] contains the following errors [<
> [$$inp_load_dttm)]: Invalid date value string: >>>2023-01-17T16:06:58.019Z<<<.
... To_Date(>>>>$$inp_load_dttm<<<<)].
MANAGER> PETL_24005 [2023-01-17 11:07:50.988] Starting post-session tasks. : (Tue Jan 17 11:07:50 2023)
内容的提问来源于stack exchange,提问作者rholdberh

