Użyj podzapytania, aby zawinąć obliczenie numer_wiersza, a następnie użyj kolumny pochodnej w podziale.
--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
powinna być deterministyczna, to znaczy przy wielokrotnym wykonaniu powinna przypisywać dokładnie taki sam numer do wszystkich wierszy. Co może się stać, jeśli ORDER BY w OVER nie zawiera unikalnej kolumny lub kombinacji:row_number
może zwracać różne liczby dla tych samych wierszy. A jeśli używasz go w podziale, uzyskasz duplikację, ponieważ ten sam wiersz może znajdować się w zakresie 1, powiedzmy 1-100, w mapper2 sqoop wykona to samo zapytanie z filtrem dla zakresu 2, powiedzmy (101-200 ) ten sam wiersz może pojawić się również w tym zakresie. Sqoop uruchamia to samo zapytanie w różnych kontenerach (mapperach) z różnymi warunkami, aby równolegle dzielić zakresy.
Jeśli identyfikator to int (i znacznie lepiej, jeśli jest równomiernie rozłożony), użyj tego identyfikatora. Dlaczego możesz potrzebować row_number, gdy jest to kolumna STRING. przeczytaj to:https://stackoverflow.com/a/37389134/2700344 , podzielona kolumna niekoniecznie jest PK