Ddl 为什么Netezza中的分发密钥数不能超过4个

Ddl 为什么Netezza中的分发密钥数不能超过4个,ddl,netezza,Ddl,Netezza,我正在尝试创建具有5个分发键的表 create table WHDEV_RAW.DWADMIN.TEMP_WRK_TABLE ( LOC_ID INTEGER NULL, TRANSACTION_TYPE NUMERIC(2) NULL, TRANSACTION_DATE DATE NULL, TRANSACTION_TIME NUMERIC(6) NULL, SKU_ID VARCHAR(25) NULL, REF_NUM

我正在尝试创建具有5个分发键的表

create table WHDEV_RAW.DWADMIN.TEMP_WRK_TABLE
( 
    LOC_ID  INTEGER NULL,
    TRANSACTION_TYPE    NUMERIC(2) NULL,
    TRANSACTION_DATE    DATE NULL,
    TRANSACTION_TIME    NUMERIC(6) NULL,
    SKU_ID  VARCHAR(25) NULL,
    REF_NUM VARCHAR(10) NULL,
    PO_NUM  NUMERIC(8) NULL,
    ADJUST_QUANTITY NUMERIC(10,4) NULL,
    UOM VARCHAR(25) NULL,
    ROW_INSERT_TMS  TIMESTAMP NULL 
) 
DISTRIBUTE ON (TRANSACTION_DATE,TRANSACTION_TIME,SKU_ID,REF_NUM,PO_NUM)

获取错误:org.netezza.error.NzSQLException:错误:分发密钥的数量不能超过4。不可能创建包含大于4个分布列的表,或者我们有什么解决方案吗

我认为原因是“它很少有意义”

分发密钥有两个用途,都是为了性能和可伸缩性,根据我的个人经验进行优先排序:

数据的均匀分布 减少了连接时数据的重新分配-在这里,共址连接是最好的。。。 第一种是通过随机分布最有效地实现的。 最后一项要求:

A.在SQL语句中的两个表上,连接所有涉及的分发列

B.所有分布列在两个表上的显示顺序相同

C.连接列的两个表上的数据类型相同

可以想象,分发密钥中的列越多,A点和B点的可能性就越小

此外,我看到你考虑在时间上分布。99%的人肯定会说:永远不要这样做,但把其中一个放在DDL的“组织”部分


如果您需要进一步澄清,请回信。

您解决了DDL问题吗?我没有创建5个分发密钥就解决了。谢谢@Lars G Olsen的回答。实际上,在数据模型中选择5个唯一键时,ODI Oralce Data Integrator出现了这个问题。我用自己的方式解决了这个问题。听起来像个bug:唯一密钥与分发密钥无关。我意识到他们有时可能是一样的,但这与说因为一个男人喝醉了,你可以推断所有的男人都是酗酒者是一样的。oracle工具可能没有内置正确的选项。