SQL Server에 프로그래밍 방식 ETL에 대한 표준 언어 / 인터페이스가 있습니까?


10

현재 데이터웨어 하우스를위한 ETL을 작성하는 중입니다. 우리는 SSIS 2008을 사용하고 있지만 가장 큰 문제는 구성 요소 재사용의 어려움입니다. 각 테이블마다 별도의 패키지가 있으며 각 패키지는 상위 패키지에서 여러 변수를 입력으로 사용합니다. 이러한 입력 변수를 변경함에 따라 각 패키지로 이동해야하고 (현재 15 개 정도이지만이 숫자가 크게 증가 할 것임) 해당 변경을 처리하도록 패키지를 수정해야합니다. 추출을 위해 임의의 SQL을 실행할 수 없거나 로깅 기능이 불량한 등 다른 문제도 있습니다.

코드에서 ETL을 개발하여 코드 재사용, 공통 라이브러리, 더 나은 단위 테스트 등을 수행 할 수있는 방법이 있다면이 전체 프로세스는 훨씬 더 강력 해집니다. SQL Server에 사실상 표준 ETL 언어 / API가 있습니까? GUI 도구를 최대한 피하고 싶습니다.

편집 : 내 배경을 언급해야합니다. 나는 DBA가 아니며 공식 (또는 비공식) DBA 교육을받지 못했지만 기본적으로 내가 따라갈 때이 자료를 알아 냈으므로 SSIS에서 부적절한 일을 시도 하거나이 ETL에 접근 할 가능성이 있습니다. 잘못된 각도에서 투사하십시오. 또한 저는 현재 주 정부에 고용되어 있으므로 새 소프트웨어 패키지를 구입해야하는 솔루션은 불가능합니다.


다음은 우리의 작업 중 하나입니다. 우리는 단일 SSIS 패키지를 사용하여 창고에 각 테이블을로드합니다. 각 팩트 패키지와 차원 패키지는 일반적으로 동일합니다.

  • 소스 데이터베이스에서 추출
  • 데이터 흐름에서의 조작
  • 대상 테이블로 병합

내가 할 수있는 일 (SSIS에서하기 어려운 것으로 밝혀 짐)

  • 텍스트 파일에서 추출 쿼리를로드하십시오. 개발자가 추출 쿼리를 작성하고 테스트 할 때 SSIS가 실행하기 전에 쿼리를 조작 할 필요가 없으며 쿼리를 잘라내어 DB 소스 개체에 붙여 넣을 필요가 없습니다.
  • 각 구성 요소를 개별적으로 테스트하십시오. 다른 테이블로드와 관계없이 개별 테이블에 대한 전체 ETL 프로세스를 개별적으로 테스트 할 수 있어야합니다.
  • 한 곳에서 공유 논리를 수정하고 개별 패키지를 편집 할 필요는 없습니다. 모든 패키지는 동일한 방식으로 감사 테이블에 데이터를로드합니다. 감사 된 데이터를 변경하려면 15 개의 패키지를 모두 편집 할 필요는 없습니다 (이 숫자는 시간이 지남에 따라 훨씬 커질 것입니다).

전체 프로세스는 공유 코드를 올바르게 사용하여 프로그래밍 방식으로 수행하면 구현하기가 훨씬 쉽고 강력 해 보입니다.


4
나는 SSIS를 많이 사용하지는 않지만 가파른 학습 곡선에 대한 인식을 이해할 수 있습니다. 현장 전문가 인 앤디 레너드, 제이미 톰슨, ​​브라이언 나이트의 비디오 / 블로그를보고 방향을 알아 보시기 바랍니다. sqlpass.org 웹 사이트에서 pass summit & sqlblog.com, pragmaticworks.com의 무료 비디오를 찾으십시오
Sankar Reddy

학습 곡선이 문제라고 생각하지 않습니다. SSIS에서 수행하려는 작업을 수행하는 방법을 알고 있습니다. 내가 찾은 솔루션이 반복적이고 깨지기 쉽고 불필요하게 복잡하기 때문에 새로운 프로세스를 찾고 있습니다.
kubi

Kubi, 당신이 말하는 구성 요소에 대한 세부 정보를 추가 할 수 있다면, 누군가 당신을 대신하여 대답 할 수 있습니다. 지금 당장 귀하의 질문에 답변하기에는 너무 광범위합니다.
Sankar Reddy

4
@kubi-당신은 BI 산업의 더러운 작은 비밀 중 하나를 만났습니다. ETL 도구는 추상화 및 재사용 가능한 로직이 매우 열악합니다. 결과적으로 도메인 복잡성이 증가함에 따라 확장 성이 매우 떨어집니다.
ConcernedOfTunbridgeWells

1
나는 은행 및 보험에 대한 특정 산업 수직 제품 고객의 약 절반 (당신이 들어 보았고 일반적으로 특정 색상으로 언급 한 회사가 만든)의 고객 중 약 절반이 이러한 이유로 저장 프로 시저 큐에서 ETL 처리.
ConcernedOfTunbridgeWells

답변:



6

이것을 읽었을 때 나는 즉시 Varigence의 도구를 추천하는 것을 생각했습니다. 그러나 Varigence의 수석 건축가 중 한 사람인 John Welch가 나보다 먼저 이곳에 왔습니다.

Varigence의 툴은 SSIS 위의 추상화 계층입니다. 그것이 제공하는 이점은 재사용 가능한 "물건"을 정의 할 수있는 능력으로 여러 패키지에 걸쳐 일관성을 제공합니다. Varigence 도구의 "컴파일 된"출력은 SSIS 패키지 인 패키지 구성 및 개별 패키지의 차이점을 정의합니다.

이를 SSIS 패키지의 동적 SQL로 생각하십시오. GUI로. 정말 멋지다.


3

SSIS를 여러 번 사용해 보았고 포기했습니다. IMO C #에서 필요한 모든 작업을 수행하는 것이 훨씬 쉽습니다. SSIS는 너무 복잡하고 문제가 너무 많으며 그만한 가치가 없습니다. SSIS를 배우는 데 같은 시간을 보내는 것보다 C # 기술을 향상시키는 데 더 많은 시간을 보내는 것이 훨씬 낫습니다. 훈련에 더 많은 수익을 얻게됩니다. 나는 여기서 자세히 설명 할 필요가 없다.- 아옌데는 내가 더할 것도없는 훌륭한 요약을 썼다 .

또한 VS 솔루션에서 기능을 찾고 유지 관리하는 것이 훨씬 쉽습니다. VS를 사용한 단위 테스트는 쉽습니다. Subversion에서 소스를 체크인하고로드 방법을 확인하기 만하면됩니다. SSIS 패키지의 단위 테스트는 약간만 포함됩니다.

또한 SSIS가 일부 행의 일부 열을 자동으로 채우지 못하는 상황이 있었으며 예외를 발생시키지 않고 건너 뛰었습니다. 우리는 문제를 해결하고 무슨 일이 일어나고 있는지 알아내는 데 많은 시간을 보냈습니다. C #에서 대체 솔루션을 개발하는 데 1 시간도 걸리지 않았으며 2 년 동안 아무런 문제없이 작동합니다.

또한 Rhino ETL 은 정말 멋진 것 같습니다.

stackoverflow에 대해서도 비슷한 토론이있었습니다 .


2

개인적으로 SQL에서 가능한 한 많은 ETL 프로세스를 처리합니다. SSIS를 사용하여 FTP 사이트 나 Excel과 같은 홀수 데이터 소스에서 가져 오지만 이는 원시 데이터를 SQL이 나머지 데이터베이스에서 수행하는 데이터베이스로 가져 오는 것입니다.

내 현재 상황은 대부분의 데이터가 다른 MS SQL 데이터베이스에 있으며 연결된 서버를 설정할 수 있다는 점에서 비교적 간단합니다. 당신이 다른 플랫폼에 연결해야하는 경우, 내가 사용하는 것이 좋습니다 OPENQUERYBULK INSERT. 필요한 경우 프로그래밍 방식으로 구성 할 수 있으며 둘 사이에서 대부분의 유형의 데이터에 연결할 수 있습니다.

SQL을 가장 잘 알고 있기 때문에 SQL을 사용하지만 객관적인 이점이 있습니다. 가장 주목할만한 점은 이미 사용 중입니다. 새로운 도구를 배우거나 비용을 지불 할 필요가 없습니다. 그것은 널리 사용 가능한 기술이며, 그렇지 않은 경우 상사에게 중요합니다. 데이터베이스에서 작동하므로 로깅이 쉽습니다. 일반 텍스트 코드를 기반으로하므로 쉽게 검색하고 소스 제어와 잘 작동합니다. 벤더가 변경하고 이전 버전과의 호환성을 깰 가능성이 거의 없으므로 매우 안정적입니다. 적어도 RBAR 언어만큼 빠릅니다.

더 필요한 경우 SSIS 및 SQLCLR에서 사용되기 때문에 .NET을 권장합니다. C # 앱을 사용하여 하위 단계 시작, 출력 모니터링, 전자 메일 보내기 등 전체 ETL 프로세스를 관리합니다. 그러나이 모든 것은 SQL Agent, dbmail 등으로 수행 할 수 있습니다.

ETL에 SQL을 사용할 수없는 이유가 있습니까? 당신을 위해 무엇을 할 수 없었습니까?


실제로 SSIS를 사용하여 원시 데이터를 Temp DB에 덤프 한 다음 TSQL을 사용하여 T 및 L에 원하는 방식을 정의합니다.
Paul
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.