programing

SSIS Excel 데이터 원본 - 열 데이터 형식을 재정의할 수 있습니까?

linuxpc 2023. 4. 21. 20:18
반응형

SSIS Excel 데이터 원본 - 열 데이터 형식을 재정의할 수 있습니까?

SSIS에서 Excel 데이터 소스를 사용하는 경우 각 열의 데이터 유형은 열의 데이터에서 파생됩니다.이 동작을 재정의할 수 있습니까?

이상적으로는 데이터 흐름의 후반 단계에서 소스로부터 수신된 데이터에 대해 데이터 검증을 수행할 수 있도록 Excel 소스로부터 전달되는 모든 열이 문자열 데이터 유형으로 되어 있어야 합니다.

현재 [Error Output]탭은 변환 실패를 무시하기 위해 사용할 수 있습니다.문제의 데이터는 null이 되어, 패키지는 계속 실행됩니다.다만, 그 행에 적절한 에러 메세지가 생성될 수 있도록, 원래의 데이터가 무엇이었는지를 알고 싶습니다.

블로그 투고에 따르면 SSIS Excel 드라이버는 첫 번째 8행의 읽기 값에 따라 각 열의 데이터 유형을 판별하는 것이 문제입니다.

  • 상위 8개 레코드에 동일한 숫자와 문자 유형이 포함된 경우 우선 순위는 숫자입니다.
  • 상위 8개 레코드의 대부분이 숫자일 경우 데이터 유형을 숫자로 할당하고 모든 문자 값을 NULL로 읽습니다.
  • 상위 8개 레코드의 대부분이 문자 유형인 경우 데이터 유형을 문자열로 할당하고 모든 숫자 값을 NULL로 읽습니다.

이 투고에서는, 이 문제를 해결하기 위해서 할 수 있는 다음의 2개의 조작을 개략적으로 설명하고 있습니다.

  1. 「」를 추가해 주세요.IMEX=1Excel 드 excel excel excel excel excel excel excel excel excel excel excel excel excel excel 。엑셀, 유니코드그러나 처음 8개 행의 데이터가 숫자이면 이 값으로 충분하지 않습니다.
  2. 합니다.HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Nod\Microsoft\Jet\4.0\Engines\Excel\TypeGuessRows이렇게 하면 드라이버가 모든 행을 보고 열의 데이터 유형을 확인할 수 있습니다.

네, 가능합니다.Excel 소스의 출력 열 목록으로 이동하여 각 열의 유형을 설정하십시오.

Excel 소스를 마우스 오른쪽 버튼으로 클릭하여 'Show Advanced Editor'를 선택하고 'Input and Output Properties' 탭을 클릭합니다.

파생된 열 구성 요소를 사용하여 Excel의 각 열에 대해 "새" 열을 실제로 작성하는 것이 더 나을 수 있습니다.이 방법에는 다음과 같은 메리트가 있습니다.

  1. 변환 대상을 더 잘 제어할 수 있습니다.
  2. 변경을 제어하는 규칙을 입력할 수 있습니다(즉, null이면 빈 문자열을 제공하지만 데이터가 있으면 데이터를 문자열로 제공).
  3. 데이터 소스가 프로세스의 나머지 부분에 직접 연결되어 있지 않습니다(즉, 소스를 변경할 수 있으며 작업을 수행해야 하는 위치는 파생된 열뿐입니다).

Excel 파일의 데이터 첫 번째 행의 해당 열에 숫자가 포함되어 있는 경우 SSIS 엔진은 해당 유형을 숫자 유형으로 리셋하는 것으로 보입니다.내 거 계속 리셋했어엑셀 파일에 들어가서 숫자 앞에 작은 따옴표를 붙여 숫자를 "텍스트로 저장된 숫자"로 변경했습니다.이제 텍스트로 읽힙니다.

또, SSIS는, 프로그래머가 지시한 데이터의 실제 타입을 무시하기 위해서 첫 번째 행을 사용하고 있는 것을 알게 되었습니다(엑셀에게 열 전체를 TEXT로 포맷하도록 지시했지만, SSIS는 여전히 데이터를 사용하고 있었습니다).일단 엑셀 파일의 첫 번째 줄에 있는 숫자 앞에 한 개의 인용문을 넣어 수정하고 나서, 그것이 맞다고 생각했습니다만, 아니요, 추가 작업이 있습니다.

실제로 SSIS External DataSource Column에는 DT_WSTR 타입이 있습니다만, 435671E+007 로 읽힙니다.따라서 Excel 파일로 돌아가서 모든 숫자 앞에 작은 따옴표를 붙여야 합니다.

꽤 LAME, 마이크로소프트!하지만 네 해결책이 있어만약 엑셀 파일이 당신의 관리 하에 있지 않다면 어떻게 해야 할지 모르겠습니다.

비슷한 문제에 대한 해결책을 찾고 있었지만 인터넷에서 아무것도 찾지 못했습니다.발견된 솔루션의 대부분은 설계 시에 동작하지만 SSIS 패키지를 자동화할 때는 동작하지 않습니다.

엑셀 소스 속성을 변경하여 문제를 해결했습니다.로는 " " " 입니다.AccessMode이 성성 property property to로 되어 있다.OpenRowSetSQL Command원하는 열을 변환하기 위해 자체 SQL을 작성할 수 있습니다.

가 SSIS를 .NDCCode플로트로 float를 했습니다.

Select [Site], Cstr([NDCCode]) as NDCCode From [Sheet1$]

여기에 이미지 설명 입력

여기에 이미지 설명 입력

Excel 소스는 SSIS 동작 이상.SSIS는 처음 10개의 행을 읽어 특정 열의 데이터 유형을 결정합니다.이 때문에 문제가 발생합니다.처음 10개의 로에 null 값이 있는 텍스트 열이 있는 경우 SSIS는 데이터 유형을 Int로 받아들입니다.조금 힘들지만, 여기 해결 방법이 있습니다.

  1. 워크시트에 더미 행(가능하면 첫 번째 행)을 삽입합니다.스크립트 태스크에서 이 작업을 수행하는 것이 좋습니다.SSIS가 파일에 접속하기 전에 서비스를 사용하여 파일을 전처리하는 것을 검토해 주십시오.

  2. duummy 행을 사용하면 데이터 유형이 필요한 대로 설정될 수 있습니다.

  3. Excel 소스를 사용하여 데이터를 읽고 더미 행을 필터링하여 처리하십시오.

좀 초라한 건 알지만 효과가 있어요:)

이 문제는 제가 해결할 수 있어요.SSIS 패키지를 만들 때 특정 열을 텍스트로 수동으로 변경했습니다(엑셀 파일을 열고 열을 마우스 오른쪽 버튼으로 클릭하고 숫자 탭에서 셀 형식을 선택하고 텍스트를 선택한 후 엑셀을 저장).이제 SSIS 패키지를 생성하여 테스트합니다.그건 효과가 있다.이제 이 열이 텍스트로 설정되지 않은 엑셀 파일을 사용해 보십시오.

그것은 나에게 효과가 있었고 나는 패키지를 성공적으로 실행할 수 있었다.

이 문제는 간단히 해결할 수 있습니다. "Frist row as column names" 상자를 선택 해제하면 모든 데이터가 텍스트 데이터 유형으로 수집됩니다.이 선택지의 유일한 단점은 자동 이름(열 1, 2 등)에서 열 이름을 관리하고 열 이름을 포함하는 첫 번째 행을 처리해야 한다는 것입니다.

여기서 솔루션을 구현하는데 문제가 있었습니다.지시사항을 따를 수 있었지만 새로운 오류만 발생하였습니다.

데이터 변환 엔티티를 사용하여 변환 문제를 해결했습니다.이는 SSIS 툴박스의 "Data Flow Transformations"에서 확인할 수 있습니다.Excel Source와 OLE DB Destination 사이에 Data Conversion을 배치하고 Excel을 Data C로, Data C를 OLE DB로 링크하고 Data C를 더블 클릭하여 데이터 열의 목록을 표시했습니다.문제 열에 새 별칭을 지정하고 데이터 유형 열을 변경했습니다.

마지막으로 OLE DB 대상 매핑에서 원래 Excel 열 이름 대신 별칭 열 이름을 사용합니다.일이 끝났다.

데이터 변환 구성 요소를 사용하여 원하는 데이터 유형으로 변환할 수 있습니다.

언급URL : https://stackoverflow.com/questions/540823/ssis-excel-data-source-is-it-possible-to-override-column-data-types

반응형