Brug underforespørgsel til at ombryde rækkenummerberegning, og brug derefter afledt kolonne i opdelingen.
--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
skal være deterministisk, det betyder, at når den udføres flere gange, skal den tildele nøjagtig det samme tal til alle rækker. Hvad kan der ske, hvis ORDER BY i OVER ikke indeholder en unik kolonne eller kombination:row_number
kan returnere forskellige tal for de samme rækker. Og hvis du bruger det i split-by, vil du få duplikering, fordi den samme række kan være i opdelt område 1, f.eks. 1-100, i mapper2 vil sqoop udføre samme forespørgsel med filter for interval 2, f.eks. (101-200 ) den samme række kan også vises i det område. Sqoop kører den samme forespørgsel i forskellige containere (mappere) med forskellige betingelser for at få opdelte områder parallelt.
Hvis Id er int (og meget bedre, hvis det er jævnt fordelt), skal du bruge det ID. Hvorfor du muligvis har brug for rækkenummer, er når det er STRING kolonne. læs dette:https://stackoverflow.com/a/37389134/2700344 , split-column er ikke nødvendigvis en PK