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


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

Внимание

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

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

Примечание.

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

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

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

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

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

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

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

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

Системные таблицы происхождения используют следующую схему. Схема происхождения таблицы не включает 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, PIPELINEDASHBOARD_V3 (Панель мониторинга), (устаревшая панель мониторинга), DBSQL_QUERYDBSQL_DASHBOARD ИЛИNULL. NOTEBOOK
entity_id строка Идентификатор сущности, из нее была записана транзакция происхождения. Если entity_type имеет значение , entity_id имеет NULLзначение 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 имеет значение , entity_run_id имеет NULLзначение 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 строка Схема исходной таблицы. 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 Метка времени создания происхождения. Сведения о часовом поясе записываются в конце значения с +00:00 представлением UTC. 2023-06-20T19:47:21.194+00:00
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_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"))