在加载表时,通过递增标识键增加1来增加Redshift中的标识键。

0

【以下的问题经过翻译处理】 我已经在Redshift中设置了一个无服务器数据库,创建了一张表,并尝试从我上传到S3桶的.csv文件中加载该表。当我创建表时,我将主键设置为identity键,如下所示: customerid integer NOT NULL identity(0,1) 当我使用COPY查询加载表时,键从64开始递增128,而不是从1开始递增1。例如,我的customerID字段的值为64、192、320、448等。我已经阅读了许多文章,指出这是由于压缩和并行处理造成的。我尝试在COPY查询中包含"COMPUPDATE off"命令,但结果没有改变。每次重新加载表之前,我都会将表截断以重置种子。

如何加载一个表,并使identity键从1开始递增1?

profile picture
专家
已提问 5 个月前4 查看次数
1 回答
0

【以下的回答经过翻译处理】 嗨PurpleHaze,

是的,数值确实会有一些距离。我会做以下事情:

假设源文件包含 3 个字段:employee_id、employee_name 和 hire_date。

  1. 用这三列创建一个表(我们称之为 tbl_staging),然后使用 COPY 命令将数据正常加载到其中。
  2. 创建另一个表(我们称之为 tbl_work),其数据结构与前一个表 (tbl_staging) 相同 + 一个额外的列作为 INTEGER 或 BIGINT。
  3. 使用 ROW_NUMBER 函数执行从 tbl_staging 到 tbl_work 的insert/select。例如,insert into tbl_work (....) select row_number() over (), .... from tbl_staging;

请注意,PARTITION BY 或 ORDER BY 在 ROW_NUMBER 中是可选的,这意味着如果您不必遵守任何排序或分区,您可以将其留空。

并且不要忘记在您想要purge表格时使用 TRUNCATE 命令 ;) https://docs.aws.amazon.com/redshift/latest/dg/r_TRUNCATE.html

谢谢。

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则