我有一个TSV文件,我想通过copy命令加载到redshift。
我希望表中的一个字段是一个时间戳,用于记录行加载的时间。
我已经定义了这样一个字段:
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP
如果我在psql命令行中插入此行而不指定此列的值,则此方法正常工作 - 它默认为当前时间戳。
但是,我在该列的TSV文件中可以使用什么来导致redshift默认为当前时间戳?
如果我在TSV中使用\N
,那么我只是在ts字段中得到一个NULL。
另一方面,如果我将列定义为NOT NULL
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
然后我从COPY命令得到一个错误,我无法将NULL值插入NOT NULL字段。
在mysql上,mysql会将NULL值转换为当前时间戳,但redshift的行为是抛出错误。
有什么建议吗?非常感谢!
答案 0 :(得分:0)
我一直在讨论这个问题并找到一个部分解决方法:您可以将ts
列作为表的最后一列,将TSV文件与所有其他列一起使用但是这样一。将使用存在的列读取文件并将其加载到目标表中具有相同宽度的连续列列表中,使所有列超出该宽度的值具有默认值,即您可以使用id | ts
表并加载只有id
的文件和ts
将采用默认值。当前时间戳列通常是元数据列,因此可以将其放在表的末尾。