我可以将datetime字符串输出到Redshift并将列设置为时间戳吗?

时间:2019-06-26 17:47:49

标签: amazon-redshift

我需要使用S3中的数据源在Redshift中创建一个表。有几列具有日期时间的字符串值。我希望Redshift像时间戳一样对待它。如果我只在表创建过程中将时间戳记分配给这些列,它会起作用还是需要其他步骤?

我将那些列作为字符串的原因是那些列是由Python代码创建的,并首先遇到json序列化问题:How to overcome "datetime.datetime not JSON serializable"?

我的输入数据是:

{
"created_date": "2019-06-21 23:32:28",
"resolved_date": ""
"last_updated_date": "2019-06-23 04:08:35"
}

在Redshift中,我要在时间戳格式中创建列

"created_date": timestamp,
"resolved_date": timestamp,
"last_updated_date": timestamp

Redshift会识别我的数据并将其解析为时间戳吗?

任何指针都值得赞赏。

1 个答案:

答案 0 :(得分:0)

使用Redshift频谱时,您可以将string json字段直接映射到TIMESTAMP列,但是您的示例无法正常工作,因为时间戳为空字符串-无法解析-您将拥有以确保您的python代码生成正确的JSON null

那将是您的外部表:

CREATE EXTERNAL TABLE my_external_schema.my_external_table(
    "created_date": timestamp,
    "resolved_date": timestamp,
    "last_updated_date": timestamp
  )
  ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
  STORED AS TEXTFILE
  LOCATION 's3://my_external_location/'

如果您确实需要将数据加载到redshift中,则可以执行以下操作:

CREATE TABLE my_schema.my_table AS SELECT * FROM my_external_schema.my_external_table;

另一个选择是使用Redshift COPY命令来加载数据。它还应该能够将json string视为TIMESTAMP,并且我相信您可以指定将""视为NULL