come confrontare due grandi set di dati usando PL / SQL?

0

Ho due tabelle diverse in due database separati con circa 1,5 milioni di record ciascuno. (BTW: sto lavorando su database Oracle)

L'obiettivo è controllare se ogni record presente nella tabella A è presente anche nella tabella B. Poiché le tabelle esistono in diversi database, penso di non poter calcolare la "differenza" tra loro due, quindi cosa sto facendo attualmente sta selezionando la colonna di cui ho bisogno da ciascun database e memorizzando tutte le righe su file di testo separati. Quindi, carico il contenuto di uno dei file su un dizionario (usando python) e poi eseguo l'iterazione dell'altro file controllando se ogni riga è presente sul dizionario.

Mi piacerebbe renderlo più semplice, magari direttamente su una stored procedure nel database. Le mie preoccupazioni principali sono:

  1. Non so se gli array associativi PL / SQL siano efficienti come il dizionario (suppongo che i dizionari Python abbiano un tempo di ricerca costante)
  2. Il fatto che le tabelle esistano su diversi database mi fa pensare che sarebbe impossibile "raggiungere" il contenuto della tabella B se la stored procedure è sul database della tabella A, o viceversa.

Grazie in anticipo per qualsiasi suggerimento!

    
posta Alex 28.05.2012 - 22:09
fonte

1 risposta

5

Se non ci sono restrizioni di sicurezza che lo impediscano, probabilmente il modo più semplice è creare un collegamento al database, in modo che i due database si vedano; quindi utilizza la clausola minus per trovare ciò che è in una tabella ma non l'altra.

CREATE DATABASE LINK otherdb
  CONNECT TO otheruser IDENTIFIED BY otherpwd USING 'otherdb.wherever';

SELECT mycolumn FROM mytable MINUS SELECT mycolumn FROM mytable@otherdb;

SELECT mycolumn FROM mytable@otherdb MINUS SELECT mycolumn FROM mytable;

Copiare la tabella da una macchina all'altra (usando 'CREATE TABLE xxx AS SELECT * da mytable @ otherdb') e utilizzarla per il confronto potrebbe essere più veloce, però.

    
risposta data 28.05.2012 - 22:54
fonte

Leggi altre domande sui tag