PostgreSQL 데이터 계보 PostgreSQL 뷰, CTE 및 DML을 통해 데이터가 이동하는 방식을 컬럼 수준에서 보여주는 맵입니다. 즉, 어떤 기본 테이블 컬럼이 각 뷰 또는 보고서 컬럼에 데이터를 제공하고, 어떤 조인, 필터, 형변환 및 집계가 데이터를 변환하는지 나타냅니다. PostgreSQL 카탈로그 자체에서도 객체들이 서로 의존한다는 것을 알려줍니다. pg_depend 뷰가 테이블을 참조한다는 기록은 있지만, 열이 어떻게 변환되는지에 대한 정보는 없습니다. 진정한 계보를 구축하려면 SQL 자체를 분석해야 하며, 바로 그것이 이 작업의 핵심입니다. Gudu SQLFlow 일반적인 ANSI 문법 대신 PostgreSQL 방언 파서를 사용합니다.
30초 안에 시도해 보세요: PostgreSQL 쿼리 또는 뷰 정의를 여기에 붙여넣으세요. 무료 SQLFlow 계보 시각화 도구 열 수준의 상호 작용 가능한 계보도를 얻을 수 있습니다. 클라우드 버전은 무료 티어를 제공합니다.
pg_depend가 계보 관련 질문에 답할 수 없는 이유는 무엇인가요?
PostgreSQL은 세부적인 종속성 기록을 유지합니다. pg_depend 그리고 pg_rewrite 그것을 알고 있다 v_지역_수익 참조하는 동안에는 삭제할 수 없습니다. v_orders_enriched, 그리고 정보 스키마 뷰는 해당 뷰가 어떤 테이블에 접근하는지 보여줍니다. 이는 객체 수준의 종속성 추적 기능으로, 다음과 같은 목적으로 개발되었습니다. 드롭... 캐스케이드 혈통이 아닌 안전.
카탈로그에서 알 수 없는 것: 어떤 특정 열이 어떤 방식으로 공급되는지 수익, 이든 양 도중에 주조되었거나 집합되었는지 여부 상태 결과에 나타나지 않으면서 결과를 필터링하는 방법과 뷰가 3~4단계 깊이로 쌓일 때 전체 경로가 어떻게 되는지 알아야 합니다. "이 숫자는 어디에서 온 것인가?" 또는 "이 열을 삭제하면 어떤 문제가 발생하는가?"와 같은 질문에 답하려면 뷰 정의에 저장된 SQL 텍스트에서 변환 로직을 재구성해야 합니다. 이는 카탈로그 쿼리가 아니라 구문 분석 문제입니다.
SQLFlow는 PostgreSQL 데이터 계보를 어떻게 구축할까요?
- SQL을 수집합니다. 쿼리를 붙여넣고, 스크립트 파일을 업로드하고, JDBC를 통해 PostgreSQL에 연결하여 DDL과 뷰 정의를 직접 가져오거나, dbt-on-Postgres 프로젝트를 위해 dbt 매니페스트를 가져올 수 있습니다.
- PostgreSQL 전용 문법을 사용하여 구문 분석합니다. SQLFlow는 다음을 기반으로 구축되었습니다. 일반 SQL 파서(GSP), a commercial SQL compiler front-end developed since the mid-2000s and validated against roughly 13,600 per-dialect test fixtures. Its PostgreSQL parser handles the dialect’s own constructs — writable CTEs,
충돌 시 삽입..., 그::형변환 연산자, 상속 및 파티셔닝 DDL — 그리고 그 의미론적 해석기가 확장됩니다선택하다 *이 기능은 CTE, 하위 쿼리 및 뷰 정의를 통해 열 참조를 해결한 다음 열 단위로 소스-대상 관계를 추출합니다. - 시각화하고 내보내기. 출력 결과는 모든 열에서 상위 및 하위 경로를 추적할 수 있는 대화형 다이어그램이며, JSON, CSV 또는 PNG 형식으로 내보내거나 REST API를 통해 쿼리할 수 있습니다.
PostgreSQL은 SQLFlow에서 파서를 제공하는 39개 방언 중 하나입니다. 여기에는 Greenplum, Amazon Redshift, EDB Postgres와 같은 Postgres 계열 엔진이 포함되며, 각 엔진은 핵심 PostgreSQL과 계보 엔진에 중요한 방식으로 차이가 있기 때문에 각각 고유한 파서를 제공합니다. 전체 방법론은 다음에서 다룹니다. SQL 데이터 계보 도구 개요.
중첩된 뷰 체인을 기본 테이블까지 추적하기
PostgreSQL에서 로직이 누적되는 기본 방식은 뷰-온-뷰 스택이며, 수동 계보 추적이 한계에 도달하는 지점이기도 합니다. 2단계 체인을 예로 들어 보겠습니다.
CREATE VIEW v_orders_enriched AS SELECT o.order_id, o.customer_id, o.amount::numeric(12,2) AS amount, c.region FROM orders o JOIN customers c ON c.customer_id = o.customer_id WHERE o.status = 'shipped'; CREATE VIEW v_region_revenue AS SELECT region, SUM(amount) AS revenue FROM v_orders_enriched GROUP BY region;
SQLFlow에 문의하세요 v_지역_수익.수익 다음에서 유래하며 전체 체인을 해결합니다. 수익 ~이다 합집합() ~ 위에 v_orders_enriched.amount이것은 숫자(12,2) 출연진 주문 금액이 다이어그램은 기본 테이블, 중간 보기, 집계 등 각 단계를 평면적인 추측이 아닌, 자세히 살펴볼 수 있는 경로로 보여줍니다. 또한, 단순한 해석으로는 놓칠 수 있는 부분을 명확히 드러냅니다. 주문 상태 출력 결과에는 전혀 나타나지 않지만 모든 수익 수치는 이에 따라 달라집니다. o.status가 'shipped'인 경우 필터. SQLFlow는 이를 간접 계보로 기록합니다(자세한 내용은 아래 참조).
어떤 깊이에서도 동일한 해상도가 적용됩니다. 뷰가 5단계 깊이로 쌓이고 그중 절반이 이 해상도를 사용하는 실제 스키마에서도 마찬가지입니다. 선택하다 *SQLFlow는 JDBC를 통해 가져온 실제 테이블 정의를 기준으로 별표를 확장하므로 SQL 텍스트에 열 이름이 없더라도 열별 정확한 계보를 유지합니다.
일반 파서를 무력화시키는 PostgreSQL 구문
PostgreSQL을 "대략 ANSI SQL"로 취급하는 도구는 데이터 흐름이 가장 많은 구문에서 정확히 오류를 발생시킵니다. 이러한 구문은 모두 SQLFlow의 PostgreSQL 방언 파서에서 처리됩니다.
| 건설하다 | 혈통에 중요한 이유 |
|---|---|
쓰기 가능한 CTE(... 삽입/업데이트/삭제 ... 반환) | 단일 명령문으로 읽기와 쓰기 작업을 모두 수행합니다. CTE의 DML 출력은 외부 쿼리에 전달됩니다. 데이터 계보는 수정된 테이블과 연결되어야 합니다. 돌아오는 중 여러 열로 표시하고 최종 목표를 하나의 그래프로 나타냅니다. |
충돌 발생 시 업데이트... 삽입 | 업서트(Upsert)는 데이터를 두 경로, 즉 삽입 경로와 업데이트 경로를 통해 전달합니다. 제외된 가상 테이블입니다. 둘 다 대상 테이블로의 실제 열 흐름입니다. |
| 테이블 상속 및 선언적 파티셔닝 | 부모 테이블에 대한 쿼리는 암묵적으로 자식 테이블을 읽습니다. SQLFlow는 상속 및 파티셔닝 DDL을 구문 분석하여 파티션별로 분할되지 않고 부모 수준에서 올바르게 계보가 연결되도록 합니다. |
| 연결된 CTE 및 중첩 뷰 | 컬럼 참조는 이전 CTE를 참조하는 CTE를 포함하여 모든 중간 계층을 거쳐 물리적 기본 테이블까지 해결되어야 합니다. |
:: 캐스팅 및 표현 칼럼 | 모든 출력 열은 적용된 함수와 형변환을 통해 해당 소스에 매핑되므로, 단순히 출력 열뿐만 아니라 소스 열의 결과도 확인할 수 있습니다. 어디 어떤 값이 나왔지만 그것에 무슨 일이 일어났나요?. |
직접 혈통 vs. 간접 혈통: 놓칠 수 있는 필터 열
SQLFlow는 구별합니다 직계 혈통 — 출력으로 물리적으로 전달되는 열 값 — 에서 간접적 (영향) 계보 — 사용된 열 어디 조항, 가입하다 조건 및 그룹화 기준 결과에 직접적으로 도달하지 않고 결과를 형성하는 키입니다. 위 예시에서, 주문 금액 직계 혈통입니다 수익; 주문 상태 그리고 둘 다 고객 ID 조인 키는 간접적입니다.
다이어그램에서 이 구분은 활성화/비활성화할 수 있으며, 실제 결정에 영향을 미칩니다. 도메인을 변경하려는 경우 주문 상태직접 계보만 보여주는 방식은 그 어떤 것도 의존하지 않는다고 말하지만, 간접 계보는 필터링된 모든 수익 보고서를 보여줍니다. 대부분의 계보 도구는 이러한 관계 유형을 전혀 모델링하지 않습니다.
단일 쿼리부터 전체 PostgreSQL 환경까지
복잡한 뷰 체인 하나 정도의 작업에는 SQLFlow Cloud 무료 티어가 충분합니다. 붙여넣기, 분석, 드릴다운 기능만 있으면 되죠. 그 이상은 다릅니다.
- 전체 데이터베이스 스캔: JDBC를 통해 연결하거나 Grabit 메타데이터 추출기를 사용하여 모든 뷰와 객체 정의를 가져와 영구적인 데이터 계보 저장소를 구축할 수 있습니다. 엔터프라이즈 환경에서는 100개 이상의 데이터베이스와 백만 개 이상의 열을 포함하는 대규모 환경을 일괄 스캔하고, 필요에 따라 증분 재스캔을 수행합니다.
- 카탈로그 통합: 내보내기 어댑터는 열 수준의 계보 정보를 DataHub, Microsoft Purview 및 OpenMetadata로 푸시하므로 SQLFlow는 이미 실행 중인 카탈로그의 계보 엔진 역할을 할 수 있습니다.
- 공기층이 분리된 환경: 온프레미스 SQLFlow Docker 또는 Kubernetes 환경에서 네트워크 내에서 실행되며, 월 $500 또는 데이터베이스 유형별 일회성 $4,800의 요금이 부과됩니다. 최대 두 대의 서버에 설치 가능하며, SQL 텍스트는 인프라 외부로 유출되지 않습니다.
- 설계 단계부터 개인정보 보호를 고려하세요: SQLFlow는 SQL 코드와 스키마 메타데이터에 대한 정적 분석만 수행합니다. 테이블의 행은 절대 읽지 않습니다.
버전 8.2.3부터는 결과 그래프를 일반적인 영어로 쿼리할 수도 있습니다. 즉, "어떤 뷰가 다음에 의존하는지"를 확인할 수 있습니다. 주문 금액답변의 모든 표와 열은 분석된 계보와 대조하여 유효성을 검사한 후에 표시됩니다.
오픈소스 PostgreSQL 데이터 계보 도구는 어떻습니까?
오픈소스 파서(예: ...) sqllineage 그리고 sqlglot 개별 쿼리에서 테이블 수준 및 기본 열 수준의 데이터 계보를 추출하는 데는 정말 탁월하며, 몇 개의 깔끔한 SELECT 문에는 그것만으로도 충분할 수 있습니다. 하지만 실제 운영 환경의 PostgreSQL에서는 이러한 한계가 드러납니다. 선택하다 * 뷰 체인을 통해 작업하려면 실시간 스키마 메타데이터가 필요합니다. 쓰기 가능한 CTE와 갈등에 관하여 업서트(upsert)에는 정확한 방언 문법이 필요합니다. 필터와 조인 키를 통한 간접적인 계보는 일반적으로 모델링되지 않으며, 계보를 추출하는 것과 수천 개의 객체에 걸쳐 이를 시각화, 저장 및 비교하는 것은 다릅니다. 평가할 때는 가장 깊은 뷰 스택과 가장 복잡한 업서트를 모두 실행하고 그래프를 비교해 보세요.
여러 엔진을 혼합해서 사용하는 경우에도 동일한 파서 제품군이 동일한 출력 형식으로 모든 엔진을 처리합니다. 자세한 내용은 관련 페이지를 참조하세요. MySQL 데이터 계보, 레드시프트 데이터 계보, 그리고 그린플럼 데이터 계보또는 데이터 계보 지식 기반 개념에 관해서입니다.
자주 묻는 질문
PostgreSQL에는 데이터 계보 추적 기능이 내장되어 있나요?
아니요. PostgreSQL은 객체 수준의 종속성을 추적합니다. pg_depend — 어떤 뷰가 어떤 테이블을 참조하는지 — 무결성 유지를 위해 드롭... 캐스케이드컬럼이 어떻게 변환되었는지는 기록하지 않습니다. 컬럼 수준의 계보는 뷰 정의 및 스크립트의 SQL을 파싱하여 파악해야 하며, SQLFlow가 바로 이 작업을 수행합니다.
SQLFlow가 내 테이블 데이터에 접근해야 하나요?
아니요. SQLFlow는 SQL 코드에 대한 정적 분석을 수행하고, 선택적으로 스키마 메타데이터(테이블 및 열 정의)를 읽어 참조를 해결합니다. 행을 직접 읽는 경우는 없습니다. 온프레미스 버전을 사용하는 경우 SQL 텍스트조차도 네트워크 내에 유지됩니다.
SQLFlow는 쓰기 가능한 CTE와 충돌 시 업서트(upsert)를 통해 코드 계보를 추적할 수 있습니까?
예. PostgreSQL 방언 파서는 이를 처리합니다. ... 삽입/업데이트/삭제 ... 반환 진술 및 충돌 발생 시 업데이트... 삽입삽입 및 업데이트 열 흐름을 대상 테이블에 매핑합니다.
분할된 테이블과 상속된 테이블은 어떻게 처리되나요?
SQLFlow는 PostgreSQL의 상속 및 선언적 파티셔닝 DDL을 구문 분석하므로, 부모 테이블에 대한 쿼리의 계보는 파티션별로 분할되지 않고 부모 수준에서 연결됩니다.
PostgreSQL 데이터베이스 전체의 쿼리 계보를 어떻게 확인할 수 있나요? 특정 쿼리 하나에 대한 계보가 아니라요.
SQLFlow를 JDBC를 통해 데이터베이스에 연결하거나 Grabit 인제스터를 사용하여 메타데이터를 추출하세요. SQLFlow는 모든 DDL과 뷰 정의를 가져와 함께 분석하고, 100개 이상의 데이터베이스 규모에서도 확장 가능한 영구적이고 점진적으로 업데이트되는 계보 저장소를 유지 관리합니다.
SQLFlow 가격은 얼마인가요?
SQLFlow Cloud는 무료로 시작하며, 프리미엄 계정은 월 $49.99입니다. SQLFlow On-Premise는 선택한 데이터베이스 유형당 월 $500 또는 일회성 $4,800이며, 추가 데이터베이스 유형당 월 $100 또는 일회성 $1,000이 추가됩니다.
지금 바로 PostgreSQL 데이터베이스 계보를 추적해 보세요.
뷰 정의를 무료 시각화 도구에 붙여넣고 열 수준 그래프를 확인하거나, 전체 PostgreSQL 환경을 분석하는 방법에 대해 문의해 주세요.