类别:

表函数

GET_LINEAGE (SNOWFLAKE.CORE)

给定一个 Snowflake 对象,返回该对象上游或下游的数据沿袭信息。上游是指导致创建该对象的对象路径;下游是指从该对象创建的对象路径。

语法

SNOWFLAKE.CORE.GET_LINEAGE(
    '<object_name>',
    '<object_domain>',
    '<direction>',
    [ <distance>, ]
    [ '<object_version>' ]
)
Copy

实参

必填:

'object_name'

检索其数据沿袭信息的对象名称。如果对象的架构与会话中的当前架构不同,则使用完全限定名称。

'object_domain'

对象的域。支持的域有“COLUMN”、“TABLE”(包括视图和动态表在内的所有类表对象)和“STAGE”。对于 ML 沿袭,将 TABLE 用于功能视图(内部是动态表和视图)、使用“DATASET”,或将“MODULE”用于模型。

'direction'

应保留沿袭的方向。支持的方向为“UPSTREAM”和“DOWNSTREAM”。

可选:

distance

要检索的沿袭级别数。最大值为 5;这也是默认值。

'object_version'

对于版本化对象(如数据集和模型),是指要检索沿袭的对象版本。如果未指定,则使用默认版本。

输出

输出是一个表格,其中沿袭路径中的每个对象关系(即沿袭图中的一条边)都对应一行。关系是指每一行中被指定为源和目标的对象之间的关系。该表包括以下各列:

类型

描述

SOURCE_OBJECT_DATABASE

VARCHAR

包含源对象的数据库。

SOURCE_OBJECT_SCHEMA

VARCHAR

包含源对象的架构。

SOURCE_OBJECT_NAME

VARCHAR

源对象的非限定名称。

SOURCE_OBJECT_DOMAIN

VARCHAR

目标对象的域。可能的值为“COLUMN”、“TABLE”、“DATASET”、“MODULE”(对于 ML 模型)和“STAGE”。

SOURCE_OBJECT_VERSION

VARCHAR

源对象的版本,用于版本化对象,如数据集和模型。如果源对象没有版本化,则返回 NULL。

SOURCE_COLUMN_NAME

VARCHAR

源列的名称(如果源对象是列)。如果源对象不是列,则返回 NULL。

SOURCE_STATUS

VARCHAR

源对象的状态。可能的值为“ACTIVE”和“MASKED”。

TARGET_OBJECT_DATABASE

VARCHAR

包含目标对象的数据库。

TARGET_OBJECT_SCHEMA

VARCHAR

包含目标对象的架构。

TARGET_OBJECT_NAME

VARCHAR

目标对象的非限定名称。

TARGET_OBJECT_DOMAIN

VARCHAR

目标对象的域。可能的值为“COLUMN”、“TABLE”、“DATASET”、“MODULE”(对于 ML 模型)和“STAGE”。

TARGET_OBJECT_VERSION

VARCHAR

目标对象的版本,用于版本化对象,如数据集和模型。如果目标对象没有版本化,则返回 NULL。

TARGET_COLUMN_NAME

VARCHAR

目标列的名称(如果目标对象是列)。如果目标对象不是列,则返回 NULL。

TARGET_STATUS

VARCHAR

目标对象的状态。可能的值为“ACTIVE”和“MASKED”。

DISTANCE

INTEGER

沿袭路径中目标对象与源对象之间的距离。直接关系的距离为 1。

PROCESS

VARIANT

Provides details about how lineage between the source object and target object was established. For example, it might include the query ID of a SQL query or the name of a stored procedure that moved data from the source object to the target object.

使用说明

  • 如果对象不存在、当前用户无法访问对象、对象不支持数据沿袭或对象不在指定域中,您将会收到错误消息。

  • 如果指定对象没有可用的沿袭信息,则输出表不包含任何行;这不是错误。

  • GET_LINEAGE 最多会返回 1000 万行,每行表示沿袭图中的一条边(关系)。如果输出超过 1000 万行,则该函数会自动将输出截断为 1000 万行。

  • 有关适用于使用此函数的限制和注意事项,请参阅 沿袭限制和注意事项

示例

假设您已使用 CREATE TABLE AS SELECT 从 TABLE_A 创建了一个名为 TABLE_B 的表,然后以类似的方式从 TABLE_B 创建了一个名为 TABLE_C 的表。以下 SQL 查询会从 TABLE_A 中检索下游沿袭的两个步骤:

SELECT
    DISTANCE,
    SOURCE_OBJECT_DOMAIN,
    SOURCE_OBJECT_DATABASE,
    SOURCE_OBJECT_SCHEMA,
    SOURCE_OBJECT_NAME,
    SOURCE_STATUS,
    TARGET_OBJECT_DOMAIN,
    TARGET_OBJECT_DATABASE,
    TARGET_OBJECT_SCHEMA,
    TARGET_OBJECT_NAME,
    TARGET_STATUS,
FROM TABLE (SNOWFLAKE.CORE.GET_LINEAGE('my_database.sch.table_a', 'TABLE', 'DOWNSTREAM', 2));
Copy

输出类似于以下内容:

+----------+----------------------+------------------------+----------------------+--------------------+---------------+----------------------+------------------------+----------------------+--------------------+---------------+
| DISTANCE | SOURCE_OBJECT_DOMAIN | SOURCE_OBJECT_DATABASE | SOURCE_OBJECT_SCHEMA | SOURCE_OBJECT_NAME | SOURCE_STATUS | TARGET_OBJECT_DOMAIN | TARGET_OBJECT_DATABASE | TARGET_OBJECT_SCHEMA | TARGET_OBJECT_NAME | TARGET_STATUS |
|----------+----------------------+------------------------+----------------------+--------------------+---------------+----------------------+------------------------+----------------------+--------------------+---------------|
|        1 | TABLE                | MY_DATABASE            | SCH                  | TABLE_A            | ACTIVE        | TABLE                | MY_DATABASE            | SCH                  | TABLE_B            | ACTIVE        |
|        2 | TABLE                | MY_DATABASE            | SCH                  | TABLE_B            | ACTIVE        | TABLE                | MY_DATABASE            | SCH                  | TABLE_C            | ACTIVE        |
+----------+----------------------+------------------------+----------------------+--------------------+---------------+----------------------+------------------------+----------------------+--------------------+---------------+
语言: 中文