【问题标题】:Unable to find column names in a FK constraint无法在 FK 约束中找到列名
【发布时间】:2020-06-04 16:14:49
【问题描述】:

我在 Snowflake 中创建了两个表。

create or replace TRANSIENT TABLE TESTPARENT (
COL1 NUMBER(38,0) NOT NULL,
COL2 VARCHAR(16777216) NOT NULL,
COL3 VARCHAR(16777216) NOT NULL,
constraint UNIQ_COL3 unique (COL3)
);


create or replace TRANSIENT TABLE TESTCHILD3 (
COL_A NUMBER(38,0) NOT NULL,
COL_B NUMBER(38,0) NOT NULL,
ABCDEF VARCHAR(16777216) NOT NULL,
constraint FKEY_1 foreign key (COL_A, COL_B) references TEST_DB.PUBLIC.TESTPARENT1(COL1,COL2),
constraint FKEY_2 foreign key (ABCDEF) references TEST_DB.PUBLIC.TESTPARENT(COL3)
);

现在我想执行一个查询并查看FKEY_2 FOREIGN KEY 中涉及的列的名称 在表TESTCHILD3 中,但似乎没有保留此信息的数据库表/视图。我可以找到 UNIQUE KEY & PRIMARY KEY 的列名,但 FOREIGN KEYS 没有。

编辑 我已经尝试过INFORMATION_SCHEMA.TABLE_CONSTRAINTS,以及INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS 和所有其他系统表。没有运气。只有DESC TABLE 给了我一些与CONSTRAINTSCOLUMNS 相关的信息,但也缺少FOREIGN KEY CONSTRAINTS 信息。

【问题讨论】:

    标签: data-warehouse snowflake-cloud-data-platform snowflake-schema


    【解决方案1】:

    在表中显示导入的键 ;

    【讨论】:

      【解决方案2】:

      更新答案:

      我正在检查一些不相关的东西,并注意到一种列出所有主键和外键的非常有效的方法:

      show exported keys in account; -- Foreign keys
      show primary keys in account;
      

      当您限制对表的调用时,您似乎必须请求指向父表的外键:

      show exported keys in table "DB_NAME"."SCHEMA_NAME"."PARENT_TABLE";
      

      您可以查看文档以了解如何将 show 命令限制为特定数据库或架构,但这会很快在表中返回丰富的信息。

      【讨论】:

      • 谢谢,是的,如果您执行SELECT GET_DDL('Table', 'table_name'),那么它将提供包含 FK 和其他所有内容的 DDL。它会起作用的。但我的需要不同,我正在数据建模器中添加对雪花数据仓库的支持,我需要对数据模型中的所有内容进行逆向工程。我可以继续使用 DDL 解析它并创建模型,但是 DDL 会随着新版本的发布而改变,并且解析器可能会在一段时间后停止工作。
      • 明白了。实际上,我写了一些可以遍历每个表并报告 FK 的东西,但由于复杂性,我用 Java 编写了它。我可能会在某个时候重新考虑在 SP 中编写它。我的一位客户采用了我在 JAR 中编写的代码,并做了一些细微的修改,以便与他们的建模工具一起使用。如果对你有用,你可以在这里找到 JAR 文件和 Java 源代码:snowflake.pavlik.us/index.php/2020/01/12/…
      【解决方案3】:

      也许你可以尝试查询这个视图:INFORMATION_SCHEMA.TABLE_CONSTRAINTS

      注意:TABLE_CONSTRAINTS 仅显示会话的当前角色已被授予访问权限的对象。

      更多信息请见:https://docs.snowflake.net/manuals/sql-reference/info-schema/table_constraints.html

      【讨论】:

      • 谢谢,但我已经尝试过了,还有INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS 和所有其他系统表。没有运气。只有 DESC TABLE 给了我一些与约束和列相关的信息,但也缺少 FK 约束的信息。
      猜你喜欢
      • 2011-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-12
      • 2014-01-06
      • 1970-01-01
      • 1970-01-01
      • 2011-02-23
      相关资源
      最近更新 更多