소스 LOB 컬럼을 처리 할 때 "행별"페치 메소드 피하기


12

SSIS를 사용하여 새 SQL Server 스키마로 마이그레이션하려는 레거시 PostgreSQL 데이터베이스 소스 (ODBC)가 있습니다. 경고 메시지가 나타납니다.

테이블에 LOB 열이 있으므로 'Row by Row'페치 메소드가 적용됩니다. 열 내용은 LOB입니다

문제는 실제로 어떤 열도 LOB 일 필요 는 없다는 것입니다 . TEXT 유형 인 몇 가지가 있지만 varchar (max) 내에 쉽게 들어갈 수 있습니다. 심지어 낯선 사람이하지만, 대부분 이미 있습니다 으로 VARCHAR,하지만 그것이 LOB 것처럼 치료를 받고 VARCHAR 이상 아무것도 (128)를 보인다 (사전 속성이 데이터 유형은 DT_NTEXT입니다).

이벤트는 수동으로 SQL 명령을 수행하여 select 문에서 모든 문자열 유형을 적절한 길이의 varchar로 캐스트했지만 여전히 ODBC 소스에서 DT_NTEXT로 설정되어 있습니다.

나는 DBA가 아니기 때문에 정말 바보 같은 일을 할 수 있습니다. 일괄 가져 오기를 할 수 있도록 유형이 varchar로 끝나도록하는 가장 좋은 방법을 알고 싶습니다. 어떤 아이디어?

중요한 경우 Visual Studio 2013에서 SSIS-BI 2014를 사용하고 있습니다.


3
소스 시스템에서이를 최대 크기가 아닌 크기로 명시 적으로 캐스트 할 때 기존 데이터 플로우에서 발생 했습니까, 아니면 새 데이터 컴포넌트를 작성 했습니까? 아니면 최소한 새 소스 컴포넌트를 작성 했습니까? 쿼리에 동일한 열 이름과 더 스키니 유형 만 제공하면 변경으로 등록되지 않아 편집기가 메타 데이터 수집 프로세스를 시작하지 않으므로 비용이 많이 듭니다. 또한 varchar (max)는 SSIS 데이터 흐름의 LOB으로 취급되며 agilebi.com/jwelch/2010/05/11/…
billinkc

ODBC 데이터 소스 구성 요소에는 테이블을 선택하거나 조회를 사용하는 옵션이 있습니다. 그것이 사용자 정의 쿼리에서 캐스팅을 수행하는 곳입니다. varchar(max)SSIS의 목적을 위해 열 데이터가 최대 varchar 크기 (약 4000)에 맞을 수 있다고 말하는 것에 대한 약칭으로 언급 했습니다. 나는 실제로 아무것도 캐스팅하지 않습니다 varchar(max). 그러나 나는 varchar(4000)안전을 위해 일부 열을에 캐스팅했습니다 .
Chris Pratt

답변:


4

varchar에 대해 128보다 큰 varchar에 대한 데이터 변환을 NTEXT로 사용했지만 결국 오류를 제거한 것은 외부 데이터 유효성 검사를 False로 설정 한 것입니다.


3

분명히 이것은 128보다 큰 varchar를 NTEXT로 취급하는 SSIS로 요약됩니다. 이유가 확실하지 않습니다. 그러나 ODBC 소스의 고급 특성으로 이동하여 유형을 DT_WSTR과 같은 형식으로 다시 변경할 수 있습니다. 대부분의 경우 작동하는 것 같습니다.

그러나, 내가 다루고있는 몇 가지 테이블이 실제로 일부 TEXT 열에서 4000 바이트 이상을 운반한다고 결정했기 때문에 불행히도 잘림을 방지하기 위해 열을 DT_NTEXT로 남겨 두어야합니다 (SSIS는 4000 바이트 이상으로 DT_WSTR 유형을 설정하십시오. 이 인스턴스에서 행 단위 가져 오기로 막혔지만 최소한 몇 개의 테이블을 수정할 수 있다고 가정합니다.


0

이 솔루션은 저에게 효과적이었습니다.

datasource 속성에서 Max Varchar 매개 변수를 변경하여 오류를 제거했습니다. 연결 관리자로 이동하십시오. 연결 문자열 옆에있는 빌드 옵션을 선택하십시오. 더 많은 옵션에 액세스하려면 연결 버튼을 클릭하십시오. Max Varchar의 값을 변경하십시오.

여기에 이미지 설명을 입력하십시오


0

필자의 경우 소스는 긴 텍스트를 LOB 데이터 유형으로 취급하는 Filemaker ODBC입니다. 테이블에 LOB 열이 있기 때문에 Row by Row 페치 메소드의 성능이 극도로 저하되어 패키지가 오랫동안 중단되는 데 사용되었습니다. 따라서 배치되는 동안 오랜 시간이 지난 후 시간이 초과되어 결국 실패했습니다.

나는 나를 위해 매력처럼 작동하는 실제 솔루션을 공유하고 있습니다. 30k LOB 유형 데이터 풀의 하루는 약 10 분이 걸렸습니다. :

DefaultBufferMaxRows를 1로 낮추고 DefaultBufferSize를 최대 즉 100MB로 늘리십시오. 그런 다음 '텍스트를 긴 varchar로 처리'옵션을 확인하여 소스 ODBC DSN을 변경하십시오. 그리고 소스에서 타겟으로 데이터 유형을 맵핑하십시오 (소스에서 고급 편집기를 변경하지 않고).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.