Use a subconsulta para agrupar o cálculo row_number e, em seguida, use a coluna derivada na divisão por.
--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
deve ser determinístico, ou seja, quando executado várias vezes, deve atribuir exatamente o mesmo número a todas as linhas. O que pode acontecer se ORDER BY no OVER não contiver uma coluna ou combinação exclusiva:row_number
pode retornar números diferentes para as mesmas linhas. E se você estiver usando no split-by, você obterá duplicação porque a mesma linha pode estar no intervalo de divisão 1, digamos 1-100, no mapper2 sqoop executará a mesma consulta com filtro para o intervalo 2, digamos (101-200 ) a mesma linha pode aparecer também nesse intervalo. O Sqoop executa a mesma consulta em diferentes contêineres (mapeadores) com condições diferentes para obter intervalos divididos em paralelo. Se Id for int (e muito melhor se for distribuído uniformemente), use esse ID. Por que você pode precisar de row_number é quando é uma coluna STRING. leia isto:https://stackoverflow.com/a/37389134/2700344 , coluna dividida não é necessariamente uma PK