Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

sqoop split by option đang mắc lỗi khi sử dụng cột dẫn xuất trong tùy chọn split by

Sử dụng truy vấn con để bao bọc phép tính row_number, sau đó sử dụng cột dẫn xuất trong phần tách.

   --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 nên có tính xác định, có nghĩa là khi được thực thi nhiều lần, nó phải gán chính xác cùng một số cho tất cả các hàng. Điều gì có thể xảy ra nếu ORDER BY trong OVER không chứa cột hoặc kết hợp duy nhất:row_number có thể trả về các số khác nhau cho các hàng giống nhau. Và nếu bạn đang sử dụng nó trong phạm vi phân tách, bạn sẽ nhận được sự trùng lặp vì cùng một hàng có thể nằm trong phạm vi phân tách 1, giả sử 1-100, trong mapper2 sqoop sẽ thực hiện cùng một truy vấn với bộ lọc cho phạm vi 2, chẳng hạn (101-200 ) cùng một hàng cũng có thể xuất hiện trong phạm vi đó. Sqoop chạy cùng một truy vấn trong các vùng chứa (trình liên kết) khác nhau với điều kiện khác nhau để nhận các phạm vi phân chia song song.

Nếu Id là int (và tốt hơn nhiều nếu nó được phân phối đồng đều), hãy sử dụng ID đó. Tại sao bạn có thể cần row_number khi nó là cột STRING. đọc phần này: https://stackoverflow.com/a/37389134/2700344 , cột tách không nhất thiết phải là 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. Cách đặt giá trị mặc định cho cột của bảng mới tạo từ câu lệnh select trong 11g

  2. Phương pháp thu thập:Hàm EXISTS trong cơ sở dữ liệu Oracle

  3. Cách lặp qua các cột với PL / SQL

  4. Hiển thị tất cả các truy vấn đến cơ sở dữ liệu Oracle

  5. Làm cách nào để kiểm tra đầu ra đến từ truy vấn SELECT trong dấu nhắc lệnh?