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

オプションによる分割で派生列を使用しているときに、オプションによるsqoop分割でエラーが発生する

    サブクエリを使用してrow_number計算をラップしてから、分割で派生列を使用します。

       --query "select col1, ... colN, RANGEGROUP 
                   from (select t.*, row_number() OVER (order by t.item_id ) AS RANGEGROUP
                          from table t ) s 
                  where 1=1 and \$CONDITIONS"
    

    row_number 決定論的である必要があります。つまり、複数回実行されると、すべての行にまったく同じ番号が割り当てられる必要があります。 OVERのORDERBYに一意の列または組み合わせが含まれていない場合はどうなりますか:row_number 同じ行に対して異なる番号を返すことができます。また、スプリットバイで使用している場合、同じ行が分割範囲1、たとえば1〜100にある可能性があるため、重複が発生します。mapper2では、sqoopは範囲2、たとえば(101〜200)のフィルターを使用して同じクエリを実行します。 )同じ行がその範囲にも表示される可能性があります。 Sqoopは、異なる条件の異なるコンテナー(マッパー)で同じクエリを実行して、分割された範囲を並列に取得します。

    Idがintの場合(および均等に分散されている場合ははるかに優れています)、そのIDを使用します。 row_numberが必要になるのは、それがSTRING列の場合です。これを読んでください: https://stackoverflow.com/a/37389134/2700344 、分割列は必ずしもPKではありません




    1. パフォーマンスを向上させるためのOracleの自動トレースに相当するmysqlのコマンド

    2. ツリー構造でデータベースを保存およびクエリする方法

    3. 挿入データ用のPHPコードを書くためのより良い方法はどれですか

    4. SQL:重複を削除します