gpt4 book ai didi

amazon-redshift - Redshift 复制和自动增量不起作用

转载 作者:行者123 更新时间:2023-12-03 19:58:34 28 4
gpt4 key购买 nike

我正在使用 redshift 的 COPY 命令从 S3 复制 json 数据。
表定义如下:

CREATE TABLE my_raw
(
id BIGINT IDENTITY(1,1),
...
...
) diststyle even;

我正在使用的复制命令如下:
COPY my_raw FROM 's3://dev-usage/my/2015-01-22/my-usage-1421928858909-15499f6cc977435b96e610298919db26' credentials 'aws_access_key_id=XXXX;aws_secret_access_key=XXX' json 's3://bemole-usage/schemas/json_schema' ; 

我期望插入的任何新 id 总是 > select max(id) from my_raw 。事实上,情况显然并非如此。

如果我两次发出上述复制命令,则第一次 id 从 1 到 N 开始,尽管该文件正在创建 114 条记录(这是 redshift 具有多个分片时的已知问题)。第二次 id 也在 1 和 N 之间,但它使用了第一个副本中未使用的空闲号码。

请参阅下面的演示:
usagedb=# COPY my_raw FROM 's3://bemole-usage/my/2015-01-22/my-usage-1421930213881-b8afbe07ab34401592841af5f7ddb31c' credentials 'aws_access_key_id=XXXX;aws_secret_access_key=XXXX' json 's3://bemole-usage/schemas/json_schema' COMPUPDATE OFF;
INFO: Load into table 'my_raw' completed, 114 record(s) loaded successfully.
COPY
usagedb=#
usagedb=# select max(id) from my_raw;
max
------
4556
(1 row)

usagedb=# COPY my_raw FROM 's3://bemole-usage/my/2015-01-22/my-usage-1421930213881-b8afbe07ab34401592841af5f7ddb31c' credentials 'aws_access_key_id=XXXX;aws_secret_access_key=XXXX' json 's3://bemole-usage/schemas/my_json_schema' COMPUPDATE OFF;
INFO: Load into table 'my_raw' completed, 114 record(s) loaded successfully.
COPY
usagedb=# select max(id) from my_raw;
max
------
4556
(1 row)

提前谢谢

最佳答案

我发现确保基于插入具有顺序 Id 的唯一解决方案是维护一对表。第一个是通过 COPY 命令插入项目的阶段表。 stage 表实际上没有 ID 列。

然后我有另一个表,它是阶段表的精确副本,除了它有一个额外的 Id 列。然后有一个作业负责使用 ROW_NUMBER() 函数从舞台填充主表。

实际上,这意味着在每次 Redshift COPY 执行后执行以下语句:

  insert into master
(id,result_code,ct_timestamp,...)
select
#{startIncrement}+row_number() over(order by ct_timestamp) as id,
result_code,...
from stage;

然后保证 Id 在主表中是顺序/连续的。

关于amazon-redshift - Redshift 复制和自动增量不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28092084/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com