サブクエリを使用して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ではありません