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 特定 |
备注 |
---|---|---|---|
账户 |
|||
数据库 |
✔ |
||
数据库 |
✔ |
||
数据库 |
✔ |
||
数据库 |
✔ |
||
数据库 |
|||
数据库 |
✔ |
||
账户 |
✔ |
||
数据库 |
|||
账户 |
|||
数据库 |
✔ |
||
数据库 |
✔ |
||
数据库 |
|||
数据库 |
✔ |
||
数据库 |
|||
数据库 |
✔ |
||
数据库 |
✔ |
||
数据库 |
✔ |
||
账户 |
|||
账户 |
✔ |
数据保留 14 天。 |
|
数据库 |
✔ |
||
账户 |
|||
数据库 |
✔ |
||
数据库 |
✔ |
||
数据库 |
✔ |
||
数据库 |
|||
账户 |
✔ |
||
账户 |
✔ |
||
数据库 |
|||
数据库 |
|||
数据库 |
✔ |
||
数据库 |
✔ |
||
数据库 |
|||
数据库 |
|||
数据库 |
✔ |
||
数据库 |
显示表和视图。 |
||
数据库 |
仅显示序列的权限;要查看其他类型对象的权限,请使用 OBJECT_PRIVILEGES。 |
||
数据库 |
表函数列表¶
INFORMATION_SCHEMA 中的表函数可用于返回存储、仓库、用户登录和查询的账户级使用情况和历史信息:
表函数 |
数据 保留 |
备注 |
---|---|---|
14 天 |
结果取决于 MONITOR USAGE 权限。[1] |
|
14 天 |
结果取决于 MONITOR USAGE 权限。[1] |
|
60 分钟 |
仅对 ACCOUNTADMIN 角色、任务所有者(即对任务具有 OWNERSHIP 权限的角色)或具有全局 MONITOR EXECUTION 权限的角色返回结果。 |
|
14 天 |
结果取决于分配给用户当前角色的权限。 |
|
不适用 |
仅对 ACCOUNTADMIN 角色、任务所有者(即对任务具有 OWNERSHIP 权限的角色)或具有全局 MONITOR EXECUTION 权限的角色返回结果。 |
|
不适用 |
结果取决于分配给用户当前角色的权限或数据库角色。 |
|
14 天 |
结果取决于 MONITOR USAGE 权限。[1] |
|
14 天 |
结果取决于分配给用户当前角色的权限。 |
|
14 天 |
结果取决于分配给用户当前角色的权限。 |
|
14 天 |
仅对 ACCOUNTADMIN 角色返回结果。 |
|
6 个月 |
结果取决于 MONITOR USAGE 权限。[1] |
|
7 天 |
结果取决于 MONITOR USAGE 权限。[1] |
|
7 天 |
结果取决于 MONITOR USAGE 权限。[1] |
|
7 天 |
结果取决于 MONITOR USAGE 权限。[1] |
|
14 天 |
结果取决于 MONITOR USAGE 权限。[1] |
|
不适用 |
结果取决于分配给用户当前角色的权限。 |
|
30 天 |
结果取决于分配给用户当前角色的权限。 |
|
7 天 |
结果取决于分配给用户当前角色的权限。 |
|
14 天 |
结果取决于 MONITOR USAGE 权限。[1] |
|
14 天 |
仅对 ACCOUNTADMIN 角色、集成所有者(即对集成具有 OWNERSHIP 权限的角色)或对集成具有 USAGE 权限的角色返回结果。 |
|
14 天 |
结果取决于 MONITOR USAGE 权限。[1] |
|
不适用 |
仅对 ACCOUNTADMIN 角色返回结果。 |
|
14 天 |
结果取决于 MONITOR USAGE 权限。[1] |
|
7 天 |
结果取决于分配给用户当前角色的权限。 |
|
14 天 |
仅返回对复制或故障转移组具有任何权限的角色的结果。 |
|
REPLICATION_GROUP_REFRESH_PROGRESS、REPLICATION_GROUP_REFRESH_PROGRESS_BY_JOB |
14 天 |
仅返回对复制或故障转移组具有任何权限的角色的结果。 |
14 天 |
结果取决于 MONITOR USAGE 权限。[1] |
|
14 天 |
仅对 ACCOUNTADMIN 角色返回结果。 |
|
7 天 |
仅对 ACCOUNTADMIN 角色返回结果。 |
|
14 天 |
结果取决于 MONITOR USAGE 权限。[1] |
|
14 天 |
结果取决于 MONITOR USAGE 权限。[1] |
|
14 天 |
结果取决于分配给用户当前角色的权限。 |
|
6 个月 |
结果取决于 MONITOR USAGE 权限。[1] |
|
不适用 |
仅对有权访问指定对象的角色返回结果。 |
|
不适用 |
仅对有权访问指定对象的角色返回结果。 |
|
不适用 |
仅对 ACCOUNTADMIN 角色或任务所有者(对任务具有 OWNERSHIP 权限的角色)返回结果。 |
|
7 天 |
仅对 ACCOUNTADMIN 角色、任务所有者(即对任务具有 OWNERSHIP 权限的角色)或具有全局 MONITOR EXECUTION 权限的角色返回结果。 |
|
14 天 |
结果取决于分配给用户当前角色的权限。 |
|
14 天 |
结果取决于 MONITOR USAGE 权限。[1] |
|
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 命令将结果限制于当前架构。 |
视图显示当前/指定数据库中的所有对象。要针对特定架构进行查询,必须使用筛选器谓词(例如 |
限定查询中 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( ... ));
若使用视图和表函数的限定名称(
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( ... ));
若要使用用于会话的 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( ... ));
备注
如果您使用从共享创建的数据库,并且已选择 INFORMATION_SCHEMA 作为会话的当前架构,则 SELECT 语句可能会失败,并出现以下错误:
INFORMATION_SCHEMA does not exist or is not authorized
如果发生这种情况,请为会话的当前架构选择其他架构。
有关更多详细示例,请参阅每个视图/表函数的参考文档。