Snowflake Information Schema

Snowflake Information Schema(又名“数据字典”)由一组系统定义的视图和表函数组成,这些视图和表函数提供有关在账户中创建的对象的大量元数据信息。该 Snowflake Information Schema 基于 SQL-92 ANSI Information Schema,但添加了 Snowflake 特定的视图和函数。

Information Schema 作为名为 INFORMATION_SCHEMA 的架构来实现,Snowflake 自动在账户的每个数据库中创建。

备注

ANSI 使用术语“目录”来引用数据库。为了保持与标准的兼容性,Snowflake Information Schema 主题在适用时使用“目录”代替“数据库”。就所有意图和目的而言,这些术语在概念上是等价和可互换的。

本主题内容:

什么是 INFORMATION_SCHEMA?

在账户中创建的每个数据库都会自动包含一个名为 INFORMATION_SCHEMA 的内置只读架构。该架构包含以下对象:

  • 数据库中包含的所有对象的视图,以及账户级对象(即角色、仓库和数据库等非数据库对象)的视图

  • 整个账户的历史数据和使用情况数据的表函数。

Information Schema 视图和表函数

视图列表

INFORMATION_SCHEMA 中的视图显示有关数据库中定义的对象的元数据,以及所有数据库中通用的非数据库账户级对象的元数据。INFORMATION_SCHEMA 的每个实例都包括:

  • ANSI 标准视图,适用于与 Snowflake 相关的数据库和账户级对象。

  • Snowflake 特定视图,适用于 Snowflake 支持的非标准对象(暂存区、文件格式等)。

除非另有说明,否则 Snowflake Information Schema 视图均为 ANSI 标准:

视图

类型

Snowflake 特定

备注

APPLICABLE_ROLES

账户

CLASS_INSTANCE_FUNCTIONS

数据库

CLASS_INSTANCE_PROCEDURES

数据库

CLASS_INSTANCES

数据库

CLASSES

数据库

COLUMNS

数据库

CURRENT_PACKAGES_POLICY

数据库

DATABASES

账户

ELEMENT_TYPES

数据库

ENABLED_ROLES

账户

EVENT_TABLES

数据库

EXTERNAL_TABLES

数据库

FIELDS

数据库

FILE FORMATS

数据库

FUNCTIONS

数据库

HYBRID_TABLES

数据库

INDEXES

数据库

INDEX_COLUMNS

数据库

INFORMATION_SCHEMA_CATALOG_NAME

账户

LOAD_HISTORY

账户

数据保留 14 天。

MODEL_VERSIONS

数据库

OBJECT_PRIVILEGES

账户

PACKAGES

数据库

PIPES

数据库

PROCEDURES

数据库

REFERENTIAL_CONSTRAINTS

数据库

REPLICATION_DATABASES

账户

REPLICATION_GROUPS

账户

SCHEMATA

数据库

SEQUENCES

数据库

SERVICES

数据库

STAGES

数据库

TABLE_CONSTRAINTS

数据库

TABLE_PRIVILEGES

数据库

TABLE_STORAGE_METRICS

数据库

TABLES

数据库

显示表和视图。

USAGE_PRIVILEGES

数据库

仅显示序列的权限;要查看其他类型对象的权限,请使用 OBJECT_PRIVILEGES。

VIEWS

数据库

表函数列表

INFORMATION_SCHEMA 中的表函数可用于返回存储、仓库、用户登录和查询的账户级使用情况和历史信息:

表函数

数据 保留

备注

AUTOMATIC_CLUSTERING_HISTORY

14 天

结果取决于 MONITOR USAGE 权限。[1]

AUTO_REFRESH_REGISTRATION_HISTORY

14 天

结果取决于 MONITOR USAGE 权限。[1]

COMPLETE_TASK_GRAPHS

60 分钟

仅对 ACCOUNTADMIN 角色、任务所有者(即对任务具有 OWNERSHIP 权限的角色)或具有全局 MONITOR EXECUTION 权限的角色返回结果。

COPY_HISTORY

14 天

结果取决于分配给用户当前角色的权限。

CURRENT_TASK_GRAPHS

不适用

仅对 ACCOUNTADMIN 角色、任务所有者(即对任务具有 OWNERSHIP 权限的角色)或具有全局 MONITOR EXECUTION 权限的角色返回结果。

DATA_METRIC_FUNCTION_REFERENCES

不适用

结果取决于分配给用户当前角色的权限或数据库角色。

DATA_TRANSFER_HISTORY

14 天

结果取决于 MONITOR USAGE 权限。[1]

DATABASE_REFRESH_HISTORY

14 天

结果取决于分配给用户当前角色的权限。

DATABASE_REFRESH_PROGRESS、DATABASE_REFRESH_PROGRESS_BY_JOB

14 天

结果取决于分配给用户当前角色的权限。

DATABASE_REPLICATION_USAGE_HISTORY

14 天

仅对 ACCOUNTADMIN 角色返回结果。

DATABASE_STORAGE_USAGE_HISTORY

6 个月

结果取决于 MONITOR USAGE 权限。[1]

DYNAMIC_TABLES

7 天

结果取决于 MONITOR USAGE 权限。[1]

DYNAMIC_TABLE_GRAPH_HISTORY

7 天

结果取决于 MONITOR USAGE 权限。[1]

DYNAMIC_TABLE_REFRESH_HISTORY

7 天

结果取决于 MONITOR USAGE 权限。[1]

EXTERNAL_FUNCTIONS_HISTORY

14 天

结果取决于 MONITOR USAGE 权限。[1]

EXTERNAL_TABLE_FILES

不适用

结果取决于分配给用户当前角色的权限。

EXTERNAL_TABLE_FILE_REGISTRATION_HISTORY

30 天

结果取决于分配给用户当前角色的权限。

LOGIN_HISTORY、LOGIN_HISTORY_BY_USER

7 天

结果取决于分配给用户当前角色的权限。

MATERIALIZED_VIEW_REFRESH_HISTORY

14 天

结果取决于 MONITOR USAGE 权限。[1]

NOTIFICATION_HISTORY

14 天

仅对 ACCOUNTADMIN 角色、集成所有者(即对集成具有 OWNERSHIP 权限的角色)或对集成具有 USAGE 权限的角色返回结果。

PIPE_USAGE_HISTORY

14 天

结果取决于 MONITOR USAGE 权限。[1]

POLICY_REFERENCES

不适用

仅对 ACCOUNTADMIN 角色返回结果。

QUERY_ACCELERATION_HISTORY

14 天

结果取决于 MONITOR USAGE 权限。[1]

QUERY_HISTORY、QUERY_HISTORY_BY_*

7 天

结果取决于分配给用户当前角色的权限。

REPLICATION_GROUP_REFRESH_HISTORY

14 天

仅返回对复制或故障转移组具有任何权限的角色的结果。

REPLICATION_GROUP_REFRESH_PROGRESS、REPLICATION_GROUP_REFRESH_PROGRESS_BY_JOB

14 天

仅返回对复制或故障转移组具有任何权限的角色的结果。

REPLICATION_GROUP_USAGE_HISTORY

14 天

结果取决于 MONITOR USAGE 权限。[1]

REPLICATION_USAGE_HISTORY

14 天

仅对 ACCOUNTADMIN 角色返回结果。

REST_EVENT_HISTORY

7 天

仅对 ACCOUNTADMIN 角色返回结果。

SEARCH_OPTIMIZATION_HISTORY

14 天

结果取决于 MONITOR USAGE 权限。[1]

SERVERLESS_TASK_HISTORY

14 天

结果取决于 MONITOR USAGE 权限。[1]

STAGE_DIRECTORY_FILE_REGISTRATION_HISTORY

14 天

结果取决于分配给用户当前角色的权限。

STAGE_STORAGE_USAGE_HISTORY

6 个月

结果取决于 MONITOR USAGE 权限。[1]

TAG_REFERENCES

不适用

仅对有权访问指定对象的角色返回结果。

TAG_REFERENCES_ALL_COLUMNS

不适用

仅对有权访问指定对象的角色返回结果。

TASK_DEPENDENTS

不适用

仅对 ACCOUNTADMIN 角色或任务所有者(对任务具有 OWNERSHIP 权限的角色)返回结果。

TASK_HISTORY

7 天

仅对 ACCOUNTADMIN 角色、任务所有者(即对任务具有 OWNERSHIP 权限的角色)或具有全局 MONITOR EXECUTION 权限的角色返回结果。

VALIDATE_PIPE_LOAD

14 天

结果取决于分配给用户当前角色的权限。

WAREHOUSE_LOAD_HISTORY

14 天

结果取决于 MONITOR USAGE 权限。[1]

WAREHOUSE_METERING_HISTORY

6 个月

结果取决于 MONITOR USAGE 权限。[1]

[1] 如果已将 MONITOR USAGE 全局权限分配角色,则返回结果;否则,仅对 ACCOUNTADMIN 角色返回结果。

一般使用说明

  • 每个 INFORMATION_SCHEMA 架构都是只读的(即架构以及架构中的所有视图和表函数都不能修改或删除)。

  • 对 INFORMATION_SCHEMA 视图的查询不能保证并发 DDL 的一致性。例如,如果在执行长时间运行 INFORMATION_SCHEMA 的查询时创建了一组表,则查询结果可能包括创建的部分表、无表或所有表。

  • 视图或表函数的输出取决于是否对用户当前角色授予权限。查询 INFORMATION_SCHEMA 视图或表函数时,仅返回当前角色已获得访问权限的对象。

  • 为了防止出现性能问题,如果 INFORMATION_SCHEMA 查询中指定的筛选器没有足够选择性,则返回以下错误:

    Information schema query returned too much data. Please repeat query with more selective predicates.

  • Snowflake 特定的视图可能会发生变化。避免从这些视图中选择所有列。相反,请选择所需的列。例如,如果您想选择 name 列,请使用 SELECT name,而不是 SELECT *

小技巧

Information Schema 视图针对从字典中检索一小部分对象的查询进行了优化。 尽可能通过筛选架构和对象名称来最大限度提高查询的性能。

有关更多使用信息和详细信息,请参阅 Snowflake Information Schema 博客文章

将 SHOW 命令替换为 Information Schema 视图的注意事项

这些 INFORMATION_SCHEMA 视图为 SHOW <objects> 命令提供的相同信息提供了一个 SQL 接口。您可以使用视图来替代这些命令;但是,在切换之前需要考虑一些关键差异:

注意事项

SHOW 命令

Information Schema 视图

仓库

不需要执行。

Warehouse 必须正在运行且当前正被用于查询视图。

模式匹配/筛选

不区分大小写(使用 LIKE 筛选时)。

标准(区分大小写) SQL 语义。Snowflake 在内部自动将不带引号的不区分大小写的标识符转换为大写,因此必须在 Information Schema 视图中以大写形式查询未加引号的对象名称。

查询结果

默认情况下,大多数 SHOW 命令将结果限制于当前架构。

视图显示当前/指定数据库中的所有对象。要针对特定架构进行查询,必须使用筛选器谓词(例如 ... WHERE table_schema = CURRENT_SCHEMA()...)。请注意,缺少足够选择性筛选器的 Information Schema 查询将返回错误并且不会执行(请参阅本主题内容中的 常规使用说明)。

限定查询中 Information Schema 视图和表函数的名称

查询 INFORMATION_SCHEMA 视图或表函数时,您必须使用视图/表函数的限定名称,或者 INFORMATION_SCHEMA 架构必须用于会话。

例如:

  • 若使用视图和表函数的完全限定名称(database.information_schema.name 格式)进行查询,请执行以下操作:

    SELECT table_name, comment FROM testdb.INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'PUBLIC' ... ;
    
    SELECT event_timestamp, user_name FROM TABLE(testdb.INFORMATION_SCHEMA.LOGIN_HISTORY( ... ));
    
    Copy
  • 若使用视图和表函数的限定名称(information_schema.name 格式)进行查询,请执行以下操作:

    USE DATABASE testdb;
    
    SELECT table_name, comment FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'PUBLIC' ... ;
    
    SELECT event_timestamp, user_name FROM TABLE(INFORMATION_SCHEMA.LOGIN_HISTORY( ... ));
    
    Copy
  • 若要使用用于会话的 INFORMATION_SCHEMA 架构进行查询,请执行以下操作:

    USE SCHEMA testdb.INFORMATION_SCHEMA;
    
    SELECT table_name, comment FROM TABLES WHERE TABLE_SCHEMA = 'PUBLIC' ... ;
    
    SELECT event_timestamp, user_name FROM TABLE(LOGIN_HISTORY( ... ));
    
    Copy

    备注

    如果您使用从共享创建的数据库,并且已选择 INFORMATION_SCHEMA 作为会话的当前架构,则 SELECT 语句可能会失败,并出现以下错误:

    INFORMATION_SCHEMA does not exist or is not authorized

    如果发生这种情况,请为会话的当前架构选择其他架构。

有关更多详细示例,请参阅每个视图/表函数的参考文档。

语言: 中文