다음을 통해 공유


Unity 카탈로그를 사용하여 데이터 계보 캡처 및 보기

이 문서에서는 카탈로그 탐색기, 데이터 계보 시스템 테이블, REST API를 사용하여 데이터 계보를 캡처하고 시각화하는 방법을 설명합니다.

Unity 카탈로그를 사용하여 Azure Databricks에서 실행되는 쿼리 간에 런타임 데이터 계보를 캡처할 수 있습니다. 계보는 모든 언어에 대해 지원되며 열 수준까지 캡처됩니다. 계보 데이터에는 쿼리와 관련된 Notebook, 작업, 대시보드가 포함됩니다. 계보는 카탈로그 탐색기에서 거의 실시간으로 시각화할 수 있으며 계보 시스템 테이블 및 Databricks REST API를 사용하여 프로그래밍 방식으로 검색할 수 있습니다.

계보는 Unity 카탈로그 메타스토어에 연결된 모든 작업 영역에서 집계됩니다. 즉, 한 작업 영역에서 캡처된 계보는 해당 메타스토어를 공유하는 다른 작업 영역에 표시됩니다. 계보 데이터를 보려면 사용자에게 올바른 권한이 있어야 합니다. 계보 데이터는 1년 동안 유지됩니다.

다음 이미지는 샘플 계보 그래프입니다. 특정 데이터 계보 기능 및 예제는 이 문서의 뒷부분에 설명되어 있습니다.

계보 개요

기계 학습 모델의 계보를 추적하는 방법에 대한 자세한 내용은 Unity 카탈로그에서 모델의 데이터 계보 추적을 참조하세요.

요구 사항

Unity 카탈로그를 사용하여 데이터 계보를 캡처하려면 다음이 필요합니다.

  • 작업 영역에 Unity 카탈로그가 활성화되어 있어야 합니다.

  • Unity 카탈로그 메타스토어에 테이블을 등록해야 합니다.

  • 쿼리는 Spark DataFrame(예: DataFrame을 반환하는 Spark SQL 함수) 또는 Databricks SQL 인터페이스를 사용해야 합니다. Databricks SQL 및 PySpark 쿼리의 예제는 예제를 참조하세요.

  • 테이블 또는 보기의 계보를 보려면 사용자에게 테이블 또는 보기의 부모 카탈로그에 대한 BROWSE 권한 이상이 있어야 합니다. 부모 카탈로그는 작업 영역에서도 액세스할 수 있어야 합니다. 특정 작업 영역에 대한 카탈로그 액세스 제한을 참조하세요.

  • Notebook, 작업 또는 대시보드에 대한 계보 정보를 보려면 작업 영역의 액세스 제어 설정에 정의된 대로 사용자에게 이러한 개체에 대한 권한이 있어야 합니다. 계보 사용 권한을 참조하세요.

  • Unity 카탈로그 사용 파이프라인에 대한 계보를 보려면 파이프라인에 대한 CAN_VIEW 권한이 있어야 합니다.

  • 델타 테이블 간의 스트리밍 계보 추적에는 Databricks Runtime 11.3 LTS 이상이 필요합니다.

  • Delta Live Tables 워크로드에 대한 열 계보 추적에는 Databricks Runtime 13.3 LTS 이상이 필요합니다.

  • Azure Databricks 컨트롤 플레인의 이벤트 허브 엔드포인트에 연결할 수 있도록 아웃바운드 방화벽 규칙을 업데이트해야 할 수 있습니다. 일반적으로 Azure Databricks 작업 영역이 사용자의 자체 VNet(VNet 주입이라고도 함)에 배포되는 경우에 적용됩니다. 작업 영역 영역에 대한 Event Hub 엔드포인트를 얻으려면 메타스토어, 아티팩트 Blob Storage, 시스템 테이블 스토리지, 로그 Blob Storage 및 이벤트 허브 엔드포인트 IP 주소를 참조하세요. Azure Databricks용 UDR(사용자 정의 경로) 설정에 대한 자세한 내용은 Azure Databricks용 사용자 정의 경로 설정을 참조하세요.

참고 항목

  • 다음 예제에서는 카탈로그 이름 lineage_data 및 스키마 이름 lineagedemo를 사용합니다. 다른 카탈로그와 스키마를 사용하려면 예제에 사용된 이름을 변경합니다.

  • 이 예제를 완료하려면 스키마에 대한 CREATEUSE SCHEMA 권한이 있어야 합니다. 메타스토어 관리자, 카탈로그 소유자 또는 스키마 소유자는 이러한 권한을 부여할 수 있습니다. 예를 들어 그룹의 모든 사용자에게 lineage_data 카탈로그의 lineagedemo 스키마에 테이블을 만들 수 있는 'data_engineers' 권한을 부여하려면 위의 권한 또는 역할 중 하나를 보유한 사용자가 다음 쿼리를 실행할 수 있습니다.

    CREATE SCHEMA lineage_data.lineagedemo;
    GRANT USE SCHEMA, CREATE on SCHEMA lineage_data.lineagedemo to `data_engineers`;
    

계보 캡처 및 탐색

계보 데이터를 캡처하려면 다음을 수행합니다.

  1. Azure Databricks 방문 페이지로 이동하여 사이드바에서 새 아이콘 새로 만들기를 클릭하고 메뉴에서 Notebook을 선택합니다.

  2. Notebook의 이름을 입력하고 기본 언어SQL을 선택합니다.

  3. 클러스터에서 Unity 카탈로그에 액세스할 수 있는 클러스터를 선택합니다.

  4. 만들기를 클릭합니다.

  5. 첫 번째 Notebook 셀에 다음 쿼리를 입력합니다.

    CREATE TABLE IF NOT EXISTS
      lineage_data.lineagedemo.menu (
        recipe_id INT,
        app string,
        main string,
        dessert string
      );
    
    INSERT INTO lineage_data.lineagedemo.menu
        (recipe_id, app, main, dessert)
    VALUES
        (1,"Ceviche", "Tacos", "Flan"),
        (2,"Tomato Soup", "Souffle", "Creme Brulee"),
        (3,"Chips","Grilled Cheese","Cheesecake");
    
    CREATE TABLE
      lineage_data.lineagedemo.dinner
    AS SELECT
      recipe_id, concat(app," + ", main," + ",dessert)
    AS
      full_menu
    FROM
      lineage_data.lineagedemo.menu
    
  6. 쿼리를 실행하려면 셀을 클릭하고 shift+enter 키를 누르거나 실행 메뉴을 클릭하고 셀 실행을 선택합니다.

카탈로그 탐색기를 사용하여 이러한 쿼리에서 생성된 계보를 보려면 다음을 수행합니다.

  1. Azure Databricks 작업 영역의 위쪽 표시줄에 있는 검색창에서 lineage_data.lineagedemo.dinner 테이블을 검색하고 선택합니다.

  2. 계보 탭을 선택합니다. 계보 패널이 나타나고 관련 테이블(이 예제에서는 menu 테이블)이 표시됩니다.

  3. 데이터 계보의 대화형 그래프를 보려면 계보 그래프 보기를 클릭합니다. 기본적으로 한 수준이 그래프에 표시됩니다. 노드의 더하기 기호 아이콘 아이콘을 클릭하여 사용 가능한 경우 더 많은 연결을 표시할 수 있습니다.

  4. 계보 그래프에서 노드를 연결하는 화살표를 클릭하여 계보 연결 패널을 엽니다. 계보 연결 패널에는 원본 및 대상 테이블, Notebook, 작업을 포함하여 연결에 대한 세부 정보가 표시됩니다.

    계보 그래프

  5. dinner 테이블과 연결된 Notebook을 표시하려면 계보 연결 패널에서 Notebook을 선택하거나 계보 그래프를 닫고 Notebook을 클릭합니다. 새 탭에서 Notebook을 열려면 Notebook 이름을 클릭합니다.

  6. 열 수준 계보를 보려면 그래프의 열을 클릭하여 관련 열에 대한 링크를 표시합니다. 예를 들어 'full_menu' 열을 클릭하면 열이 파생된 업스트림 열이 표시됩니다.

    전체 메뉴 열 계보

다른 언어(예: Python)를 사용하여 계보를 보려면 다음을 수행합니다.

  1. 이전에 만든 Notebook을 열고 새 셀을 만들고 다음 Python 코드를 입력합니다.

    %python
    from pyspark.sql.functions import rand, round
    df = spark.range(3).withColumn("price", round(10*rand(seed=42),2)).withColumnRenamed("id","recipe_id")
    
    df.write.mode("overwrite").saveAsTable("lineage_data.lineagedemo.price")
    
    dinner = spark.read.table("lineage_data.lineagedemo.dinner")
    price = spark.read.table("lineage_data.lineagedemo.price")
    
    dinner_price = dinner.join(price, on="recipe_id")
    dinner_price.write.mode("overwrite").saveAsTable("lineage_data.lineagedemo.dinner_price")
    
  2. 셀을 클릭하고 shift+enter 키를 누르거나 실행 메뉴을 클릭하고 셀 실행을 선택하여 셀을 실행합니다.

  3. Azure Databricks 작업 영역의 위쪽 표시줄에 있는 검색창에서 lineage_data.lineagedemo.price 테이블을 검색하고 선택합니다.

  4. 계보 탭으로 이동하여 계보 그래프 보기를 클릭합니다. 더하기 기호 아이콘 아이콘을 클릭하여 쿼리에서 생성된 데이터 계보를 탐색합니다.

    확장된 계보 그래프

  5. 계보 그래프에서 노드를 연결하는 화살표를 클릭하여 계보 연결 패널을 엽니다. 계보 연결 패널에는 원본 및 대상 테이블, Notebook, 작업을 포함하여 연결에 대한 세부 정보가 표시됩니다.

워크플로 계보 캡처 및 보기

계보는 Unity 카탈로그를 읽거나 쓰는 모든 워크플로에 대해서도 캡처됩니다. Azure Databricks 워크플로에 대한 계보를 보려면 다음을 수행합니다.

  1. 사이드바에서 새 아이콘 새로 만들기를 클릭하고, 메뉴에서 Notebook을 선택합니다.

  2. Notebook의 이름을 입력하고 기본 언어SQL을 선택합니다.

  3. 만들기를 클릭합니다.

  4. 첫 번째 Notebook 셀에 다음 쿼리를 입력합니다.

    SELECT * FROM lineage_data.lineagedemo.menu
    
  5. 위쪽 표시줄에서 일정을 클릭합니다. 일정 대화 상자에서 수동을 선택하고 Unity 카탈로그 액세스 권한이 있는 클러스터를 선택한 다음, 만들기를 클릭합니다.

  6. 지금 실행을 클릭합니다.

  7. Azure Databricks 작업 영역의 위쪽 표시줄에 있는 검색창에서 lineage_data.lineagedemo.menu 테이블을 검색하고 선택합니다.

  8. 계보 탭에서 워크플로를 클릭한 다음, 다운스트림 탭을 선택합니다. 작업 이름은 작업 이름 아래에 menu 테이블의 소비자로 표시됩니다.

대시보드 계보 캡처 및 보기

대시보드를 만들고 해당 데이터 계보를 보려면 다음을 수행합니다.

  1. Azure Databricks 방문 페이지로 이동하고 사이드바에서 카탈로그를 클릭하여 카탈로그 탐색기를 엽니다.

  2. 카탈로그 이름을 클릭하고 lineagedemo를 클릭한 다음, menu 테이블을 선택합니다. 위쪽 표시줄의 검색창을 사용하여 menu 테이블을 검색할 수도 있습니다.

  3. 대시보드에서 열기를 클릭합니다.

  4. 대시보드에 추가할 열을 선택하고 만들기를 클릭합니다.

  5. 대시보드를 게시합니다.

    게시된 대시보드만 데이터 계보에서 추적됩니다.

  6. 위쪽 표시줄에 있는 검색창에서 lineage_data.lineagedemo.menu 테이블을 검색하고 선택합니다.

  7. 계보 탭에서 대시보드를 클릭합니다. 대시보드는 대시보드 이름 아래에 메뉴 테이블의 소비자로 표시됩니다.

계보 사용 권한

계보 그래프는 Unity 카탈로그와 동일한 사용 권한 모델을 공유합니다. 테이블에 대한 BROWSE 또는 SELECT 권한이 없는 사용자는 계보를 탐색할 수 없습니다. 또한 사용자는 볼 수 있는 권한이 있는 Notebook, 작업, 대시보드만 볼 수 있습니다. 예를 들어 관리자가 아닌 사용자 userA에 대해 다음 명령을 실행하는 경우:

GRANT USE SCHEMA on lineage_data.lineagedemo to `userA@company.com`;
GRANT SELECT on lineage_data.lineagedemo.menu to `userA@company.com`;

userAlineage_data.lineagedemo.menu 테이블에 대한 계보 그래프를 볼 때 menu 테이블이 표시됩니다. 다운스트림 lineage_data.lineagedemo.dinner 테이블과 같은 관련 테이블에 대한 정보를 볼 수 없습니다. dinner 테이블은 userA에 대한 표시에서 masked 노드로 표시되며 userA는 액세스 권한이 없는 테이블에서 다운스트림 테이블을 표시하도록 그래프를 확장할 수 없습니다.

관리자가 아닌 사용자 userB에게 BROWSE 권한을 부여하려면 다음 명령을 실행합니다.

GRANT BROWSE on lineage_data to `userA@company.com`;

userB는 이제 lineage_data 스키마의 모든 테이블에 대한 계보 그래프를 볼 수 있습니다.

Unity 카탈로그에서 보안 개체에 대한 액세스를 관리하는 방법은 Unity 카탈로그에서 권한 관리를 참조하세요. Notebook, 작업, 대시보드와 같은 작업 영역 개체에 대한 액세스를 관리하는 방법은 액세스 제어 목록을 참조하세요.

계보 데이터 삭제

Warning

다음 지침은 Unity 카탈로그에 저장된 모든 개체를 삭제합니다. 필요한 경우에만 다음 지침을 사용합니다. 예를 들어 규정 준수 요구 사항을 충족하기 위해 사용합니다.

계보 데이터를 삭제하려면 Unity 카탈로그 개체를 관리하는 메타스토어를 삭제해야 합니다. 메타스토어 삭제에 대한 자세한 내용은 메타스토어 삭제를 참조하세요. 데이터는 90일 이내에 삭제됩니다.

시스템 테이블을 사용하여 계보 데이터 쿼리

계보 시스템 테이블을 사용하여 계보 데이터를 프로그래밍 방식으로 쿼리할 수 있습니다. 자세한 지침은 시스템 테이블을 사용하여 사용량 모니터링계보 시스템 테이블 참조를 참조하세요.

작업 영역이 계보 시스템 테이블을 지원하지 않는 지역에 있는 경우 데이터 계보 REST API를 사용하여 계보 데이터를 프로그래밍 방식으로 검색할 수도 있습니다.

데이터 계보 REST API를 사용하여 계보 검색

데이터 계보 API를 사용하면 테이블 및 열 계보를 검색할 수 있습니다. 그러나 작업 영역이 계보 시스템 테이블을 지원하는 지역에 있는 경우 REST API 대신 시스템 테이블 쿼리를 사용해야 합니다. 시스템 테이블은 계보 데이터를 프로그래밍 방식으로 검색하는 데 더 나은 옵션입니다. 대부분의 지역은 계보 시스템 테이블을 지원합니다.

Important

Databricks REST API에 액세스하려면 인증해야 합니다.

테이블 계보 검색

다음은 dinner 테이블에 대한 계보 데이터를 검색하는 예제입니다.

요청

curl --netrc -X GET \
-H 'Content-Type: application/json' \
https://<workspace-instance>/api/2.0/lineage-tracking/table-lineage \
-d '{"table_name": "lineage_data.lineagedemo.dinner", "include_entity_lineage": true}'

<workspace-instance>를 바꿉니다.

다음 예제에서는 .netrc 파일을 사용합니다.

응답

{
  "upstreams": [
    {
      "tableInfo": {
        "name": "menu",
        "catalog_name": "lineage_data",
        "schema_name": "lineagedemo",
        "table_type": "TABLE"
      },
      "notebookInfos": [
        {
          "workspace_id": 4169371664718798,
          "notebook_id": 1111169262439324
        }
      ]
    }
  ],
  "downstreams": [
    {
      "notebookInfos": [
        {
          "workspace_id": 4169371664718798,
          "notebook_id": 1111169262439324
        }
      ]
    },
    {
      "tableInfo": {
        "name": "dinner_price",
        "catalog_name": "lineage_data",
        "schema_name": "lineagedemo",
        "table_type": "TABLE"
      },
      "notebookInfos": [
        {
          "workspace_id": 4169371664718798,
          "notebook_id": 1111169262439324
        }
      ]
    }
  ]
}

열 계보 검색

다음은 dinner 테이블에 대한 열 데이터를 검색하는 예제입니다.

요청

curl --netrc -X GET \
-H 'Content-Type: application/json' \
https://<workspace-instance>/api/2.0/lineage-tracking/column-lineage \
-d '{"table_name": "lineage_data.lineagedemo.dinner", "column_name": "dessert"}'

<workspace-instance>를 바꿉니다.

다음 예제에서는 .netrc 파일을 사용합니다.

응답

{
  "upstream_cols": [
    {
      "name": "dessert",
      "catalog_name": "lineage_data",
      "schema_name": "lineagedemo",
      "table_name": "menu",
      "table_type": "TABLE"
    },
    {
      "name": "main",
      "catalog_name": "lineage_data",
      "schema_name": "lineagedemo",
      "table_name": "menu",
      "table_type": "TABLE"
    },
    {
      "name": "app",
      "catalog_name": "lineage_data",
      "schema_name": "lineagedemo",
      "table_name": "menu",
      "table_type": "TABLE"
    }
  ],
  "downstream_cols": [
    {
      "name": "full_menu",
      "catalog_name": "lineage_data",
      "schema_name": "lineagedemo",
      "table_name": "dinner_price",
      "table_type": "TABLE"
    }
  ]
}

제한 사항

  • 계보는 1년 롤링 창에서 계산되기 때문에 1년 이상 전에 수집된 계보는 표시되지 않습니다. 예를 들어, 작업 또는 쿼리가 테이블 A에서 데이터를 읽고 테이블 B에 쓰는 경우 테이블 A와 테이블 B 사이의 링크는 1년 동안만 표시됩니다. 1년 내에 시간 프레임별로 계보 데이터를 필터링할 수 있습니다.
  • 계보를 볼 때 작업 API runs submit 요청을 사용하는 작업을 사용할 수 없습니다. runs submit 요청을 사용할 때 테이블 및 열 수준 계보가 여전히 캡처되지만 실행에 대한 링크는 캡처되지 않습니다.
  • Unity 카탈로그는 가능한 한 열 수준까지 계보를 캡처합니다. 그러나 열 수준 계보를 캡처할 수 없는 경우가 있습니다.
  • 열 계보는 원본과 대상이 모두 테이블 이름으로 참조되는 경우에만 지원됩니다(예: select * from <catalog>.<schema>.<table>). 원본 또는 대상의 주소가 경로로 지정되면 열 계보를 캡처할 수 없습니다(예: select * from delta."s3://<bucket>/<path>").
  • 테이블 또는 보기 이름이 바뀌면 이름이 바뀐 테이블 또는 보기에 대한 계보가 캡처되지 않습니다.
  • 스키마 또는 카탈로그의 이름이 바뀌면 이름이 바뀐 카탈로그 또는 스키마 아래의 테이블 및 뷰에 대한 계보가 캡처되지 않습니다.
  • Spark SQL 데이터 세트 검사점을 사용하는 경우 계보가 캡처되지 않습니다.
  • 대부분의 경우 Unity 카탈로그는 Delta Live 테이블 파이프라인에서 계보를 캡처합니다. 그러나 파이프라인이 APPLY CHANGES API 또는 TEMPORARY 테이블을 사용하는 경우와 같이 일부 경우에는 전체 계보 적용 범위를 보장할 수 없습니다.
  • 계보는 스택 함수를 캡처하지 않습니다.
  • 전역 임시 보기는 계보로 캡처되지 않습니다.
  • system.information_schema 아래 테이블은 계보로 캡처되지 않습니다.