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


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

Внимание

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

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

Примечание.

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

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

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

Путь к таблице: эта системная таблица расположена по адресу system.access.table_lineage.

Схема линейности таблицы

В таблице системы родословной таблицы используется следующая схема.

Имя столбца Тип данных Описание Пример
account_id строка Идентификатор учетной записи Azure Databricks. 7af234db-66d7-4db3-bbf0-956098224879
metastore_id строка Идентификатор хранилища метаданных каталога Unity. 5a31ba44-bbf4-4174-bf33-e1fa078e6765
workspace_id строка Идентификатор рабочей области 123456789012345
entity_type строка Тип сущности, из которой была записана линейная транзакция. Значение: NOTEBOOK, JOB, PIPELINE, DASHBOARD_V3 (Панель мониторинга), DBSQL_DASHBOARD (Устаревшая панель мониторинга), DBSQL_QUERY ИЛИ NULL. NOTEBOOK
entity_id строка Идентификатор сущности, из которой была зафиксирована транзакция родословной. Если entity_type — это NULL, то entity_id — это NULL.
  • Записная книжка: 23098402394234
  • Работа: 23098402394234
  • SQL-запрос Databricks: e9cd8a31-de2f-4206-adfa-4f6605d68d88
  • Панель мониторинга: 01ef070d110715f2b6d3061b8bda89ea
  • Устаревшая панель мониторинга: 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
  • Панель мониторинга: query_run_id
  • Устаревшая панель мониторинга: query_run_id
  • Конвейер: pipeline_update_id

Если entity_type — это NULL, то entity_run_id — это NULL.
  • Записная книжка: e3cr5a10-de6f-6206-fdfa-4f5505d68d55
  • Работа: 51090402394234
  • SQL-запрос Databricks: e9cd8a31-de2f-4206-adfa-4f6605d68d88
  • Панель мониторинга: c3ra5m10-pt6o-6206-mdfa-4f5505d68d55
  • Устаревшая панель мониторинга: c3ra5m10-pt6o-6206-mdfa-4f5505d68d55
  • Трубопровод: c5am1e0r-on2f-4206-adfa-4f6605d68d88
source_table_full_name строка Трехкомпонентное имя для идентификации исходной таблицы. catalog.schema.table
source_table_catalog строка Каталог исходной таблицы. catalog
source_table_schema строка Схема исходной таблицы. 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
target_table_full_name строка Трехкомпонентное имя для идентификации целевой таблицы. catalog.schema.table
target_table_catalog строка Каталог целевой таблицы. catalog
target_table_schema строка Схема целевой таблицы. 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
created_by строка Пользователь, создавший эту линиейку. Это может быть имя пользователя Azure Databricks, идентификатор учетной записи службы Azure Databricks, «System-User» или NULL, если информацию о пользователе невозможно зафиксировать. crampton.rods@email.com
event_time метка времени Метка времени генерации родословной. Сведения о часовом поясе записываются в конце значения с +00:00, представляющей UTC. 2023-06-20T19:47:21.194+00:00
event_date Дата Дата создания родословной. Это секционированный столбец. 2023-06-20

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

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

Путь к таблице: эта системная таблица расположена по адресу system.access.column_lineage.

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

В системной таблице родословной столбцов используется следующая схема:

Имя столбца Тип данных Описание Пример
account_id строка Идентификатор учетной записи Azure Databricks. 7af234db-66d7-4db3-bbf0-956098224879
metastore_id строка Идентификатор хранилища метаданных каталога Unity. 5a31ba44-bbf4-4174-bf33-e1fa078e6765
workspace_id строка Идентификатор рабочей области 123456789012345
entity_type строка Тип сущности, из которой была записана линейная транзакция. Значение: NOTEBOOK, JOB, PIPELINE, DASHBOARD_V3 (Панель), DBSQL_DASHBOARD (Устаревшая панель), DBSQL_QUERY ИЛИ NULL. NOTEBOOK
entity_id строка Идентификатор сущности, из нее была записана транзакция происхождения. Если entity_type — это NULL, то entity_id — это NULL.
  • Записная книжка: 23098402394234
  • Работа: 23098402394234
  • SQL-запрос Databricks: e9cd8a31-de2f-4206-adfa-4f6605d68d88
  • Панель мониторинга: 01ef070d110715f2b6d3061b8bda89ea
  • Устаревшая панель мониторинга: 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
  • Панель мониторинга: query_run_id
  • Устаревшая панель мониторинга: query_run_id
  • Конвейер: pipeline_update_id

Если entity_type — это NULL, то entity_run_id — это NULL.
  • Записная книжка: e3cr5a10-de6f-6206-fdfa-4f5505d68d55
  • Работа: 51090402394234
  • SQL-запрос Databricks: e9cd8a31-de2f-4206-adfa-4f6605d68d88
  • Панель управления: c3ra5m10-pt6o-6206-mdfa-4f5505d68d55
  • Устаревшая панель мониторинга: c3ra5m10-pt6o-6206-mdfa-4f5505d68d55
  • Трубопровод: c5am1e0r-on2f-4206-adfa-4f6605d68d88
source_table_full_name строка Трехкомпонентное имя для идентификации исходной таблицы. catalog.schema.table
source_table_catalog строка Каталог исходной таблицы. catalog
source_table_schema строка Схема исходной таблицы. 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 строка Схема целевой таблицы. 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 метка времени Метка времени создания родословной данных. Сведения о часовом поясе записываются в конце значения с +00:00, представляющей UTC. 2023-06-20T19:47:21.194+00:00
event_date Дата Дата создания родословной. Это секционированный столбец. 2023-06-20

Чтение системных таблиц родословной

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

  • Для entity_type платформа Azure Databricks поддерживает технологию DLT, записные книжки, задания, запросы Databricks SQL и панели мониторинга. События из других сущностей не поддерживаются.
  • Если вы видите 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_lineage на system.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"))