Netezza 中的代理键 - SSIS 和 Netezza 序列

Posted

技术标签:

【中文标题】Netezza 中的代理键 - SSIS 和 Netezza 序列【英文标题】:Surrogate Key in Netezza - SSIS and Netezza sequence 【发布时间】:2016-05-09 19:17:19 【问题描述】:

我正在使用控制流中的 SSIS 脚本任务从 Oracle 表中获取一些数据并插入到 Netezza 表中。

目标:填充目标表中的代理键(如着陆 ID)字段。

现在查询看起来像:

insert into destination_table
(
id, col1, col2, col3
)
select (SELECT NEXT VALUE FOR MY_SEQUENCER), field1, field2, field3
from source_table

我正在使用 Netezza 序列 (MY_SEQUENCER) 生成唯一编号,但在查询提交之前序列值不会递增。结果,插入数据后,我得到:

1, val1, val2, val3
1, val4, val5, val6
...

后续运行:

2, val1, val2, val3
2, val4, val5, val6
...

等等。

有没有办法在不使用序列的情况下实现这一点?

非常感谢您的阅读以及您可能提供的任何想法/提示/建议。

【问题讨论】:

【参考方案1】:

我从这里看到了分辨率...In Netezza I'm trying to use a sequence in a case statement but the sequence value doesn't increment

insert into destination_table
(
id, col1, col2, col3
)
select (NEXT VALUE FOR MY_SEQUENCER), field1, field2, field3
from source_table

【讨论】:

【参考方案2】:

删除括号和多余的选择,它将为每一行生成一个新值。

TESTDB.ADMIN(ADMIN)=> select (select next value for mysequence), col1, col2 from test2 limit 5;
 ?COLUMN? | COL1 | COL2 
----------+------+------
        2 |    0 | 0
        2 |    2 | 2
        2 |    4 | 4
        2 |    6 | 6
        2 |    8 | 8
(5 rows)

TESTDB.ADMIN(ADMIN)=> select next value for mysequence, col1, col2 from test2 limit 5;
 NEXTVAL | COL1 | COL2 
---------+------+------
  200001 |    1 | 1
  200002 |    3 | 3
  200003 |    5 | 5
  200004 |    7 | 7
  200005 |    9 | 9
(5 rows)

【讨论】:

以上是关于Netezza 中的代理键 - SSIS 和 Netezza 序列的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 SSIS 快速加载选项从 Excel 源加载 Netezza 中的数据

平面文件到 SSIS 中的 Netezza 加载

从 SSIS 包访问 netezza 的系统目录视图不起作用

选择语句从 Netezza 数据库中获取数据并插入 SQL Server 数据库 (SSIS)

ssis 中的 nzsql 命令

SSIS 无法获取列值并将其设置为 NULL