sql >> Databasteknik >  >> RDS >> Oracle

sqoop split by option ger ett fel när en härledd kolumn används i alternativet split by

Använd underfråga för att avsluta radnummerberäkningen, använd sedan härledd kolumn i uppdelningen.

   --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 bör vara deterministisk, det betyder att när den körs flera gånger, bör den tilldela exakt samma nummer till alla rader. Vad kan hända om ORDER BY i OVER inte innehåller en unik kolumn eller kombination:row_number kan returnera olika nummer för samma rader. Och om du använder det i split-by kommer du att få duplicering eftersom samma rad kan vara i delat intervall 1, säg 1-100, i mapper2 kommer sqoop att köra samma fråga med filter för intervall 2, säg (101-200 ) samma rad kan också visas i det intervallet. Sqoop kör samma fråga i olika behållare (mappare) med olika villkor för att få delade intervall parallellt.

Om Id är int (och mycket bättre om det är jämnt fördelat), använd det ID:t. Varför du kan behöva radnummer är när det är STRING kolumn. läs detta:https://stackoverflow.com/a/37389134/2700344 , delad kolumn är inte nödvändigtvis en PK




  1. Kapslad Välj med Zend Db

  2. SQL:Kedjning förenar effektivitet

  3. MySQL-grupp efter på varandra följande framträdanden

  4. ORACLE (11.2.0.1.0) - Rekursiv CTE med ett datumuttryck