我有一个TSV文件,我想通过copy命令加载到redshift中。
我希望表中的一个字段是一个时间戳,用来记录行被加载的时间。
我定义了一个这样的字段:
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP如果我在psql命令行插入到此行中,而不为此列指定值,则可以很好地工作-它如预期的那样缺省为当前时间戳。
但是,在我TSV文件中的列中,有什么会导致红移默认为当前时间戳?
如果我在TSV中使用\N,那么在ts字段中只会得到一个空值。
另一方面,如果我将列定义为NOT NULL
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL然后我从COPY命令中得到一个错误,我不能将null值插入到一个非NULL字段中。
在mysql上,mysql会将null值转换为当前时间戳,但redshift的行为是抛出错误。
有什么建议吗?非常感谢!
发布于 2018-03-20 23:26:11
我已经在这个问题上绞尽脑汁了一段时间,找到了一个部分解决方法:您可以将ts列作为表的最后一列,将TSV文件与除此列之外的所有其他列放在一起。文件将与现有的列一起读取,并加载到目标表中具有相同宽度的连续列列表中,超出该宽度的所有列将保留默认值,例如,您可以使用id | ts表并仅使用id加载文件,ts将采用默认值。当前的时间戳列通常是一个元数据列,所以可以将它放在表的末尾。
https://stackoverflow.com/questions/49382384
复制相似问题