Oracle
 sql >> Baza danych >  >> RDS >> Oracle

sqoop podzielone według opcji daje błąd podczas używania kolumny pochodnej w podziale według opcji

Użyj podzapytania, aby zawinąć obliczenie numer_wiersza, a następnie użyj kolumny pochodnej w podziale.

   --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 powinna być deterministyczna, to znaczy przy wielokrotnym wykonaniu powinna przypisywać dokładnie taki sam numer do wszystkich wierszy. Co może się stać, jeśli ORDER BY w OVER nie zawiera unikalnej kolumny lub kombinacji:row_number może zwracać różne liczby dla tych samych wierszy. A jeśli używasz go w podziale, uzyskasz duplikację, ponieważ ten sam wiersz może znajdować się w zakresie 1, powiedzmy 1-100, w mapper2 sqoop wykona to samo zapytanie z filtrem dla zakresu 2, powiedzmy (101-200 ) ten sam wiersz może pojawić się również w tym zakresie. Sqoop uruchamia to samo zapytanie w różnych kontenerach (mapperach) z różnymi warunkami, aby równolegle dzielić zakresy.

Jeśli identyfikator to int (i znacznie lepiej, jeśli jest równomiernie rozłożony), użyj tego identyfikatora. Dlaczego możesz potrzebować row_number, gdy jest to kolumna STRING. przeczytaj to:https://stackoverflow.com/a/37389134/2700344 , podzielona kolumna niekoniecznie jest PK




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak dynamicznie utworzyć zmienną o typie danych tabeli?

  2. Wyświetl listę wszystkich funkcji w bazie danych Oracle

  3. Włączanie wirtualizacji w systemie BIOS w laptopie lub komputerze stacjonarnym dla maszyny wirtualnej Virtualbox

  4. Monitorowanie zmian w tabeli w Oracle

  5. Przechowuj dane daty i godziny jako liczby