SQL Server 데이터 계보: T-SQL, 저장 프로시저 및 동적 SQL

SQL Server 데이터 계보 T-SQL 코드에서 데이터가 어떻게 이동하는지 보여주는 열 수준 맵입니다. 즉, 어떤 소스 열이 각 대상 테이블, 뷰 또는 보고서에 데이터를 제공하는지, 그리고 저장 프로시저, 임시 테이블 내부에서 어떤 일이 발생하는지를 나타냅니다. 병합 문장 및 동적 SQL. Gudu SQLFlow 이 기능은 전용 SQL Server 프로시저 파서를 사용하여 T-SQL을 구문 분석함으로써 해당 맵을 자동으로 생성하므로 SSMS 종속성 보기처럼 개체 수준에서 계보가 중단되지 않습니다.

지금 바로 시도해 보세요: T-SQL 저장 프로시저를 붙여넣으세요 무료 SQL Server 계보 시각화 도구 그리고 몇 초 만에 열 수준의 계보도를 얻을 수 있습니다.

SQL Server 데이터 계보 추적이 생각보다 어려운 이유

대부분의 SQL Server 환경에서 실제로 중요한 변환 로직은 깔끔한 뷰에 있는 것이 아니라, 데이터를 단계적으로 처리하는 저장 프로시저에 있습니다. #temp 테이블, 사실 테이블에 upsert 병합매개변수에 따라 분기하고 런타임에 SQL 문자열을 구성합니다. sp_executesql 또는 임원카탈로그에서 객체 정의만 읽는 모든 계보 접근 방식은 프로시저를 블랙박스로 간주합니다. 즉, 프로시저가 존재한다는 것은 알지만 어떤 열이 프로시저를 통해 전달되는지는 알 수 없습니다.

해당 코드에서 진정한 계보를 파악하려면 데이터베이스 엔진이 T-SQL을 파싱하는 방식대로 분석해야 합니다. 즉, 프로시저 본문의 모든 문장에 대한 의미 모델을 구축하고, 임시 테이블과 테이블 변수를 거치는 열을 추적하며, 문자열 변수 안에 숨겨진 SQL을 해석해야 합니다. 이는 메타데이터 쿼리 문제가 아니라 컴파일러 문제이며, SQLFlow의 T-SQL 파서는 바로 이러한 작업을 위해 설계되었습니다.

SSMS 종속성 보기에서 알 수 있는 것과 알 수 없는 것

SQL Server는 유용한 종속성 관리 도구를 제공하며, 객체 수준의 간단한 질문을 할 때 가장 먼저 찾아야 할 곳입니다. sys.sql_expression_dependencies, sys.dm_sql_참조된 엔티티SSMS의 "종속성 보기" 대화 상자는 프로시저 A가 테이블 B를 참조한다는 사실을 확실하게 알려줍니다. 하지만 다음과 같은 사실은 알려주지 않습니다.

  • 컬럼 레벨 흐름. 카탈로그 종속성은 객체 수준에서 멈춥니다. 이는 다음을 보여줍니다. usp_load_fact_sales 터치 스테이징.세일즈 그리고 dw.fact_sales하지만 그건 아니야 사실_판매액 ~에서 파생됨 스테이징.판매.금액 ~을 통해 깁스 ~하는 동안 스테이징.판매.로드_날짜 행만 필터링합니다.
  • 흐름의 방향. 참조는 데이터 흐름이 아닙니다. 테이블에서 읽고 쓰는 작업은 동일한 종속성 행을 생성합니다. 데이터 계보는 어느 것이 소스이고 어느 것이 대상인지 알아야 합니다.
  • 동적 SQL. 문자열로 구성된 문장들이 실행됩니다. sp_executesql 또는 임원 이러한 요소들은 런타임 전까지는 존재하지 않기 때문에 종속성 카탈로그에 전혀 표시되지 않습니다.
  • 임시 테이블 홉. #temp 테이블은 살아있습니다 tempdb 또한 종속성 엔드포인트로 추적되지 않으므로, 이를 통과하는 모든 계보는 절반으로 잘립니다.

"이 열을 다시 입력하면 하위 시스템에서 어떤 문제가 발생하는가?" 또는 "이 규제 보고서에 어떤 소스 필드가 사용되는가?"와 같은 질문에 답하려면 T-SQL 본문을 직접 분석해야 합니다. SQLFlow는 카탈로그에서 이미 제공하는 기능 위에 바로 이 부분을 추가합니다.

SQLFlow는 T-SQL 프로시저를 통해 어떻게 계보를 추적하는가

SQLFlow는 다음을 기반으로 구축되었습니다. 일반 SQL 파서(GSP), a commercial SQL compiler front-end developed since the mid-2000s and validated against roughly 13,600 per-dialect SQL test fixtures. Its SQL Server support is a dedicated T-SQL grammar, not a generic ANSI parser with exceptions bolted on, and it includes a full procedural parser for stored procedure bodies. Inside a procedure, SQLFlow resolves:

  • 임시 테이블과 테이블 변수. 컬럼은 다음을 통해 추적됩니다. SELECT ... INTO #staging, @rows 테이블에 삽입그리고 그 이후의 모든 읽기 작업도 마찬가지로, 3단계 파이프라인을 거치게 됩니다. tempdb 하나의 연속적인 계보 경로로 나타납니다.
  • 병합 진술.일치하는 경우 업데이트 그리고 일치하지 않으면 삽입하십시오 분기를 분석하여 소스 열을 대상 열에 매핑하고 처리합니다. 간접 혈통으로서의 상태.
  • 동적 SQL. SQL 쿼리가 변수로 구성되고 실행됩니다. sp_executesql 또는 임원 건너뛰는 대신 해결 및 구문 분석됩니다. 이는 계보 도구에서 가장 흔한 사각지대 중 하나입니다.
  • 절차 매개변수. 계보는 매개변수 값을 통해 해당 값을 사용하는 문장으로 이어집니다.
  • 통화량 그래프. 프로시저가 다른 프로시저를 호출할 때 SQLFlow는 프로시저 간 호출 그래프를 대화형으로 표시하므로 개별 프로시저가 아닌 전체 ETL 체인을 볼 수 있습니다.

예시: MERGE를 사용하여 스테이징 테이블을 팩트 테이블로 변환

다음은 모든 SQL Server 데이터 웨어하우스에 포함된 프로시저의 한 종류입니다. 이 프로시저는 스테이징 행을 임시 테이블로 정리한 다음, 이를 팩트 테이블로 병합합니다.

CREATE PROCEDURE dbo.usp_load_fact_sales AS BEGIN SELECT s.order_id, s.customer_id, CAST(s.amount AS DECIMAL(18,2)) AS amount INTO #clean_sales FROM staging.sales s WHERE s.load_date = CAST(GETDATE() AS DATE); MERGE dw.fact_sales AS tgt USING #clean_sales AS src ON tgt.order_id = src.order_id WHEN MATCHED THEN UPDATE SET tgt.amount = src.amount WHEN NOT MATCHED THEN INSERT (order_id, customer_id, amount) VALUES (src.order_id, src.customer_id, src.amount); END

SQLFlow를 통해 실행하면 다이어그램이 표시됩니다. dw.fact_sales.amount ~에 의해 공급됨 스테이징.판매.금액 ~을 통해 깁스, 와 함께 #clean_sales 중간 단계로 표시됩니다. 또한 카탈로그 쿼리로는 절대 생성할 수 없는 두 가지 관계를 보여줍니다. 스테이징.판매.로드_날짜 모든 출력 열에 대한 간접적인 계보 역할을 하며(어떤 행이 로드될지 결정함), 주문 ID 삽입된 키로의 직접적인 계보와 이를 통한 간접적인 계보, 두 가지 역할을 동시에 수행합니다. 병합... 켜짐 경기 조건.

T-SQL에서 직접 계보와 간접 계보의 차이점

SQLFlow는 구별합니다 직계 혈통 (원본 열의 값이 대상 열에 저장됨) 간접 혈통 (열은 결과를 통해 모양을 만듭니다) 어디 절, 가입하다 또는 병합 시작 상태, 그룹화 기준(또는 집계). 이 두 가지는 다이어그램에서 개별적으로 켜고 끌 수 있습니다. 이는 대부분의 다른 방언보다 T-SQL 작업에서 더 중요합니다. 로드 프로시저에는 출력에 나타나지 않지만 어떤 데이터가 전달될지를 조용히 제어하는 필터 열(배치 날짜, 상태 플래그, 워터마크 열)이 많기 때문입니다. 대부분의 데이터 계보 도구는 이러한 구분을 전혀 모델링하지 않습니다. 로드 프로시저에 대한 영향 분석에서 이러한 구분이 종종 문제를 일으킵니다.

SQL Server 계보 가져오기: 입력 및 배포

SQLFlow에 SQL Server 코드를 전달하는 방법은 환경의 보안 수준에 따라 여러 가지가 있습니다.

입력작동 방식좋은
T-SQL을 붙여넣거나 업로드하세요.스크립트, DDL 및 프로시저 정의는 파일 또는 붙여넣은 텍스트 형식입니다.신속한 분석, 코드 검토, 한 번에 한 절차씩
JDBC를 통한 실시간 메타데이터SQLFlow는 인스턴스에서 DDL, 뷰 및 프로시저 정의를 가져옵니다.전체 데이터베이스 계보가 최신 상태로 유지됩니다.
Grabit 메타데이터 추출오프라인 추출 유틸리티는 메타데이터를 SQLFlow로 전송합니다.계보 서버가 데이터베이스에 접근할 수 없는 환경

모든 경우에 분석은 정적입니다. SQLFlow는 SQL 코드와 스키마 메타데이터를 읽으며 테이블의 행은 읽지 않습니다. 규제 환경의 경우, 온프레미스 SQLFlow 네트워크 내부의 Docker 또는 Kubernetes 환경에서 실행되며, 필요한 경우 에어갭 환경에서도 실행 가능하므로 T-SQL 소스 코드는 인프라 외부로 유출되지 않습니다. 엔터프라이즈 배포 환경에서는 100개 이상의 데이터베이스와 백만 개 이상의 열을 포함하는 대규모 환경을 일괄 스캔 방식으로 처리하고, DataHub, Microsoft Purview, OpenMetadata로 데이터 계보를 내보내어 SQL Server 데이터 계보를 기존에 사용 중인 카탈로그에 통합할 수 있습니다. 가격클라우드 에디션은 무료로 시작하며(프리미엄 월 $49.99), 온프레미스 에디션은 데이터베이스 유형별로 월 $500 또는 일회성 $4,800입니다. 자세한 내용은 다음을 참조하세요. 가격 페이지.

오픈소스 파서와 카탈로그 플랫폼은 어떻습니까?

오픈소스 라이브러리 sqllineage 그리고 sqlglot 개별 쿼리를 잘 파싱하면 일반적인 SELECT 및 INSERT 문에는 충분할 수 있습니다. 하지만 T-SQL 프로시저 코드, 즉 제어 흐름이 있는 프로시저 본문에서는 차이가 발생합니다. #temp 문장 간 테이블 상태, 병합 분기 분석 및 동적 SQL 해석은 일반적인 도구가 건너뛰는 하드 파서 엔지니어링 작업입니다. 카탈로그 우선 플랫폼은 여러 시스템에 걸쳐 메타데이터를 구성하는 데 강점을 가지고 있지만, 저장 프로시저 로직을 통한 열 계보 추적을 위해서는 일반적으로 파싱 엔진이 필요합니다. SQLFlow는 바로 이러한 역할을 하며, 독립 실행형으로 사용되거나 해당 플랫폼에 계보 정보를 제공하는 역할을 합니다. 가장 확실한 테스트 방법은 실제 운영 환경에서 가장 긴 프로시저를 가져와 각 후보 도구를 통해 실행해 보는 것입니다.

관련 계보 가이드

자주 묻는 질문

SQLFlow는 SQL Server 동적 SQL을 통해 추적 계보를 확인할 수 있습니까?

예. SQL은 문자열 변수에 구성되어 실행됩니다. sp_executesql 또는 임원 프로시저 분석 내부에서 해결 및 구문 분석되므로 해당 프로시저가 참조하는 테이블과 열이 계보 그래프에 나타납니다. 카탈로그 기반 종속성 보기에서는 동적 SQL을 전혀 볼 수 없습니다.

SQLFlow는 #temp 테이블과 테이블 변수를 처리할 수 있습니까?

예. 열은 다음을 통해 추적됩니다. #temp 문장 전체에 걸쳐 테이블과 테이블 변수를 사용하므로 데이터를 준비하는 파이프라인이 필요합니다. tempdb 원본 테이블에서 최종 대상 테이블까지 하나의 연속적인 열 수준 경로로 나타납니다.

SSMS의 뷰 종속성과는 어떻게 다른가요?

SSMS 종속성 보기에서는 객체 수준 참조가 표시됩니다. 예를 들어 프로시저 A가 테이블 B를 참조하는 경우입니다. SQLFlow는 T-SQL 본문을 구문 분석하고 열 수준 데이터 흐름을 방향과 함께 보고합니다. 즉, 어떤 원본 열이 어떤 대상 열에 어떤 변환을 거쳐 전달되는지(임시 테이블을 통한 흐름 포함)를 보여줍니다. 병합또한 카탈로그에서 추적하지 않는 동적 SQL도 있습니다.

SQLFlow는 SQL Server 데이터에 대한 접근 권한이 필요한가요?

아니요. SQLFlow는 SQL 코드에 대한 정적 분석을 수행하며 선택적으로 테이블 및 프로시저 정의와 같은 스키마 메타데이터를 읽습니다. 하지만 테이블 행 데이터는 절대 읽지 않으며, 온프레미스 버전은 SQL 텍스트를 네트워크 내부에 보관합니다.

어떤 저장 프로시저가 어떤 저장 프로시저를 호출하는지 확인할 수 있나요?

예. SQLFlow는 프로시저 간 호출과 열 계보를 함께 보여주는 대화형 호출 그래프를 제공하므로 여러 프로시저로 구성된 ETL 체인을 처음부터 끝까지 탐색할 수 있습니다.

SQL Server 계보 기능을 무료로 사용해 볼 수 있는 방법이 있나요?

예. SQLFlow 클라우드 무료 티어가 있습니다. 브라우저에 T-SQL 코드를 붙여넣으면 열 수준의 데이터 계보도를 볼 수 있습니다. 프리미엄 티어는 더 많은 입력과 API 접근을 위해 월 $49.99달러입니다.

지금 바로 SQL Server 계보를 매핑하세요

가장 복잡한 저장 프로시저를 무료 시각화 도구에 붙여넣거나, 전체 SQL Server 환경을 분석하는 것에 대해 저희에게 문의하십시오.