Compartir vía


Referencia de tablas del sistema de linaje

Importante

Esta tabla del sistema está en versión preliminar pública. Para acceder a la tabla, el esquema debe estar habilitado en el catálogo system. Para obtener más información, consulte Habilitación de esquemas de tabla del sistema.

En este artículo se proporciona información general sobre las dos tablas del sistema de linaje. Estas tablas del sistema se basan en la característica de linaje de datos de Unity Catalog, lo que le permite consultar mediante programación los datos de linaje para impulsar la toma de decisiones e informes.

Hay dos tablas del sistema de linaje:

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

Nota:

Ambas tablas de linaje representan un subconjunto de todos los eventos de lectura y escritura, ya que no siempre es posible capturar linaje. Los registros solo se emiten cuando se puede deducir el linaje.

Tabla de linaje de tabla

La tabla del sistema de linaje de tabla incluye un registro para cada evento de lectura o escritura en una tabla o ruta de acceso de Unity Catalog. Esto incluye, entre otras cosas, ejecuciones de trabajos, ejecuciones de cuadernos y paneles actualizados con el evento de lectura o escritura.

Tabla de linaje de columnas

La tabla de linaje de columnas no incluye eventos que no tienen un origen. Por ejemplo, si inserta en una columna usando valores explícitos, no se capturará. Si lee una columna, se captura si escribe o no la salida. El linaje de columnas no se admite para Delta Live Tables.

Esquema de tabla del sistema de linaje

Las tablas del sistema de linaje usan el esquema siguiente. El esquema de linaje de tabla no incluye source_column_name ni target_column_name.

Nombre de la columna Tipo de datos Descripción Ejemplo
account_id cadena Identificador de la cuenta de Azure Databricks. 7af234db-66d7-4db3-bbf0-956098224879
metastore_id cadena Id. del metastore de Unity Catalog. 5a31ba44-bbf4-4174-bf33-e1fa078e6765
workspace_id cadena Id. del área de trabajo 123456789012345
entity_type cadena Tipo de entidad desde la que se capturó la transacción de linaje. El valor es NOTEBOOK, JOB, PIPELINE, DASHBOARD_V3 (Panel), DBSQL_DASHBOARD (Panel heredado), DBSQL_QUERY, o NULL. NOTEBOOK
entity_id string Id. de la entidad desde la que se capturó la transacción de linaje. Si entity_type es NULL, entity_id es NULL. - Cuaderno: 23098402394234
- Trabajo: 23098402394234
- Consulta de Databricks SQL: e9cd8a31-de2f-4206-adfa-4f6605d68d88
- Panel: 01ef070d110715f2b6d3061b8bda89ea
- Panel heredado: e9cd8a31-de2f-4206-adfa-4f6605d68d88
- Canalización: e9cd8a31-de2f-4206-adfa-4f6605d68d88
entity_run_id string Id. para describir la ejecución única de la entidad o NULL. Esto difiere para cada tipo de entidad:

- Bloc de notas: command_run_id
- Trabajo: job_run_id
- Consulta de Databricks SQL: query_run_id
- Panel: query_run_id
- Panel heredado: query_run_id
- Canalización: pipeline_update_id

Si entity_type es NULL, entity_run_id es NULL.
- Cuaderno: e3cr5a10-de6f-6206-fdfa-4f5505d68d55
- Trabajo: 51090402394234
- Consulta de Databricks SQL: e9cd8a31-de2f-4206-adfa-4f6605d68d88
- Panel: c3ra5m10-pt6o-6206-mdfa-4f5505d68d55
- Panel heredado: c3ra5m10-pt6o-6206-mdfa-4f5505d68d55
- Canalización: c5am1e0r-on2f-4206-adfa-4f6605d68d88
source_table_full_name string Nombre de tres partes para identificar la tabla de origen. catalog.schema.table
source_table_catalog cadena Catálogo de la tabla de origen. catalog
source_table_schema cadena Esquema de la tabla de origen. catalog.schema
source_table_name cadena El nombre de la tabla de origen. table
source_path cadena Ubicación en el almacenamiento en la nube de la tabla de origen o la ruta de acceso si lee directamente desde el almacenamiento en la nube. abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1
source_type cadena Tipo del origen. El valor es TABLE, PATH, VIEW o STREAMING_TABLE. TABLE
source_column_name cadena El nombre de la columna de origen. date
target_table_full_name cadena Nombre de tres partes para identificar la tabla de destino. catalog.schema.table
target_table_catalog cadena Catálogo de la tabla de destino. catalog
target_table_schema cadena Esquema de la tabla de destino. catalog.schema
target_table_name cadena Nombre de la tabla de destino. table
target_path cadena Ubicación en el almacenamiento en la nube de la tabla de destino. abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1
target_type cadena Tipo del destino. El valor es TABLE, PATH, VIEW o STREAMING TABLE. TABLE
target_column_name cadena El nombre de la columna de destino. date
created_by cadena El usuario que generó este linaje. Puede ser un nombre de usuario de Azure Databricks, un id. de entidad de servicio de Azure Databricks, "Usuario del sistema" o NULL si no se puede capturar la información del usuario. crampton.rods@email.com
event_time timestamp Marca de tiempo cuando se generó el linaje. La información de zona horaria se registra al final del valor con +00:00, que representa la hora UTC. 2023-06-20T19:47:21.194+00:00
event_date date Fecha en la que se generó el linaje. Se trata de una columna con particiones. 2023-06-20

Leer las tablas del sistema de linaje

Tenga en cuenta las siguientes consideraciones al analizar las tablas del sistema de linaje:

  • Para entity_type, Azure Databricks admite Delta Live Tables, cuadernos, trabajos, consultas de Databricks SQL y paneles. No se admiten eventos de otras entidades.
  • Si ve entity_type como null, significa que ninguna entidad de Azure Databricks está implicada en el evento. Por ejemplo, podría ser el resultado de una consulta JDBC o de un usuario haciendo clic en la pestaña Datos de ejemplo de la interfaz de usuario de Azure Databricks.
  • Para determinar si el evento era de lectura o escritura, puede ver el tipo de origen y el tipo de destino.
    • Solo lectura: el tipo de origen no es null, pero el tipo de destino es null.
    • Solo escritura: el tipo de destino no es null, pero el tipo de origen es null.
    • Lectura y escritura: el tipo de origen y el tipo de destino no son null.

Ejemplo de tabla del sistema de linaje

Como ejemplo de cómo se registra el linaje en las tablas del sistema, a continuación se muestra una consulta de ejemplo seguida de los registros de linaje que crea la consulta:

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);

El registro en system.access.table_lineage tendría el siguiente aspecto:

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

El registro en system.access.column_lineage tendría el siguiente aspecto:

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

Nota:

No todas las columnas de linaje se muestran en el ejemplo anterior. Para obtener el esquema completo, consulte el esquema de linaje anterior.

Resolución de problemas de consultas a tablas externas

Cuando se hace referencia a una tabla externa utilizando su ruta de almacenamiento en la nube, el registro de linaje asociado solo incluye el nombre de la ruta y no el nombre de la tabla. Por ejemplo, el registro de linaje de esta consulta incluiría el nombre de la ruta y no el nombre de la tabla:

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

Si está intentando consultar los registros de linaje de una tabla externa a la que se hace referencia mediante una ruta, tendrá que filtrar la consulta utilizando source_path o target_path en lugar de source_table_full_name o target_table_full_name. Por ejemplo, la siguiente consulta extrae todos los registros de linaje de una tabla externa:

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";

Ejemplo: Recuperar registros de linaje basándose en el nombre de una tabla externa

Si no desea recuperar manualmente la ruta de almacenamiento en la nube para encontrar el linaje, puede utilizar la siguiente función para obtener datos de linaje utilizando el nombre de la tabla. También puede sustituir system.access.table_lineage con system.access.column_lineage en la función si desea consultar el linaje de las columnas.

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)
  )

A continuación, utilice el siguiente comando para llamar a la función y mostrar los registros de linaje de la tabla externa:

display(getLineageForTable("table_name"))