将默认时间戳添加到雪花中的表

Posted

技术标签:

【中文标题】将默认时间戳添加到雪花中的表【英文标题】:Adding default timestamp to a table in snowflake 【发布时间】:2021-07-27 18:33:44 【问题描述】:

我正在尝试使用以下代码将时间戳类型的新列添加到具有默认值的表中;

ALTER TABLE "DATABASE"."SCHEMA"."TABLE" ADD COLUMN PRESENT_TIME TIMESTAMPNTZ DEFAULT CONVERT_TIMEZONE('UTC',current_timestamp())::TIMESTAMP_NTZ

但这给了我一个错误;

SQL 编译错误:无效的列默认表达式 [CAST(CONVERT_TIMEZONE('UTC', CAST(CURRENT_TIMESTAMP() AS TIMESTAMP_TZ(9))) AS TIMESTAMP_NTZ(9))]

编辑

ALTER TABLE "DATABASE"."SCHEMA"."TABLE" ADD COLUMN PRESENT_TIME TIMESTAMP
DEFAULT CURRENT_TIMESTAMP()

错误:

无效的列默认表达式 [CURRENT_TIMESTAMP()]

能否请我帮助纠正这个错误?谢谢

【问题讨论】:

Snowflake - date constant/literal for ALTER TABLE ADD COLUMN 这是有道理的。谢谢分享。但是你知道为什么即使没有 convert_timezone() 选项也会失败吗?请参阅上面的编辑。感谢您的帮助。 正如链接所提到的,问题是您在使用 ALTER 命令设置列的默认值时只能使用字符串文字。这样做的不是转换,而是正在使用函数的事实。 current_timestamp() 也是一个函数。我建议使用附加的默认值重新创建表,而不是更改现有表。这会奏效。 【参考方案1】:

创建或替换表 "DATABASE"."SCHEMA"."TABLE"("ID" INT, "PRESENT_TIME" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP());

【讨论】:

感谢您的友好和有益的建议。【参考方案2】:

给小费。看到您努力将时间转换为 UTC 可能会有所帮助。您可以使用 sysdate() 来获取 UTC 时间。

【讨论】:

以上是关于将默认时间戳添加到雪花中的表的主要内容,如果未能解决你的问题,请参考以下文章

将具有当前时间戳的列添加到 Hive 中的表

如何在雪花中将时间戳转换为日期

雪花解释时间戳错误?

在时间戳列中插入 Null 时,雪花复制到失败

如何在雪花 sql 中使用 date_trunc 更改默认的星期几和时间戳

如何将长口头日期时间转换为雪花中的时间戳(YYYY-MM-DD HH:MM:SS)?