如何强制雪花视图继承表注释和列注释?



>最近开始使用雪花,其任务是确保表和这些表顶部的视图对它们和列有注释。

Snowflake 中是否有选项可以将基础表和列的注释导入视图中,这样我就不必再次在视图和视图列上手动创建相同的注释?

如果没有更好的解决方法?

这些只是使用select * from the table的直接视图(原因是我们只向外部用户公开视图而不是表(

Snowflake 确实允许您在 CREATE [OR REPLACE] VIEW 语句的列别名子句中添加可选的列注释,如下所示:

CREATE OR REPLACE VIEW db.schema.view_name (
col1 COMMENT 'this is col1',
...
colx COMMENT 'this is colx'
)
AS
SELECT col1, ..., colx FROM ...;

见 https://docs.snowflake.com/en/sql-reference/sql/create-view.html

创建视图后,只能通过 COMMENT 和 ALTER VIEW 语句更改视图注释,而不能通过列注释更改列注释,除非重新创建视图。

在 Snowflake 中,您可以向视图和表格添加注释。 此外,还可以为表中的每一列添加注释。 遗憾的是,您无法向视图列添加注释。

但是,如果要将表的注释应用于名称相似的视图(必须有一些命名标准允许您从表名称派生视图名称(,则可以以编程方式执行此操作。

在存储过程中,使用下面的查询获取所有表注释。 然后遍历每一行并动态构建和执行 ALTER TABLE SET COMMENT = 。

SELECT TABLE_CATALOG , TABLE_SCHEMA, TABLE_NAME, COMMENT
FROM 
INFORMATION_SCHEMA."TABLES"  
WHERE
TABLE_TYPE = 'BASE TABLE';

还可以从信息架构中检索表列注释,但无法将其添加到视图元数据中。

SELECT c.TABLE_NAME, c.COLUMN_NAME, c.COMMENT
FROM 
INFORMATION_SCHEMA."TABLES"  t
JOIN INFORMATION_SCHEMA."COLUMNS" c
ON t.TABLE_CATALOG = c.TABLE_CATALOG 
AND t.TABLE_SCHEMA = c.TABLE_SCHEMA 
AND t.TABLE_NAME = c.TABLE_NAME 
WHERE
t.TABLE_TYPE = 'BASE TABLE';

希望这有帮助。

最新更新