数据沿袭¶
Snowflake 会跟踪数据如何从源对象流向目标对象(例如从表到视图),并允许您查看对象中数据的来源或去向。这些信息称为 数据沿袭,可以帮助您理解 Snowflake 对象之间的关系。
数据沿袭捕捉了两种类型的关系:
数据移动,例如将数据从一个对象复制或物化到另一个对象时。例如,对表执行的 CREATE TABLE AS SELECT (CTAS)、INSERT 或 MERGE 操作会导致数据移动。
对象依赖关系,这是指对象引用基础对象但未物化或复制数据时,例如视图引用表时。
Snowflake 数据沿袭具有以下优点:
了解不同对象之间的关系,从而提供影响分析。
查看数据移动沿袭和对象依赖关系,从而增强监控和故障排除。
跟踪敏感数据的流动,从而促进合规性。
帮助您在列上使用标签和掩码策略,以保护敏感数据。
了解源和目标对象和列,从而增强对数据的信任。
允许管理员查看要委派的沿袭。有关更多信息,请参阅 沿袭信息的访问控制。
关于上游和下游关系¶
数据沿袭可帮助您从源对象和目标对象的角度来了解对象的关系。在沿袭术语中,源对象位于目标对象的“上游”,目标对象位于源对象的“下游”。Snowsight 会逐步累进地显示所选对象的上游或下游对象。
例如,在这条 SQL 语句中:
CREATE TABLE table2 AS SELECT col1 FROM table1;
table2 是目标表,位于源表 table1 的下游。源自 table1 表的 col1 列包含在 table2 表中;这也是下游沿袭关系。
如果您在 Snowsight 中查看 table1 表的详细信息,则 Lineage 选项卡将显示一个由 table1 至 table2 的箭头,以指示下游沿袭关系。如果您改为从 table2 表开始,则箭头会从 table2 指向上游的 table1。
开始使用¶
要在 Snowsight 中开始使用数据沿袭,请执行以下步骤:
Sign in to Snowsight with the necessary privileges.
In the navigation menu, select Catalog » Database Explorer, and then select a supported object such as a table or view.
选择 Lineage 选项卡。
对 Lineage 选项卡的基本操作包括以下内容:
A. 选择一个对象以显示其附加详细信息,包括该对象的列以及这些列上的标签。
B. 选择 +/- 以显示或隐藏进一步上游或下游的对象。
C. 选择连接两个对象的箭头,以显示有关如何创建下游对象的信息(例如,创建对象的 SQL 语句)。您的访问控制权限决定了显示哪些信息。
D. 打开一个新的沿袭图,该图侧重于所选对象的沿袭关系。
要了解如何使用 Lineage 选项卡以执行其他操作,请参阅以下内容:
列沿袭¶
您可以使用 Snowsight 跟踪源对象中的列与目标对象中的列之间的关系。对于给定列,您可以确定与该列共享沿袭的所有上游和下游列。
要确定列的沿袭,请执行以下操作:
打开“Lineage”选项卡,选择包含您感兴趣的追踪列的对象。侧面板打开。
将鼠标悬停在侧面板中的列名称上,然后选择 View Lineage。
选择 Upstream Lineage 或 Downstream Lineage 以列出上游或下游对象中的列。
您可以使用 Distance 列来确定列在沿袭中的距离。例如,如果下游距离为 1,则该列位于直接从当前对象创建的对象中。如果下游距离为 2,则该列位于从当前对象创建的对象的基础上进一步创建的对象中。
确定掩码策略¶
打开“Lineage”选项卡,选择您感兴趣的对象。侧面板打开。
要查看对象列的掩码策略,请在 Columns 部分查找列。如果列受掩码策略保护,则列名称旁边会显示一个符号。将鼠标悬停在符号上,可查看掩码策略名称和详细信息。
如果掩码策略存在问题,例如同一列被分配了多个掩码策略,则会显示 Policy Error,而不是掩码符号。 如果将鼠标悬停在 Policy Error 上方,则会显示错误的解释。有关确定错误可能发生原因的其他帮助,请参阅 标签和策略发现 和 对基于标签的掩码策略进行故障排除。
Lineage created by a stored procedure¶
Selecting the arrow that connects two objects in the lineage graph opens a side panel that provides details about how the downstream object was created. If the downstream object was created by a stored procedure, the Stored Procedures section contains the following information:
Direct --- Displays the name of the stored procedure that, when executed, resulted in the downstream object.
Root --- If the direct stored procedure is nested within other stored procedures, this field displays the name of the stored procedure that is at the top of the hierarchy of nested procedures.
You must have privileges to access the stored procedure to view this information. To view additional information about a stored procedure, select the Go to procedure icon next to its name.
请记住以下几点:
If you call a stored procedure anonymously, details about the stored procedure do not appear in the lineage.
Details about stored procedures are not backfilled. Lineage that occurred before the introduction of support for stored procedures does not include details about the stored procedure that resulted in the data movement.
以编程方式检索沿袭¶
您可以使用 GET_LINEAGE (SNOWFLAKE.CORE) 函数,以编程方式检索沿袭信息。该函数返回 Snowsight 中 Lineage 选项卡所提供信息的子集。
支持的数据沿袭操作¶
以下操作会在源对象与目标对象之间建立上游和下游的关系:
CREATE TABLE ...AS SELECT (CTAS)
例如 UPDATE。
UPDATE mydb.schema1.table1 FROM mydb.schema2.table2 SET table1.col1 = table2.col1;
受支持对象¶
数据沿袭支持 与表类似的对象 之间的数据移动和依赖关系。“与表类似”的对象是任何可以像表一样查询的对象,包括表在内(没有其他对象比表更像是表)。与表类似的对象包括:
表
动态表
外部表
Iceberg 表
视图
物化视图
暂存区也可以参与数据沿袭关系,以下机器学习对象也是如此。
:doc:`功能视图 </developer-guide/snowflake-ml/feature-store/feature-views>`(实际上是 Snowflake 中的动态表或视图)
任意两个与表类似的对象中的列之间都支持列沿袭。例如,您可以在表中选择一列来查看下游列沿袭,这会显示该列出现的其他与表类似的对象。
此外,如果所用角色具有管理标签和掩码策略的权限,则可以查看标签和掩码策略的关联。
ML 沿袭¶
ML 沿袭 专门支持机器学习关系,这种关系侧重于机器学习工作流程中如何使用和转换数据,而非更简单的移动或依赖关系。支持以下类型的对象之间的关系:
沿袭信息的访问控制¶
具有以下权限的角色可以访问 Lineage 选项卡,并可查看对象的所有上游和下游沿袭对象及依赖关系:
账户的 VIEW LINEAGE。
对要评估沿袭的对象的任何权限,例如对表的 SELECT 权限。如果您希望用户能够查看对象的沿袭,但无法访问其数据,可以向用户授予对该对象的 REFERENCES 权限。
对包含该对象的数据库和架构的 USAGE。
VIEW LINEAGE 权限控制用户是否可以查看其对象的数据沿袭。默认情况下,PUBLIC 角色具有此权限,这意味着每个人都有权查看沿袭。要缩小沿袭查看者的范围,您可以撤销 PUBLIC 角色的 VIEW LINEAGE 权限,改为将其授予自定义角色。
You can configure a role to view the full lineage of all objects, even if the role doesn't have privileges on the objects, database, or schema.
Simply grant the role the RESOLVE ALL privilege on the account, for example, GRANT RESOLVE ALL ON ACCOUNT TO ROLE lineage_role;. The
role still requires the VIEW LINEAGE privilege.
如果用户对沿袭图表中的上游或下游对象没有权限,则该对象将显示为灰色,并显示一条消息,指出您没有足够的权限查看该对象。灰色对象并不表示沿袭图表中的终端节点;只是表示用户无法从该节点继续查看上游或下游沿袭,因为他们没有权限检索该对象的沿袭。此行为也适用于受其他访问策略保护的对象和列。
用户必须具有 QUERY_HISTORY 视图 的访问权限,才能查看生成目标对象的 SQL 语句。
沿袭历史记录和保留¶
沿袭是 Snowflake 在 2024 年 11 月推出的功能。沿袭信息的获取方式如下:
在此日期之前发生的对象依赖关系(例如,基于表的视图)的沿袭信息 是 可获取的。
在此日期之前发生的数据移动(例如,使用 CTAS 语句从另一个表创建表)的沿袭信息 是不 可获取的。
历史记录信息按如下方式保存:
列沿袭保留一年。
对象沿袭保留一年。
限制和注意事项¶
沿袭不适用于以下类型的对象:
共享数据库中的对象。
SNOWFLAKE 共享数据库中的对象。
数据库 INFORMATION_SCHEMA 中的对象。
动态表显示在其他对象的沿袭图表中,但动态表本身不会显示 Lineage 选项卡。
已删除的表不会显示在沿袭图表中,但重命名的表会显示。
Temporary tables are not shown in the lineage graph.
沿袭不包括当数据未从表移动到下游对象时用于筛选或联接的表。在以下示例中,表
t2不被视为表target_table沿袭的一部分:CREATE TABLE target_table AS SELECT t1.c1, t1.c2 FROM t1, t2 WHERE t1.c3 = t2.c3;
沿袭无法跟踪因单独的不连贯查询而产生的数据的移动。例如,以下一组查询 不会 导致表
sourceTable1与表target_table之间的沿袭。SET read_output1 = (SELECT c1 FROM sourceTable1); INSERT INTO target_table(c1) VALUES ($read_output1);
This limitation applies to anything that caused the data movement, including stored procedures.
You cannot use the GET_LINEAGE (SNOWFLAKE.CORE) function to obtain lineage information related to a stored procedure.