Използвайте подзаявка, за да обвиете изчислението 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
трябва да бъде детерминистично, това означава, че когато се изпълнява многократно, трябва да присвои точно същия номер на всички редове. Какво може да се случи, ако ORDER BY в OVER съдържа неуникална колона или комбинация:row_number
може да върне различни числа за едни и същи редове. И ако го използвате в split-by, ще получите дублиране, защото един и същи ред може да бъде в разделен диапазон 1, да речем 1-100, в mapper2 sqoop ще изпълни същата заявка с филтър за диапазон 2, да речем (101-200 ) същият ред може да се появи и в този диапазон. Sqoop изпълнява една и съща заявка в различни контейнери (картографи) с различни условия, за да получи разделени диапазони паралелно.
Ако Id е int (и много по-добре, ако е равномерно разпределен), използвайте този ID. Защо може да се нуждаете от row_number е, когато е STRING колона. прочетете това:https://stackoverflow.com/a/37389134/2700344 , разделената колона не е непременно PK