如何在 Netezza 中根据主键生成 GROUP BY 脚本

Posted

技术标签:

【中文标题】如何在 Netezza 中根据主键生成 GROUP BY 脚本【英文标题】:How to generate GROUP BY script based on priamry key in Netezza 【发布时间】:2016-05-02 19:24:38 【问题描述】:

在 Netezza 中,不强制执行主键。线程How to overcome Netezza's lack of unique constraint/referential integrity enforcement?回答了如何写入存储过程来强制执行。

在我们的例子中,我们不想使用存储过程来强制执行它,因为它会破坏我们的加载。相反,我们每月检查我们的数据库完整性以查找潜在的重复项。我们需要一个脚本来帮助我们为所有表生成以下查询:

SELECT PK1, PK2, COUNT(*)
FROM TABLENAME
GROUP BY PK1, PK2 HAVING COUNT(*)>1
LIMIT 100;

【问题讨论】:

How to overcome Netezza's lack of unique constraint/referential integrity enforcement?的可能重复 没有。它不是重复的。您提到的一个是使用存储过程来强制执行主键。我的问题是查询生成器。 也许,但答案是完全一样的。为了强制执行主键,您必须找到重复项,这正是该问题的答案。 【参考方案1】:

以下答案使用我另一篇帖子https://***.com/a/36989929/4266330的知识

下面的脚本会返回你想要的结果

SELECT 'SELECT '||GROUP_BY_COLS||', COUNT(*)'||CHR(13)||
       '  FROM '||SCHEMA||'.'||TABLENAME||CHR(13)||
       ' GROUP BY '||GROUP_BY_COLS||' HAVING COUNT(*)>1'||CHR(13)||
       ' LIMIT 100;'
  FROM (       
SELECT 
     R.SCHEMA  AS SCHEMA
    ,R.NAME    AS TABLENAME
    ,TOOLKIT.SQLEXT.REGEXP_REPLACE(TOOLKIT.SQLEXT.GROUP_CONCAT('@'||LPAD(K.CONSEQ, 4, '0')||'@'||K.ATTNAME, ', '),
                                   '@[0-9]4@', '') AS GROUP_BY_COLS
  FROM _V_RELATION_COLUMN R
  JOIN _V_RELATION_KEYDATA K
    ON (R.SCHEMA=K.SCHEMA
   AND R.NAME=K.RELATION
   AND R.ATTNAME=K.ATTNAME)
 WHERE K.CONTYPE='p'
 GROUP BY 1, 2 
 ) S;

示例结果:

选择 IDP_EFFECTIVE_DATE、ACCOUNT_ID、COUNT(*) 来自 AAA.L1_ACCOUNTS GROUP BY IDP_EFFECTIVE_DATE, ACCOUNT_ID HAVING COUNT(*)>1 限制 100; SELECT DEAL_NUM, COUNT(*) FROM ABUHARI.L1_BMO16_BOOST_EXTRACT_TOR GROUP BY DEAL_NUM HAVING COUNT(*)>1 限制 100; 选择 IDP_WAREHOUSE_ID、IDP_AUDIT_ID、ACCOUNT_KEY、COUNT(*) FROM ACTIMIZE.L1_ACTIMIZE_US12_ACCOUNT GROUP BY IDP_WAREHOUSE_ID、IDP_AUDIT_ID、ACCOUNT_KEY HAVING COUNT(*)>1 限制 100;

【讨论】:

以上是关于如何在 Netezza 中根据主键生成 GROUP BY 脚本的主要内容,如果未能解决你的问题,请参考以下文章

Group By 的基本 SQL 问题(在 Netezza 中)

在 IBM netezza sql server 中创建唯一的主键?

Netezza 性能优化

在 Netezza (Aginity) 中安装 UDF

Netezza:使用 SQL / force 生成完整的统​​计信息

Netezza 和 Regexp:如何从字符串中删除所有非字母