AWS Redshift 默认时间戳

Posted

技术标签:

【中文标题】AWS Redshift 默认时间戳【英文标题】:AWS Redshift DEFAULT TIMESTAMP 【发布时间】:2017-06-03 00:39:43 【问题描述】:

我正在将一些数据从旧系统移动到 AWS——并且我正在遵循当前协议:

创建新表 在存储桶中加载数据 从存储桶复制到表

到目前为止,这很好用,但是我遇到了空 TIMESTAMPS 的问题(我的某些版本的日期不可用 - 所以我在旧版本上将它们设置为默认日期,但在新版本上,它们是被加载为 NULL)

对于每次 NULL 出现在我的 aws 日期列中,例如,我想将其替换为 '0000-00-00 00:00:00'。这是至关重要的,这样我就可以在两个表(旧表和新表)上运行 EXCEPT 函数来验证过程的稳健性。

我尝试过像 REPLACE、INSERT、

这样的显式命令

我已经用日期列默认“0000-00-00 00:00:00”重建了表格

到目前为止没有运气。任何帮助都会很棒!谢谢!

【问题讨论】:

您能否解释一下为什么要设置假日期,而不是使用NULL 值?您的查询可以使用CASE 语句模拟虚假日期,这比在实际未知值的情况下插入虚假值要准确得多。数据库中通常不鼓励使用所谓的magic values,因为它们需要特殊处理,而大多数系统都知道如何处理(或忽略)NULL 值。 【参考方案1】:

如果您将列指定为 NOT NULL,则 Redshift 的 COPY 将用列上指定的默认值替换 NULLs(如果未指定默认值,则失败)。

查看 Redshift 文档中的 Load Data from a File with Default Values 部分:http://docs.aws.amazon.com/redshift/latest/dg/r_COPY_command_examples.html

【讨论】:

以上是关于AWS Redshift 默认时间戳的主要内容,如果未能解决你的问题,请参考以下文章

匹配 Redshift SQL 中最近的时间戳

Redshift:将时间戳转换为特定时区的日期

Amazon Redshift 中的用户创建时间戳

Redshift 是不是存储上次访问的时间戳?

如何在 Redshift 中将时间戳(具有毫秒)转换为 EPOCH

Redshift COPY 错误 1206 无效时间戳