2016-05-02 1 views
-1

In Netezza wird Primärschlüssel nicht erzwungen. Thread How to overcome Netezza's lack of unique constraint/referential integrity enforcement? beantwortet, wie in gespeicherte Prozedur geschrieben wird, um es zu erzwingen.So generieren Sie GROUP BY-Skript basierend auf Priammy-Schlüssel in Netezza

In unserem Fall wollen wir es nicht mit einer gespeicherten Prozedur erzwingen, weil es unseren Ladevorgang unterbricht. Stattdessen überprüfen wir unsere Datenbankintegrität monatlich, um mögliche Duplikate zu finden. Wir müssen ein Skript uns helfen, die folgende Abfrage für alle Tabellen zu erzeugen:

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

Mögliches Duplikat von [Wie overc ome Netezza der Mangel an einzigartigen Constraint/referentielle Integrität Durchsetzung?] (http://stackoverflow.com/questions/5649297/how-to-overcome-netezas-lack-of-unique-constraint-referential-integrity-enforc) –

+0

Nein. Es ist kein Duplikat. Der eine, den Sie erwähnen, ist die Verwendung der gespeicherten Prozedur, um den Primärschlüssel zu erzwingen. Meine Frage ist für einen Abfragegenerator. –

+0

Vielleicht, aber die Antwort ist genau das gleiche. Um einen Primärschlüssel zu erzwingen, müssen Sie die Duplikate finden, was genau die Antwort auf diese Frage ist. –

Antwort

0

Die folgende Antwort Verwendung Wissen meiner anderen Posten https://stackoverflow.com/a/36989929/4266330

Das folgende Skript wird das Ergebnis zurückgeben Sie

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; 

Beispieler:

 

    SELECT IDP_EFFECTIVE_DATE, ACCOUNT_ID, COUNT(*) 
     FROM AAA.L1_ACCOUNTS 
    GROUP BY IDP_EFFECTIVE_DATE, ACCOUNT_ID HAVING COUNT(*)>1 
    LIMIT 100; 
    SELECT DEAL_NUM, COUNT(*) 
     FROM ABUHARI.L1_BMO16_BOOST_EXTRACT_TOR 
    GROUP BY DEAL_NUM HAVING COUNT(*)>1 
    LIMIT 100; 
    SELECT 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 
    LIMIT 100; 

Verwandte Themen