Поделиться через


Справочник по системным таблицам происхождения

Внимание

Эта функция предоставляется в режиме общедоступной предварительной версии.

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

Существует две системные таблицы происхождения:

  • system.access.table_lineage
  • system.access.column_lineage

Примечание.

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

Таблица происхождения таблиц

Системная таблица таблицы содержит запись для каждого события чтения или записи в таблице каталога Unity или пути. Это включает в себя, но не ограничивается выполнением заданий, запуском записной книжки и панелями мониторинга, обновленными с помощью события чтения или записи.

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

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

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

Системные таблицы происхождения используют следующую схему. Схема происхождения таблицы не включает source_column_name и target_column_name.

Имя столбца Тип данных Description Пример
account_id строка Идентификатор учетной записи Azure Databricks. 7af234db-66d7-4db3-bbf0-956098224879
metastore_id строка Идентификатор хранилища метаданных каталога Unity. 5a31ba44-bbf4-4174-bf33-e1fa078e6765
workspace_id строка Идентификатор рабочей области 123456789012345
entity_type строка Тип сущности, из который была записана транзакция происхождения. Значение : NOTEBOOK, JOB, PIPELINEDBSQL_DASHBOARD, DBSQL_QUERY, ИЛИ NULL. NOTEBOOK
entity_id строка Идентификатор сущности, из нее была записана транзакция происхождения. Если entity_type имеет значение , entity_id имеет NULLзначение NULL. *Ноутбука: 23098402394234
*Работу: 23098402394234
* Sql-запрос Databricks: e9cd8a31-de2f-4206-adfa-4f6605d68d88
* Панель мониторинга SQL Databricks: e9cd8a31-de2f-4206-adfa-4f6605d68d88
*Трубопровода: e9cd8a31-de2f-4206-adfa-4f6605d68d88
entity_run_id строка Идентификатор для описания уникального запуска сущности или NULL. Это отличается для каждого типа сущности:

* Записная книжка: command_run_id
* Задание: job_run_id
* Sql-запрос Databricks: query_run_id
* Панель мониторинга SQL Databricks: query_run_id
* Конвейер: pipeline_update_id

Если entity_type имеет значение , entity_run_id имеет NULLзначение NULL.
*Ноутбука: 23098402394234
*Работу: 23098402394234
* Sql-запрос Databricks: e9cd8a31-de2f-4206-adfa-4f6605d68d88
* Панель мониторинга SQL Databricks: e9cd8a31-de2f-4206-adfa-4f6605d68d88
*Трубопровода: e9cd8a31-de2f-4206-adfa-4f6605d68d88
source_table_full_name строка Трехкомпонентное имя для идентификации исходной таблицы. catalog.schema.table
source_table_catalog строка Каталог исходной таблицы. catalog
source_table_schema строка Схема исходной таблицы. catalog.schema
source_table_name строка Имя исходной таблицы. table
source_path строка Расположение в облачном хранилище исходной таблицы или путь, если он считывается непосредственно из облачного хранилища. abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1
source_type строка Тип источника. Значение : TABLE, PATHVIEWили STREAMING_TABLE. TABLE
source_column_name строка Имя исходного столбца. date
target_table_full_name строка Трехкомпонентное имя для идентификации целевой таблицы. catalog.schema.table
target_table_catalog строка Каталог целевой таблицы. catalog
target_table_schema строка Схема целевой таблицы. catalog.schema
target_table_name строка Имя целевой таблицы. table
target_path строка Расположение в облачном хранилище целевой таблицы. abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1
target_type строка Тип цели. Значение : TABLE, PATHVIEWили STREAMING TABLE. TABLE
target_column_name строка Имя целевого столбца. date
created_by строка Пользователь, создавший эту происхождение. Это может быть имя пользователя Azure Databricks, идентификатор субъекта-службы Azure Databricks, System-User или NULL данные пользователя, которые не могут быть записаны. crampton.rods@email.com
event_time TIMESTAMP Метка времени создания происхождения. 2023-06-20T19:47:21.194+0000
event_date Дата Дата создания происхождения. Это секционированные столбцы. 2023-06-20

Чтение системных таблиц происхождения

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

  • entity_typeДля azure Databricks поддерживает разностные динамические таблицы, записные книжки, задания, запросы SQL Databricks и панели мониторинга. События из других сущностей не поддерживаются.
  • Если вы видите entity_type как null, это означает, что сущность Azure Databricks не участвует в событии. Например, это может быть результат запроса JDBC или пользователя, щелкнув вкладку "Пример данных " в пользовательском интерфейсе Azure Databricks.
  • Чтобы определить, было ли событие чтением или записью, можно просмотреть исходный тип и целевой тип.
    • Только для чтения: исходный тип не имеет значения NULL, но целевой тип имеет значение NULL.
    • Только запись: целевой тип не имеет значения NULL, но исходный тип имеет значение NULL.
    • Чтение и запись: исходный тип и целевой тип не имеют значения NULL.

Пример системной таблицы происхождения

В качестве примера записи происхождения в системных таблицах ниже приведен пример запроса, за которым следует запись происхождения, создаваемый запросом:

CREATE OR REPLACE TABLE car_features
AS SELECT *,  in1+in2 as premium_feature_set
FROM car_features_exterior
JOIN car_features_interior
USING(id, model);

Запись будет system.access.table_lineage выглядеть следующим образом:

entity_type entity_id source_table_name target_table_name created_by event_time
NOTEBOOK 27080565267 car_features_exterior car_features crampton@email.com 2023-01-25T16:19:58.908+0000
NOTEBOOK 27080565267 car_features_interior car_features crampton@email.com 2023-01-25T16:19:58.908+0000

Запись будет system.access.column_lineage выглядеть следующим образом:

entity_type entity_id source_table_name target_table_name source_column_name target_column_name event_time
NOTEBOOK 27080565267 car_features_interior car_features in1 premium_feature_set 2023-01-25T16:19:58.908+0000
NOTEBOOK 27080565267 car_features_interior car_features in2 premium_feature_set 2023-01-25T16:19:58.908+0000

Примечание.

Не все столбцы происхождения показаны в приведенном выше примере. Полные схемы см. в приведенной выше схеме происхождения.

Устранение неполадок с запросами внешней таблицы

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

SELECT * FROM delta.`abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1`;

Если вы пытаетесь запросить записи происхождения для внешней таблицы, на которую ссылается путь, необходимо отфильтровать запрос с помощью source_path или target_path вместо source_table_full_name него target_table_full_name. Например, следующий запрос извлекает все записи происхождения для внешней таблицы:

SELECT *
FROM system.access.table_lineage
WHERE
  source_path = "abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1" OR
  target_path = "abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1";

Пример. Получение записей происхождения на основе имени внешней таблицы

Если вы не хотите вручную получить путь к облачному хранилищу для поиска происхождения, можно использовать следующую функцию, чтобы получить данные о происхождении с помощью имени таблицы. Вы также можете заменить system.access.table_lineagesystem.access.column_lineage функцию, если вы хотите запросить происхождение столбцов.

def getLineageForTable(table_name):
  table_path = spark.sql(f"describe detail {table_name}").select("location").head()[0]

  df = spark.read.table("system.access.table_lineage")
  return df.where(
    (df.source_table_full_name == table_name)
    | (df.target_table_full_name == table_name)
    | (df.source_path == table_path)
    | (df.target_path == table_path)
  )

Затем выполните следующую команду, чтобы вызвать функцию и отобразить записи происхождения для внешней таблицы:

display(getLineageForTable("table_name"))