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, zadania 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.

Na poniższej ilustracji przedstawiono przykładowy wykres pochodzenia. Konkretne funkcje pochodzenia danych i przykłady zostały omówione w dalszej części tego artykułu.

Omówienie pochodzenia

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. Wykaz nadrzędny musi być również dostępny z poziomu obszaru roboczego. Zobacz Ograniczanie dostępu katalogu do określonych obszarów roboczych.

  • Aby wyświetlić informacje o pochodzenia notesów, zadań lub pulpitów nawigacyjnych, użytkownicy muszą mieć uprawnienia do tych obiektów zgodnie z definicją ustawień 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 danych przesyłanych strumieniowo między tabelami delty wymaga środowiska Databricks Runtime 11.3 LTS lub nowszego.

  • Śledzenie pochodzenia kolumn dla obciążeń usługi 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.

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:

  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 następujące zapytania za pomocą Eksploratora wykazu:

  1. W polu Wyszukaj na górnym pasku obszaru roboczego usługi Azure Databricks wyszukaj tabelę lineage_data.lineagedemo.dinner i wybierz ją.

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

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

  4. Kliknij strzałkę, która łączy 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 zadania.

    Wykres pochodzenia

  5. 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.

  6. 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 wyświetlić pochodzenie przy użyciu innego języka, na przykład Python:

  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 Wyszukaj na górnym pasku obszaru roboczego usługi Azure Databricks wyszukaj tabelę lineage_data.lineagedemo.price i wybierz ją.

  4. Przejdź do karty Pochodzenie i kliknij pozycję Zobacz wykres pochodzenia. Kliknij ikony, Ikona znaku plusa aby eksplorować pochodzenie danych wygenerowane przez zapytania.

    Rozszerzony wykres pochodzenia

  5. Kliknij strzałkę, która łączy 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 zadania.

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 wyświetlić pochodzenie przepływu pracy usługi Azure Databricks:

  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 Wyszukaj na górnym pasku obszaru roboczego usługi Azure Databricks wyszukaj tabelę lineage_data.lineagedemo.menu i wybierz ją.

  8. Na karcie Pochodzenie kliknij pozycję Przepływy pracy i 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 utworzyć pulpit nawigacyjny i wyświetlić jego pochodzenie danych:

  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 Wyszukaj na górnym pasku, aby wyszukać tabelę menu .

  3. Kliknij pozycję Otwórz na pulpicie nawigacyjnym.

  4. Wybierz kolumny, które chcesz dodać do pulpitu nawigacyjnego, a następnie kliknij przycisk Utwórz.

  5. Publikowanie pulpitu nawigacyjnego.

    Tylko opublikowane pulpity nawigacyjne są śledzone w pochodzenia danych.

  6. W polu Wyszukaj na górnym pasku wyszukaj tabelę lineage_data.lineagedemo.menu i wybierz ją.

  7. Na karcie Pochodzenie kliknij pozycję Pulpity nawigacyjne. Pulpit nawigacyjny jest wyświetlany 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, zadania 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, zadania 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"
    }
  ]
}

Ograniczenia

  • Ponieważ pochodzenie jest obliczane w rocznym oknie kroczącym, pochodzenie zebrane ponad rok temu nie jest 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.
  • Zadania 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 jest adresowany przez ścieżkę (przykład: select * from delta."s3://<bucket>/<path>").
  • Jeśli nazwa tabeli lub widoku zostanie zmieniona, pochodzenie nie zostanie przechwycone dla zmienionej tabeli lub widoku.
  • Jeśli zmieniono nazwę schematu lub wykazu, pochodzenie nie jest przechwytywane dla tabel i widoków w zmienionym wykazie lub schemacie.
  • Jeśli używasz punktów kontrolnych zestawu danych Spark SQL, pochodzenie nie jest przechwytywane.
  • 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.
  • Pochodzenie nie przechwytuje funkcji stosu.
  • Globalne widoki tymczasowe nie są przechwytywane w pochodzenia.
  • Tabele w obszarze system.information_schema nie są przechwytywane w pochodzenia.