Nếu bạn đang sử dụng phiên bản đăng ký của Talend, bạn có thể sử dụng loại cột động. Bạn có thể xác định một cột duy nhất cho đầu vào thuộc loại "Động" và ánh xạ nó tới một cột cùng loại trong thành phần đầu ra của bạn. Thao tác này sẽ tự động lấy các cột từ bảng a và ánh xạ chúng đến các cột giống nhau trong bảng b. Đây là ví dụ
.
Nếu bạn đang sử dụng Talend Open Studio, mọi thứ sẽ phức tạp hơn một chút vì Talend mong đợi một danh sách các cột cho các thành phần đầu vào và đầu ra cần được xác định tại thời điểm thiết kế.
Đây là một giải pháp mà tôi đã tổng hợp lại để khắc phục hạn chế này.
Ý tưởng là liệt kê tất cả các cột của bảng a có trong bảng b. Sau đó, chuyển đổi nó thành một danh sách các cột được phân tách bằng dấu phẩy, trong ví dụ của tôi là id,Theme,name
và lưu trữ nó trong một biến toàn cục COLUMN_LIST
. Đầu ra thứ hai của tMap xây dựng cùng một danh sách các cột, nhưng lần này đặt dấu ngoặc kép giữa các cột (để chúng có thể được sử dụng làm tham số cho CONCAT
chức năng sau), sau đó thêm các dấu ngoặc kép vào đầu và cuối, như sau:"'", id,"','",Theme,"','",name,"'"
và lưu trữ nó trong một biến toàn cục CONCAT_LIST
.
Trong công việc con tiếp theo, tôi truy vấn table a
sử dụng CONCAT
, cung cấp cho nó danh sách các cột được nối CONCAT_LIST
, do đó truy xuất từng bản ghi trong một cột đơn như vậy 'value1', 'value2',..etc
Sau đó, cuối cùng tôi thực hiện một INSERT
truy vấn đối với table b
, bằng cách chỉ định danh sách các cột được cung cấp bởi biến toàn cục COLUMN_LIST
và các giá trị sẽ được chèn dưới dạng một chuỗi duy nhất tạo ra từ CONCAT
hàm (row6.values
).
Giải pháp này là chung chung, nếu bạn thay thế tên bảng của mình bằng các biến ngữ cảnh, bạn có thể sử dụng nó để sao chép dữ liệu từ bất kỳ bảng MySQL nào sang bảng khác.