sql >> Databáze >  >> RDS >> Oracle

sqoop split by option dává chybu při použití odvozeného sloupce v split by option

Použijte poddotaz k zabalení výpočtu row_number a poté použijte odvozený sloupec v rozdělení podle.

   --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 by měl být deterministický, to znamená, že když se provede vícekrát, měl by všem řádkům přiřadit přesně stejné číslo. Co se může stát, pokud ORDER BY v OVER neobsahuje jedinečný sloupec nebo kombinaci:row_number může vrátit různá čísla pro stejné řádky. A pokud jej používáte v split-by, dostanete duplikaci, protože stejný řádek může být v rozděleném rozsahu 1, řekněme 1-100, v mapper2 sqoop provede stejný dotaz s filtrem pro rozsah 2, řekněme (101-200 ) stejný řádek se může objevit také v tomto rozsahu. Sqoop spustí stejný dotaz v různých kontejnerech (mapovačích) s různými podmínkami, aby získal rozdělené rozsahy paralelně.

Pokud je Id int (a mnohem lepší, když je rovnoměrně rozloženo), použijte toto ID. Je možné, že budete potřebovat row_number, když je to sloupec STRING. přečtěte si toto:https://stackoverflow.com/a/37389134/2700344 , rozdělený sloupec není nutně PK




  1. Jak použít řetězec .format() v příkazu MySQL?

  2. Nemohu spustit bundler, stále se zobrazuje chyba

  3. Při kontrole připojení se nelze připojit k žádnému ze zadaných hostitelů MySQL

  4. Proč je OracleDataAdapter.Fill() velmi pomalý?