Oracle
 sql >> база данни >  >> RDS >> Oracle

sqoop split by option дава грешка при използване на извлечена колона в split by option

Използвайте подзаявка, за да обвиете изчислението row_number, след което използвайте извлечена колона в разделянето по.

   --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 трябва да бъде детерминистично, това означава, че когато се изпълнява многократно, трябва да присвои точно същия номер на всички редове. Какво може да се случи, ако ORDER BY в OVER съдържа неуникална колона или комбинация:row_number може да върне различни числа за едни и същи редове. И ако го използвате в split-by, ще получите дублиране, защото един и същи ред може да бъде в разделен диапазон 1, да речем 1-100, в mapper2 sqoop ще изпълни същата заявка с филтър за диапазон 2, да речем (101-200 ) същият ред може да се появи и в този диапазон. Sqoop изпълнява една и съща заявка в различни контейнери (картографи) с различни условия, за да получи разделени диапазони паралелно.

Ако Id е int (и много по-добре, ако е равномерно разпределен), използвайте този ID. Защо може да се нуждаете от row_number е, когато е STRING колона. прочетете това:https://stackoverflow.com/a/37389134/2700344 , разделената колона не е непременно 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. Как да намерите броя и имената на различни символи в низ в PL/SQL

  2. Мога ли да променя свойството AutoCommit на JDBC връзка няколко пъти

  3. PL/SQL BIND VARIABLES за изчисляване на обема на правоъгълна призма

  4. DbCommand и параметризиран SQL, ORACLE срещу SQL Server

  5. Oracle PL/SQL:Пример DBMS_SCHEDULER.CREATE_JOB