Tránh phương thức lấy hàng của Row Row theo hàng khi xử lý các cột LOB nguồn


12

Tôi có một nguồn cơ sở dữ liệu PostgreSQL cũ (ODBC) mà tôi đang cố gắng di chuyển sang lược đồ SQL Server mới bằng SSIS. Tôi đang nhận được một cảnh báo rằng:

Phương thức tìm nạp 'Row by Row' được thi hành vì bảng có (các) cột LOB. Nội dung cột là LOB

Vấn đề là, không có cột nào thực sự cần phải là LOB. Có một vài kiểu là văn bản, nhưng có thể dễ dàng phù hợp với một biến thể (tối đa). Mặc dù xa lạ, mặc dù, hầu hết đã varchars, nhưng dường như mọi thứ trên varchar (128) đang được xử lý như thể đó là LOB (trong các thuộc tính trước, kiểu dữ liệu là DT_NTEXT).

Tôi đã thử thực hiện một lệnh SQL thủ công trong đó tôi đã truyền rõ ràng mọi loại chuỗi thành một biến có độ dài phù hợp trong câu lệnh chọn và chúng vẫn được đặt là DT_NTEXT trong nguồn ODBC.

Tôi không phải là một DBA, vì vậy hoàn toàn có thể tôi đang làm điều gì đó thực sự ngu ngốc. Tôi chỉ muốn biết cách tốt nhất để đảm bảo rằng các loại kết thúc dưới dạng varchars để tôi có thể tìm nạp hàng loạt. Có ý kiến ​​gì không?

Trong trường hợp có vấn đề, tôi đang sử dụng SSIS-BI 2014 trong Visual Studio 2013.


3
Khi bạn chuyển chúng một cách rõ ràng trong hệ thống nguồn thành kích thước không tối đa, đó là trong luồng dữ liệu hiện có hay bạn đã tạo một dữ liệu mới, hoặc ít nhất là một thành phần nguồn mới cho nó? Khi bạn cung cấp một truy vấn có cùng tên cột và chỉ các loại skinnier, đôi khi không đăng ký thay đổi để trình soạn thảo không thực hiện quy trình thu thập siêu dữ liệu (có thể tốn kém). Ngoài ra, một varchar (tối đa) sẽ được coi là LOB cho luồng dữ liệu SSIS và điều đó có thể làm tổn thương agilebi.com/jwelch/2010/05/11/ Lỗi
billinkc

Trong thành phần nguồn dữ liệu ODBC, bạn có tùy chọn để chọn bảng hoặc sử dụng truy vấn. Đó là nơi tôi đang thực hiện phân vai: trong một truy vấn tùy chỉnh. Tôi đã đề cập varchar(max)như một cách viết tắt để nói rằng dữ liệu cột có thể vừa với kích thước varchar tối đa, khoảng 4000, cho mục đích của SSIS, tôi nghĩ vậy. Tôi không thực sự đúc bất cứ điều gì varchar(max); Mặc dù vậy, tôi đã thực hiện một số cột để varchar(4000)an toàn.
Chris Pratt

Câu trả lời:


3

Rõ ràng điều này chỉ giúp SSIS xử lý bất kỳ varchar nào lớn hơn 128 là NTEXT. Không chắc chắn lý do tại sao. Tuy nhiên, tôi có thể đi vào các thuộc tính nâng cao của nguồn ODBC và thay đổi các loại trở lại thành một cái gì đó như DT_WSTR. Mà dường như làm việc cho hầu hết các phần.

Tuy nhiên, tôi đã xác định rằng một vài trong số các bảng mà tôi đang xử lý thực sự đang mang tới 4000 byte trong một số cột TEXT của chúng, vì vậy tôi không may phải để lại các cola đó dưới dạng DT_NTEXT để ngăn chặn việc cắt ngắn (SSIS sẽ không cho phép bạn đặt loại DT_WSTR có hơn 4000 byte). Tôi cho rằng trong những trường hợp này, tôi chỉ bị mắc kẹt với tìm nạp theo từng hàng, nhưng ít nhất tôi đã có thể sửa một vài bảng.


3

Tôi đã sử dụng Chuyển đổi dữ liệu cho varchar lớn hơn 128 là NTEXT nhưng điều cuối cùng đã loại bỏ lỗi đối với tôi là tập hợp Xác thực dữ liệu ngoài thành Sai.


0

Giải pháp này hiệu quả với tôi:

Tôi đã xóa lỗi bằng cách thay đổi tham số Max Varchar trong thuộc tính nguồn dữ liệu. Đi đến trình quản lý kết nối. Chọn tùy chọn xây dựng bên cạnh chuỗi kết nối. Nhấp vào nút kết nối để truy cập thêm tùy chọn. Thay đổi giá trị của Max Varchar.

nhập mô tả hình ảnh ở đây


0

Trong trường hợp của tôi, nguồn là Filemaker ODBC cũng xử lý văn bản dài dưới dạng kiểu dữ liệu LOB. Gói của tôi được sử dụng để treo trong một thời gian dài do hiệu suất giảm mạnh đối với phương pháp tìm nạp Row by Row được thi hành vì bảng có (các) cột LOB. Do đó, trong khi được triển khai, nó đã hết thời gian chờ sau một thời gian dài và cuối cùng thất bại.

Tôi đang chia sẻ giải pháp thực tế có tác dụng như một cơ duyên đối với tôi. Một ngày trị giá hơn 30k loại dữ liệu LOB kéo mất khoảng 10 phút cho tôi ::

Hạ DefaultBufferMaxRows xuống 1 và tăng DefaultBufferSize lên tối đa 100 MB. Sau đó thay đổi ODBC DSN nguồn bằng cách chọn tùy chọn 'coi văn bản là varchar dài'. Và ánh xạ các kiểu dữ liệu từ nguồn sang đích (không có bất kỳ thay đổi nào trong trình soạn thảo nâng cao trong nguồn).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.