You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询Snowflake指定Schema下的表父子关联关系?

Snowflake指定Schema表关联(父子关系)查询方案

核心查询逻辑

Snowflake中显式定义的外键约束(即表之间的父子关联关系)存储在INFORMATION_SCHEMA下的系统视图中,你可以通过关联TABLE_CONSTRAINTS、REFERENTIAL_CONSTRAINTS、KEY_COLUMN_USAGE三个视图获取完整的关联信息。

可直接使用的查询语句

SELECT
    -- 子表(外键所属表)信息
    tc.table_schema AS child_schema,
    tc.table_name AS child_table,
    kcu.column_name AS child_foreign_key_column,
    -- 父表(被引用的主键所属表)信息
    ccu.table_schema AS parent_schema,
    ccu.table_name AS parent_table,
    ccu.column_name AS parent_primary_key_column,
    tc.constraint_name AS foreign_key_constraint_name
FROM
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu
    ON tc.constraint_catalog = kcu.constraint_catalog
    AND tc.constraint_schema = kcu.constraint_schema
    AND tc.constraint_name = kcu.constraint_name
INNER JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS rc
    ON tc.constraint_catalog = rc.constraint_catalog
    AND tc.constraint_schema = rc.constraint_schema
    AND tc.constraint_name = rc.constraint_name
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE ccu
    ON rc.unique_constraint_catalog = ccu.constraint_catalog
    AND rc.unique_constraint_schema = ccu.constraint_schema
    AND rc.unique_constraint_name = ccu.constraint_name
    AND kcu.ordinal_position = ccu.ordinal_position
WHERE
    tc.constraint_type = 'FOREIGN KEY'
    -- 替换为你的目标数据库名称
    AND tc.table_catalog = 'YOUR_DATABASE'
    -- 替换为你的目标Schema名称,不需要过滤Schema可删除该行
    AND tc.table_schema = 'YOUR_TARGET_SCHEMA'
ORDER BY child_schema, child_table;

注意事项

  • 只有建表时显式定义了外键约束的关联关系才可以通过上述语句查询到。Snowflake默认不强制外键约束校验,但只要建表时声明了外键,就会存储到系统视图中。
  • 如果你的表未显式声明外键约束,系统视图不会存储对应关联关系,需要你通过ETL代码逻辑、SQL查询历史、数据血缘功能手动推导关联。
  • 联合主键对应的多字段外键关联也会在查询结果中按ordinal_position顺序返回对应字段映射。

内容的提问来源于stack exchange,提问作者jmizzo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 11:24:04