sql >> データベース >  >> RDS >> Oracle

Oracleで大量のデータを使用して同じテーブルでフィールド比較を行う最速の方法

    まず第一に、あなたのタスクは安定したSQLで実装できる(そして実際に実装されるべきである)と私は信じています。派手なカーソルやループはなく、選択、挿入、更新するだけです。まず、ソースデータのピボットを解除することから始めます(2つのセットを結合するための主キーがあるかどうかは不明ですが、そうだと思います):

    Col0_PK    Col1    Col2    Col3    Col4
    ----------------------------------------
    Row1_val   A       B       C       D
    Row2_val   E       F       G       H
    

    上記はソースデータです。 UNPIVOTを使用する 条項 次のように変換します:

    Col0_PK     Col_Name    Col_Value
    ------------------------------
    Row1_val    Col1        A
    Row1_val    Col2        B
    Row1_val    Col3        C
    Row1_val    Col4        D
    Row2_val    Col1        E
    Row2_val    Col2        F
    Row2_val    Col3        G
    Row2_val    Col4        H
    

    私はあなたがその考えを理解したと思います。 1つのデータセットを持つtable1と、2番目のデータセットを持つ同じ構造化table2があるとします。インデックスで整理されたテーブルを使用することをお勧めします。

    次のステップは、行を相互に比較し、差異の詳細を保存することです。次のようなもの:

    insert into diff_details(some_service_info_columns_here)
     select some_service_info_columns_here_along_with_data_difference
      from table1 t1 inner join table2 t2
         on t1.Col0_PK = t2.Col0_PK
        and t1.Col_name = t2.Col_name
        and nvl(t1.Col_value, 'Dummy1') <> nvl(t2.Col_value, 'Dummy2');
    

    そして最後のステップで、差異の要約テーブルを更新します:

    insert into diff_summary(summary_columns_here)
     select diff_row_id, count(*) as diff_count
      from diff_details
     group by diff_row_id;
    

    私のアプローチを示すのは大まかなドラフトです。もっと多くの詳細を考慮に入れる必要があると確信しています。要約すると、私は2つのことを提案します:

    1. UNPIVOT データ
    2. SQLを使用する カーソルの代わりにステートメント


    1. Mysqlポートはすでに使用されています

    2. 移行時のDjangoMySQLエラー

    3. PythonのSSHトンネリングを介したPostgreSQLデータベースへの接続

    4. mysqlクエリSHOWCOLUMNSFROM table like'colmunname':questions