Сбор и просмотр происхождения данных с помощью каталога Unity

В этой статье описывается, как записывать и визуализировать происхождение данных с помощью Обозреватель каталога, системных таблиц происхождения данных и REST API.

Каталог Unity можно использовать для отслеживания происхождения данных среды выполнения в запросах, выполняемых в Azure Databricks. Происхождение поддерживается для всех языков и записывается до уровня столбца. Данные происхождения включают записные книжки, рабочие процессы и панели мониторинга, связанные с запросом. Происхождение можно визуализировать в каталоге Обозреватель практически в реальном времени и получить программным способом с помощью системных таблиц происхождения и REST API Databricks.

Происхождение агрегируется во всех рабочих областях, подключенных к хранилищу метаданных каталога Unity. Это означает, что происхождение данных, собранное в одной рабочей области, отображается в любой другой рабочей области из этого хранилища метаданных. У пользователей должны быть правильные разрешения на просмотр данных происхождения. Данные о происхождении хранятся в течение 1 года.

Сведения об отслеживании происхождения модели машинного обучения см. в разделе "Отслеживание происхождения данных модели в каталоге Unity".

Требования

Для сбора происхождения данных с использованием каталога Unity необходимо следующее:

  • Рабочая область должна включать каталог Unity.

  • Таблицы должны быть зарегистрированы в хранилище метаданных каталога Unity.

  • В запросах должны использоваться кадры данных Spark (например, функции Spark SQL, возвращающие кадры данных) или интерфейсы Databricks SQL. Примеры запросов Databricks SQL и PySpark см. здесь.

  • Чтобы просмотреть происхождение таблицы или представления, пользователи должны иметь по крайней мере BROWSE права доступа к родительскому каталогу таблицы или представления.

  • Чтобы просмотреть сведения о происхождении записных книжек, рабочих процессов или панелей мониторинга, пользователи должны иметь разрешения на эти объекты в соответствии с параметрами управления доступом в рабочей области. См. статью о разрешениях на происхождение данных.

  • Чтобы просмотреть конвейер с поддержкой каталога Unity, необходимо иметь CAN_VIEW разрешения на конвейер.

  • Возможно, потребуется обновить правила исходящего брандмауэра, чтобы разрешить подключение к конечной точке Концентратора событий на уровне управления Azure Databricks. Обычно это применимо, если рабочая область Azure Databricks развертывается в собственной виртуальной сети (также называемой внедрением виртуальной сети). Чтобы получить конечную точку Концентратора событий для региона рабочей области, см. раздел Хранилище метаданных", хранилище BLOB-объектов артефактов, хранилище системных таблиц, хранилище BLOB-объектов журнала и IP-адреса конечных точек Концентратора событий. Сведения о настройке определяемых пользователем маршрутов (UDR) для Azure Databricks см. в разделе Пользовательские параметры маршрутизации для Azure Databricks.

Ограничения

  • Потоковая передача между таблицами Delta поддерживается только в Databricks Runtime 11.3 LTS или более поздней версии.

  • Так как происхождение данных вычисляется в пределах годового скользящего окна, данные о происхождении, собранные более 1 года назад, не отображаются. Например, если задание или запрос считывает данные из таблицы A и записывает их в таблицу B, связь между таблицей A и таблицей B отображается только в течение 1 года.

    Данные происхождения можно фильтровать по временным интервалам. При выборе параметра "Все происхождения" отображаются данные происхождения, собранные начиная с июня 2023 года.

  • Рабочие процессы, использующие запрос runs submit API заданий, недоступны при просмотре происхождения данных. Происхождение на уровне таблицы и столбца по-прежнему собирается при использовании запроса runs submit, но ссылка на выполнение не входит в сбор.

  • Unity Catalog регистрирует происхождение на уровне столбца, когда это возможно. Однако в некоторых случаях не удается зарегистрировать происхождение данных на уровне столбца.

  • Происхождение столбцов поддерживается только в том случае, если источник и целевой объект ссылаются по имени таблицы (пример: select * from <catalog>.<schema>.<table>). Происхождение столбцов невозможно записать, если источник или целевой объект устранен путем (пример: select * from delta."s3://<bucket>/<path>").

  • Если таблица переименована, происхождение данных для нее не регистрируется.

  • Если вы используете контрольные точки для набора данных Spark SQL, данные о происхождении не записываются. См. раздел pyspark.sql.DataFrame.проверкауказатель в документации Apache Spark.

  • Каталог Unity записывает происхождение из конвейеров разностных динамических таблиц в большинстве случаев. Однако в некоторых случаях полное покрытие происхождения невозможно гарантировать, например, когда конвейеры используют API APPLY CHANGES или ВРЕМЕННЫЕ таблицы.

Примеры

Примечание.

  • В следующих примерах используется имя lineage_data каталога и имя lineagedemoсхемы. Чтобы использовать другой каталог и схему, измените имена, используемые в примерах.

  • Для выполнения этого примера у вас должны быть привилегии CREATE и USE SCHEMA в схеме. Администратор хранилища метаданных, владелец каталога или владелец схемы могут предоставить вам эти привилегии. Например, чтобы предоставить всем пользователям группы разрешение "data_engineers" на создание таблиц в схеме lineage_data в lineagedemo каталоге, пользователь с одним из указанных выше привилегий или ролей может выполнять следующие запросы:

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

Сбор и изучение происхождения данных

Чтобы собрать данные происхождения, выполните следующие действия:

  1. Перейдите на целевую страницу Azure Databricks, щелкните Значок "Создать " на боковой панели и выберите "Записная книжка " в меню.

  2. Введите имя записной книжки и для параметра Язык по умолчанию выберите SQL.

  3. В кластере выберите кластер с доступом к каталогу Unity.

  4. Нажмите кнопку Создать.

  5. В первой ячейке записной книжки введите следующие запросы:

    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+ВВОД или нажмите кнопку Меню запуска "Выполнить ячейку".

Чтобы использовать Обозреватель каталога для просмотра происхождения, созданного этими запросами, выполните следующие действия.

  1. В поле поиска в верхней строке рабочей области Azure Databricks введите lineage_data.lineagedemo.dinner и нажмите кнопку "Поиск lineage_data.lineagedemo.dinner" в Databricks.

  2. В разделе "Таблицы" щелкните таблицу dinner .

  3. Перейдите на вкладку "Происхождение". Откроется панель происхождения и отображает связанные таблицы (например, это menu таблица).

  4. Чтобы просмотреть интерактивный граф происхождения данных, нажмите Просмотреть график происхождения данных. По умолчанию в графе отображается один уровень. Значок знака Щелкните значок на узле, чтобы показать больше подключений, если они доступны.

  5. Щелкните стрелку, соединяющую узлы в графе происхождения, чтобы открыть панель Подключение происхождения. На панели Подключение происхождения отображаются сведения о подключении, включая исходные и целевые таблицы, записные книжки и рабочие процессы.

    Граф

  6. Чтобы отобразить записную книжку, связанную с таблицей dinner, выберите записную книжку на панели Подключение происхождения или закройте граф происхождения и щелкните Записные книжки. Чтобы открыть записную книжку на новой вкладке, щелкните имя записной книжки.

  7. Чтобы просмотреть происхождение на уровне столбцов, щелкните столбец в графе, чтобы отобразить ссылки на связанные столбцы. Например, щелкнув столбец "full_menu", отображает столбцы вышестоящий столбцов, производных от:

    Происхождение полного столбца меню

Чтобы продемонстрировать создание и просмотр происхождения данных на другом языке, например Python, выполните следующие действия:

  1. Откройте созданную ранее записную книжку, создайте новую ячейку и введите следующий код 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+ВВОД или щелкнувМеню запускаи выбрав "Выполнить ячейку".

  3. В поле поиска в верхней строке рабочей области Azure Databricks введите lineage_data.lineagedemo.price и нажмите кнопку "Поиск lineage_data.lineagedemo.price" в Databricks.

  4. В разделе "Таблицы" щелкните таблицу price .

  5. Перейдите на вкладку Происхождение и нажмите Просмотреть граф происхождения. Щелкните значки Значок знака для изучения происхождения данных, созданного запросами SQL и Python.

    Расширенный граф происхождения

  6. Щелкните стрелку, соединяющую узлы в графе происхождения, чтобы открыть панель Подключение происхождения. На панели Подключение происхождения отображаются сведения о подключении, включая исходные и целевые таблицы, записные книжки и рабочие процессы.

Сбор и просмотр сведений о происхождении рабочих процессов

Данные о происхождении также записываются для любого рабочего процесса, который считывает или записывает в каталог Unity. Чтобы продемонстрировать просмотр происхождения рабочих процессов Azure Databricks, выполните следующие действия:

  1. Щелкните Значок "Создать" на боковой панели и выберите "Записная книжка " в меню.

  2. Введите имя записной книжки и для параметра Язык по умолчанию выберите SQL.

  3. Нажмите кнопку Создать.

  4. В первой ячейке записной книжки введите следующий запрос:

    SELECT * FROM lineage_data.lineagedemo.menu
    
  5. На верхней панели щелкните Расписание. В диалоговом окне расписания выберите "Вручную", выберите кластер с доступом к каталогу Unity и нажмите кнопку "Создать".

  6. Щелкните Запустить сейчас.

  7. В верхней строке рабочей области Azure Databricks введите lineage_data.lineagedemo.menu и щелкните "Поиск lineage_data.lineagedemo.menu" в Databricks.

  8. В разделе "Таблицы" просмотрите все таблицы, щелкните таблицу menu .

  9. Перейдите на вкладку Происхождение, щелкните Рабочие процессы и выберите вкладку Подчиненный. Имя задания отображается в разделе Имя задания в качестве потребителя таблицы menu.

Сбор и просмотр происхождения панели мониторинга

Чтобы продемонстрировать просмотр происхождения данных для панели мониторинга SQL, выполните следующие действия:

  1. Перейдите на целевую страницу Azure Databricks и откройте Обозреватель каталога, щелкнув каталог на боковой панели.
  2. Щелкните имя каталога, нажмите lineagedemo и выберите таблицу menu. Для поиска таблицы menu можно также использовать текстовое поле Поиск таблиц на верхней панели.
  3. Щелкните Действия > Создать быструю панель мониторинга.
  4. Выберите столбцы для добавления на панель мониторинга и нажмите Создать.
  5. В верхней строке рабочей области Azure Databricks введите lineage_data.lineagedemo.menu и щелкните "Поиск lineage_data.lineagedemo.menu" в Databricks.
  6. В разделе "Таблицы" просмотрите все таблицы, щелкните таблицу menu .
  7. Перейдите на вкладку Происхождение и щелкните Панели мониторинга. Имя панели мониторинга отображается в разделе Имя панели мониторинга в качестве потребителя таблицы меню.

Разрешения на происхождение данных

Для графов происхождения используется та же модель разрешений, что и для каталога Unity. Если у пользователя нет BROWSE прав или SELECT привилегий в таблице, они не могут изучить происхождение. Кроме того, пользователи могут просматривать только записные книжки, рабочие процессы и панели мониторинга, которые у них есть разрешение на просмотр. Например, если для пользователя userA без прав администратора выполняются следующие команды:

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

При userA просмотре графа происхождения таблицы lineage_data.lineagedemo.menu они увидят таблицу menu . Они не смогут просматривать сведения о связанных таблицах, например нижестоящей lineage_data.lineagedemo.dinner таблице. Таблица dinner отображается в виде узла masked на экране userA, а userA не может развернуть граф, чтобы отобразить подчиненные таблицы из таблиц, у которых нет разрешения на доступ.

Если вы выполните следующую команду, чтобы предоставить BROWSE разрешение пользователю userB, отличному от администратора:

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

userB теперь можно просмотреть график происхождения для любой таблицы в схеме lineage_data .

Дополнительные сведения об управлении доступом к защищаемым объектам в каталоге Unity см. в разделе "Управление привилегиями" в каталоге Unity. Дополнительные сведения об управлении доступом к объектам рабочей области, таким как записные книжки, рабочие процессы и панели мониторинга, см . в списках управления доступом.

Удаление данных о происхождении данных

Предупреждение

Выполнив следующие инструкции, вы удалите все объекты, хранящиеся в каталоге Unity. Используйте их только при необходимости. Например, для соответствия требованиям.

Чтобы удалить данные о происхождении данных, необходимо удалить хранилище метаданных, управляющее объектами каталога Unity. Дополнительные сведения об удалении хранилища метаданных см. в статье Удаление хранилища метаданных. Данные будут удалены в течение 90 дней.

Запрос данных происхождения с помощью системных таблиц

Системные таблицы происхождения можно использовать для программного запроса данных происхождения. Подробные инструкции см. в статье "Мониторинг использования системных таблиц и системных таблиц lineage".

Если рабочая область находится в регионе, который не поддерживает системные таблицы происхождения, можно также использовать REST API Data Lineage для получения данных происхождения данных программным способом.

Получение происхождения с помощью REST API data lineage

API происхождения данных позволяет получить происхождение таблиц и столбцов. Однако если рабочая область находится в регионе, поддерживающем системные таблицы происхождения, следует использовать системные запросы таблиц вместо REST API. Системные таблицы — это лучший вариант для программного извлечения данных происхождения. Большинство регионов поддерживают системные таблицы происхождения.

Внимание

Чтобы получить доступ к REST API Databricks, необходимо пройти проверку подлинности.

Извлечение происхождения таблицы

В этом примере извлекаются данные происхождения данных для таблицы 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.

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

Извлечение происхождения столбца

В этом примере извлекаются данные происхождения данных для столбца 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"
    }
  ]
}