Udostępnij za pośrednictwem


Przechwytywanie i wyświetlanie pochodzenia danych przy użyciu wykazu aparatu Unity

W tym artykule opisano sposób przechwytywania i wizualizowania pochodzenia danych przy użyciu Eksploratora wykazu, tabel systemu pochodzenia danych i interfejsu API REST.

Wykaz aparatu Unity umożliwia przechwytywanie pochodzenia danych środowiska uruchomieniowego między zapytaniami uruchamianymi w usłudze Azure Databricks. Pochodzenie jest obsługiwane dla wszystkich języków i jest przechwytywane na poziomie kolumny. Dane pochodzenia obejmują notesy, przepływy pracy i pulpity nawigacyjne związane z zapytaniem. Pochodzenie można wizualizować w Eksploratorze wykazu niemal w czasie rzeczywistym i pobierać programowo przy użyciu tabel systemowych pochodzenia i interfejsu API REST usługi Databricks.

Pochodzenie jest agregowane we wszystkich obszarach roboczych dołączonych do magazynu metadanych wykazu aparatu Unity. Oznacza to, że pochodzenie przechwycone w jednym obszarze roboczym jest widoczne w dowolnym innym obszarze roboczym udostępniającym ten magazyn metadanych. Użytkownicy muszą mieć odpowiednie uprawnienia do wyświetlania danych pochodzenia. Dane pochodzenia są przechowywane przez 1 rok.

Aby uzyskać informacje na temat śledzenia pochodzenia modelu uczenia maszynowego, zobacz Track the data lineage of a model in Unity Catalog (Śledzenie pochodzenia danych modelu w wykazie aparatu Unity).

Wymagania

Do przechwytywania pochodzenia danych przy użyciu usługi Unity Catalog wymagane są następujące elementy:

  • Obszar roboczy musi mieć włączony wykaz aparatu Unity.

  • Tabele muszą być zarejestrowane w magazynie metadanych usługi Unity Catalog.

  • Zapytania muszą używać elementu DataFrame platformy Spark (na przykład funkcji Spark SQL, które zwracają element DataFrame) lub interfejsów SQL usługi Databricks. Przykłady zapytań SQL i PySpark usługi Databricks można znaleźć w temacie Przykłady.

  • Aby wyświetlić pochodzenie tabeli lub widoku, użytkownicy muszą mieć co najmniej BROWSE uprawnienia do katalogu nadrzędnego tabeli lub widoku.

  • Aby wyświetlić informacje o pochodzenia notesów, przepływów pracy lub pulpitów nawigacyjnych, użytkownicy muszą mieć uprawnienia do tych obiektów zgodnie z definicją w ustawieniach kontroli dostępu w obszarze roboczym. Zobacz Uprawnienia pochodzenia.

  • Aby wyświetlić pochodzenie potoku obsługującego wykaz aparatu Unity, musisz mieć CAN_VIEW uprawnienia do potoku.

  • Śledzenie pochodzenia kolumn dla obciążeń tabel delta Live Tables wymaga środowiska Databricks Runtime 13.3 LTS lub nowszego.

  • Może być konieczne zaktualizowanie reguł zapory ruchu wychodzącego, aby umożliwić łączność z punktem końcowym usługi Event Hubs na płaszczyźnie sterowania usługi Azure Databricks. Zwykle ma to zastosowanie, jeśli obszar roboczy usługi Azure Databricks jest wdrażany we własnej sieci wirtualnej (nazywanej również iniekcją sieci wirtualnej). Aby uzyskać punkt końcowy usługi Event Hubs dla regionu obszaru roboczego, zobacz Magazyn metadanych, magazyn obiektów blob artefaktów, magazyn tabel systemowych, magazyn obiektów blob dzienników i adresy IP punktów końcowych usługi Event Hubs. Aby uzyskać informacje na temat konfigurowania tras zdefiniowanych przez użytkownika (UDR) dla usługi Azure Databricks, zobacz Ustawienia trasy zdefiniowanej przez użytkownika dla usługi Azure Databricks.

Ograniczenia

  • Przesyłanie strumieniowe między tabelami różnicowymi jest obsługiwane tylko w środowisku Databricks Runtime 11.3 LTS lub nowszym.
  • Ponieważ pochodzenie danych jest obliczane w rocznym oknie kroczącym, dane pochodzenia zebrane ponad rok temu nie są wyświetlane. Jeśli na przykład zadanie lub zapytanie odczytuje dane z tabeli A i zapisuje w tabeli B, połączenie między tabelą A a tabelą B jest wyświetlane tylko przez jeden rok. Dane pochodzenia można filtrować według przedziału czasu w oknie jednego roku.
  • Przepływy pracy korzystające z żądania interfejsu API zadań runs submit są niedostępne podczas wyświetlania pochodzenia danych. Pochodzenie danych na poziomie tabeli i kolumny jest nadal przechwytywane podczas korzystania z runs submit żądania, ale link do przebiegu nie jest przechwytywany.
  • Usługa Unity Catalog przechwytuje w maksymalnym możliwym zakresie pochodzenie na poziomie kolumny. Istnieją jednak przypadki, w których nie można przechwycić pochodzenia na poziomie kolumny.
  • Pochodzenie kolumn jest obsługiwane tylko wtedy, gdy zarówno źródło, jak i element docelowy są przywoływane według nazwy tabeli (przykład: select * from <catalog>.<schema>.<table>). Nie można przechwycić pochodzenia kolumn, jeśli źródło lub obiekt docelowy są adresowane przez ścieżkę (przykład: select * from delta."s3://<bucket>/<path>").
  • Jeśli nazwa tabeli zostanie zmieniona, pochodzenie nie zostanie przechwycone dla tabeli o zmienionej nazwie.
  • Jeśli używasz punktów kontrolnych zestawu danych Spark SQL, pochodzenie nie jest przechwytywane. Zobacz pyspark.sql.DataFrame.checkpoint w dokumentacji platformy Apache Spark.
  • W większości przypadków usługa Unity Catalog przechwytuje pochodzenie z potoków Delta Live Tables. Jednak w niektórych przypadkach nie można zagwarantować całkowitego pokrycia pochodzenia, na przykład gdy potoki używają interfejsu API ZASTOSUJ ZMIANY lub tabel TYMCZASOWYch.

Przykłady

Uwaga

  • W poniższych przykładach użyto nazwy lineage_data katalogu i nazwy lineagedemoschematu . Aby użyć innego wykazu i schematu, zmień nazwy używane w przykładach.

  • Aby ukończyć ten przykład, musisz mieć CREATE uprawnienia i USE SCHEMA w schemacie. Administrator magazynu metadanych, właściciel wykazu lub właściciel schematu może przyznać te uprawnienia. Aby na przykład przyznać wszystkim użytkownikom w grupie uprawnienie "data_engineers" do tworzenia tabel w lineagedemo schemacie w lineage_data wykazie, użytkownik z jednym z powyższych uprawnień lub ról może uruchamiać następujące zapytania:

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

Przechwytywanie i eksplorowanie pochodzenia

Aby przechwycić dane pochodzenia, wykonaj następujące kroki:

  1. Przejdź do strony docelowej usługi Azure Databricks, kliknij pozycję Nowa ikona Nowy na pasku bocznym, a następnie wybierz pozycję Notes z menu.

  2. Wprowadź nazwę notesu i wybierz pozycję SQL w języku domyślnym.

  3. W obszarze Klaster wybierz klaster z dostępem do wykazu aparatu Unity.

  4. Kliknij pozycję Utwórz.

  5. W pierwszej komórce notesu wprowadź następujące zapytania:

    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. Aby uruchomić zapytania, kliknij komórkę i naciśnij shift+enter lub kliknij Menu Uruchamiania i wybierz pozycję Uruchom komórkę.

Aby wyświetlić pochodzenie wygenerowane przez te zapytania przy użyciu Eksploratora wykazu, wykonaj następujące kroki:

  1. W polu Wyszukiwania na górnym pasku obszaru roboczego usługi Azure Databricks wprowadź lineage_data.lineagedemo.dinner i kliknij pozycję Wyszukaj lineage_data.lineagedemo.dinner w usłudze Databricks.

  2. W obszarze Tabele kliknij tabelę dinner .

  3. Wybierz kartę Pochodzenie . Zostanie wyświetlony panel pochodzenia i wyświetli powiązane tabele (na potrzeby tego przykładu menu jest to tabela).

  4. Aby wyświetlić interaktywny wykres pochodzenia danych, kliknij pozycję Zobacz wykres pochodzenia danych. Domyślnie jeden poziom jest wyświetlany na grafie. Możesz kliknąć ikonę Ikona znaku plusa w węźle, aby wyświetlić więcej połączeń, jeśli są dostępne.

  5. Kliknij strzałkę łączącą węzły na wykresie pochodzenia, aby otworzyć panel połączenia pochodzenia. Panel połączenia pochodzenia zawiera szczegółowe informacje o połączeniu, w tym tabele źródłowe i docelowe, notesy i przepływy pracy.

    Wykres pochodzenia

  6. Aby wyświetlić notes skojarzony z dinner tabelą, wybierz notes w panelu połączenia pochodzenia lub zamknij wykres pochodzenia, a następnie kliknij przycisk Notesy. Aby otworzyć notes na nowej karcie, kliknij nazwę notesu.

  7. Aby wyświetlić pochodzenie na poziomie kolumny, kliknij kolumnę na wykresie, aby wyświetlić łącza do powiązanych kolumn. Na przykład kliknięcie kolumny "full_menu" spowoduje wyświetlenie kolumn nadrzędnych, z których pochodzi kolumna:

    Pochodzenie pełnej kolumny menu

Aby zademonstrować tworzenie i wyświetlanie pochodzenia z innym językiem, na przykład w języku Python, wykonaj następujące kroki:

  1. Otwórz utworzony wcześniej notes, utwórz nową komórkę i wprowadź następujący kod w języku 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. Uruchom komórkę, klikając komórkę i naciskając shift+enter lub klikającMenu Uruchamiania i wybierając pozycję Uruchom komórkę.

  3. W polu Wyszukiwania na górnym pasku obszaru roboczego usługi Azure Databricks wprowadź lineage_data.lineagedemo.price i kliknij pozycję Wyszukaj lineage_data.lineagedemo.price w usłudze Databricks.

  4. W obszarze Tabele kliknij tabelę price .

  5. Wybierz kartę Pochodzenie i kliknij pozycję Zobacz wykres pochodzenia. Ikona znaku plusa Kliknij ikony, aby zapoznać się z pochodzeniem danych generowanym przez zapytania SQL i Python.

    Rozszerzony wykres pochodzenia

  6. Kliknij strzałkę łączącą węzły na wykresie pochodzenia, aby otworzyć panel połączenia pochodzenia. Panel połączenia pochodzenia zawiera szczegółowe informacje o połączeniu, w tym tabele źródłowe i docelowe, notesy i przepływy pracy.

Przechwytywanie i wyświetlanie pochodzenia przepływu pracy

Pochodzenie jest również przechwytywane dla dowolnego przepływu pracy, który odczytuje lub zapisuje w wykazie aparatu Unity. Aby zademonstrować pochodzenie przepływu pracy usługi Azure Databricks, wykonaj następujące kroki:

  1. Kliknij pozycję Nowa ikona Nowy na pasku bocznym i wybierz pozycję Notes z menu.

  2. Wprowadź nazwę notesu i wybierz pozycję SQL w języku domyślnym.

  3. Kliknij pozycję Utwórz.

  4. W pierwszej komórce notesu wprowadź następujące zapytanie:

    SELECT * FROM lineage_data.lineagedemo.menu
    
  5. Kliknij pozycję Harmonogram na górnym pasku. W oknie dialogowym harmonogramu wybierz pozycję Ręczne, wybierz klaster z dostępem do katalogu aparatu Unity, a następnie kliknij przycisk Utwórz.

  6. Kliknij przycisk Uruchom teraz.

  7. W polu Wyszukiwania na górnym pasku obszaru roboczego usługi Azure Databricks wprowadź lineage_data.lineagedemo.menu i kliknij pozycję Wyszukaj lineage_data.lineagedemo.menu w usłudze Databricks.

  8. W obszarze Tabele Wyświetl wszystkie tabele kliknij tabelę menu .

  9. Wybierz kartę Pochodzenie , kliknij pozycję Przepływy pracy, a następnie wybierz kartę Podrzędne . Nazwa zadania jest wyświetlana w obszarze Nazwa zadania jako użytkownik menu tabeli.

Przechwytywanie i wyświetlanie pochodzenia pulpitu nawigacyjnego

Aby zademonstrować wyświetlanie pochodzenia pulpitu nawigacyjnego SQL, wykonaj następujące kroki:

  1. Przejdź do strony docelowej usługi Azure Databricks i otwórz Eksploratora wykazu, klikając pozycję Wykaz na pasku bocznym.
  2. Kliknij nazwę wykazu, kliknij pozycję Pochodzenie, a następnie wybierz tabelę menu . Możesz również użyć pola tekstowego Wyszukaj tabele na górnym pasku, aby wyszukać tabelę menu .
  3. Kliknij pozycję Akcje > Utwórz szybki pulpit nawigacyjny.
  4. Wybierz kolumny, które chcesz dodać do pulpitu nawigacyjnego, a następnie kliknij przycisk Utwórz.
  5. W polu Wyszukiwania na górnym pasku obszaru roboczego usługi Azure Databricks wprowadź lineage_data.lineagedemo.menu i kliknij pozycję Wyszukaj lineage_data.lineagedemo.menu w usłudze Databricks.
  6. W obszarze Tabele Wyświetl wszystkie tabele kliknij tabelę menu .
  7. Wybierz kartę Pochodzenie i kliknij pozycję Pulpity nawigacyjne. Nazwa pulpitu nawigacyjnego jest wyświetlana w obszarze Nazwa pulpitu nawigacyjnego jako użytkownik tabeli menu.

Uprawnienia pochodzenia

Wykresy pochodzenia współużytkuje ten sam model uprawnień co katalog aparatu Unity. Jeśli użytkownik nie ma BROWSE uprawnień lub SELECT w tabeli, nie może eksplorować pochodzenia danych. Ponadto użytkownicy mogą wyświetlać tylko notesy, przepływy pracy i pulpity nawigacyjne, do których mają uprawnienia do wyświetlania. Jeśli na przykład uruchomisz następujące polecenia dla użytkownika userAniebędącego administratorem:

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

W przypadku userA wyświetlenia wykresu pochodzenia dla lineage_data.lineagedemo.menu tabeli zostaną wyświetlone tabele menu . Nie będą one mogły wyświetlać informacji o skojarzonych tabelach, takich jak tabela podrzędna lineage_data.lineagedemo.dinner . Tabela dinner jest wyświetlana jako masked węzeł na ekranie do userAelementu i userA nie może rozwinąć grafu w celu ujawnienia tabel podrzędnych z tabel, do których nie mają uprawnień dostępu.

Jeśli uruchomisz następujące polecenie, aby udzielić uprawnienia użytkownikowi BROWSE userBniebędącemu administratorem:

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

userB Teraz można wyświetlić wykres pochodzenia dla dowolnej tabeli w schemacie lineage_data .

Aby uzyskać więcej informacji na temat zarządzania dostępem do zabezpieczanych obiektów w wykazie aparatu Unity, zobacz Zarządzanie uprawnieniami w wykazie aparatu Unity. Aby uzyskać więcej informacji na temat zarządzania dostępem do obiektów obszaru roboczego, takich jak notesy, przepływy pracy i pulpity nawigacyjne, zobacz Listy kontroli dostępu.

Usuwanie danych pochodzenia

Ostrzeżenie

Poniższe instrukcje usuwają wszystkie obiekty przechowywane w wykazie aparatu Unity. Skorzystaj z tych instrukcji tylko w razie potrzeby. Na przykład, aby spełnić wymagania dotyczące zgodności.

Aby usunąć dane pochodzenia, należy usunąć magazyn metadanych zarządzający obiektami wykazu aparatu Unity. Aby uzyskać więcej informacji na temat usuwania magazynu metadanych, zobacz Usuwanie magazynu metadanych. Dane zostaną usunięte w ciągu 90 dni.

Wykonywanie zapytań dotyczących danych pochodzenia przy użyciu tabel systemowych

Tabele systemowe pochodzenia umożliwiają programowe wykonywanie zapytań dotyczących danych pochodzenia. Aby uzyskać szczegółowe instrukcje, zobacz Monitorowanie użycia za pomocą tabel systemowych i odwołania do tabel systemowych pochodzenia.

Jeśli obszar roboczy znajduje się w regionie, który nie obsługuje tabel systemowych pochodzenia, możesz też programowo pobrać dane pochodzenia danych za pomocą interfejsu API REST pochodzenia danych.

Pobieranie pochodzenia przy użyciu interfejsu API REST pochodzenia danych

Interfejs API pochodzenia danych umożliwia pobieranie pochodzenia tabel i kolumn. Jeśli jednak obszar roboczy znajduje się w regionie obsługującym tabele systemowe pochodzenia, należy użyć zapytań tabeli systemowej zamiast interfejsu API REST. Tabele systemowe to lepsza opcja programowego pobierania danych pochodzenia. Większość regionów obsługuje tabele systemowe pochodzenia.

Ważne

Aby uzyskać dostęp do interfejsów API REST, należy uwierzytelnić się.

Pobieranie pochodzenia tabeli

W tym przykładzie dinner są pobierane dane pochodzenia dla tabeli.

Żądanie

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}'

Zastąp element <workspace-instance>.

W tym przykładzie jest używany plik .netrc .

Response

{
  "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
        }
      ]
    }
  ]
}

Pobieranie pochodzenia kolumn

W tym przykładzie dinner są pobierane dane kolumn dla tabeli.

Żądanie

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"}'

Zastąp element <workspace-instance>.

W tym przykładzie jest używany plik .netrc .

Response

{
  "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"
    }
  ]
}