Сбор и просмотр происхождения данных с помощью каталога 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 разрешения на конвейер.

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

  • Для отслеживания происхождения столбцов для рабочих нагрузок Delta Live Tables требуется Databricks Runtime 13.3 LTS или более поздней версии.

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

Примеры

Примечание.

  • В следующих примерах используется имя 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 таблицу и выберите ее.

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

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

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

    Граф

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

  6. Чтобы просмотреть происхождение на уровне столбцов, щелкните столбец в графе, чтобы отобразить ссылки на связанные столбцы. Например, щелкнув столбец "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 таблицу и выберите ее.

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

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

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

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

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

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

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

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

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

    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 привилегий в таблице, они не могут изучить происхождение. Кроме того, пользователи могут просматривать только записные книжки, задания и панели мониторинга, которые у них есть разрешение на просмотр. Например, если для пользователя 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.

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

Ограничения

  • Так как происхождение вычисляется в однолетнем скользящей окне, происхождение, собранное более одного года назад, не отображается. Например, если задание или запрос считывает данные из таблицы А и записывается в таблицу B, связь между таблицей A и таблицей B отображается только в течение одного года. Данные о происхождении можно фильтровать по временным интервалам в течение одного года.
  • Задания, использующие запрос API runs submit заданий, недоступны при просмотре происхождения. Происхождение на уровне таблицы и столбца по-прежнему собирается при использовании запроса runs submit, но ссылка на выполнение не входит в сбор.
  • Unity Catalog регистрирует происхождение на уровне столбца, когда это возможно. Однако в некоторых случаях не удается зарегистрировать происхождение данных на уровне столбца.
  • Происхождение столбцов поддерживается только в том случае, если источник и целевой объект ссылаются по имени таблицы (пример: select * from <catalog>.<schema>.<table>). Происхождение столбцов невозможно записать, если источник или целевой объект устранен путем (пример: select * from delta."s3://<bucket>/<path>").
  • Если таблица или представление переименованы, строка происхождения не фиксируется для переименованной таблицы или представления.
  • Если схема или каталог переименованы, строка происхождения не фиксируется для таблиц и представлений в переименованном каталоге или схеме.
  • Если вы используете контрольные точки для набора данных Spark SQL, данные о происхождении не записываются.
  • Каталог Unity записывает происхождение из конвейеров разностных динамических таблиц в большинстве случаев. Однако в некоторых случаях полное покрытие происхождения невозможно гарантировать, например, когда конвейеры используют API APPLY CHANGES или ВРЕМЕННЫЕ таблицы.
  • Lineage не записывает функции стека.
  • Глобальные временные представления не фиксируются в происхождении.
  • Таблицы под system.information_schema не фиксируются в происхождении.