Redshift COPY 未正确解析日期,但 INSERT 有效

Redshift COPY not parsing date correctly, but INSERT works

我在 AWS Redshift 中有一个带有 TIMESTAMP 列的 table。当我尝试 INSERT2/1/2022 12:00:00 AM 这样的值时,它运行良好。当我尝试 COPY 它时,值为 2022-02-01 00:00:00.000000 +00:00,因此日期部分工作正常,但小时始终为零。

要重现,table是:

CREATE TABLE store_sales (
  "datetime" TIMESTAMP,
  "store" VARCHAR(32),
  "count" INTEGER,
  "value" INTEGER
);

我从中复制数据的示例 CSV 文件:

date,store,count,value
2/1/2022 12:00:00 AM,Store 1,4,2
2/1/2022 12:00:00 AM,Test Store,2-,3
2/1/2022 12:00:00 AM,MyStore,3,5

我的 COPY 选项(我使用 Python 和 Apache Airflow 运行 从 S3 复制到 Redshift 的实际 SQL:

copy_options = [
    "REGION 'eu-central-1'",
    "CSV",
    "DELIMITER ','",
    "IGNOREHEADER 1",
    "TIMEFORMAT AS 'MM/DD/YYYY HH12:MI:SS AM'",
    "TRIMBLANKS",
]

重要的一点可能是 TIMEFORMAT。我尝试使用 'auto',但结果相同。

12:00:00 AM 与时间戳中的 00:00:00 相同,因此如果您的小时返回为零,那是预料之中的。如果您的时间是 12:00:00 下午,那将是 12:00:00 24 小时时间戳。

看起来这里的一切都按预期工作。如果您不同意,请在问题中添加更多信息。