处理 SHOW 命令输出和 Snowflake 视图中的新列¶
SHOW <objects> 命令的输出和 Snowflake 视图(例如,SNOWFLAKE 数据库 中 ACCOUNT_USAGE 架构 中的视图和 INFORMATION_SCHEMA 架构 中的视图)中会定期引入新列。
如果您的脚本或代码依赖于包含特定列数的结果集,或者依赖于列的顺序,则引入新列可能会影响该脚本或代码。
临时解决新列引入的问题¶
如果您的脚本或代码因引入新列而遇到问题,Snowflake 管理员(获得 ACCOUNTADMIN 角色授权的用户)可以更改为执行特定 SHOW 命令或 Snowflake 视图的 SELECT * 查询而返回的列。这些列称为 默认列。
覆盖 SHOW 命令的默认列¶
要从 SHOW 命令的输出中排除新引入的列,请调用 SYSTEM$SET_DEFAULT_COLUMNS_OVERRIDE_FOR_SHOW_COMMAND 函数,指定对象类型和应返回的列的列表。
假设在 SHOW NOTIFICATION INTEGRATIONS 命令的输出中引入了新的 direction 列。为防止新的 direction 列包含在该命令的输出中,请调用 SYSTEM$SET_DEFAULT_COLUMNS_OVERRIDE_FOR_SHOW_COMMAND,指定 'NOTIFICATION INTEGRATIONS' 作为对象的类型。传入应在输出中返回的列的列表(该列表以逗号分隔,不包括 direction):
当您账户中的任何人运行 SHOW NOTIFICATION INTEGRATIONS 命令时,输出中将不会返回新的 direction 列。
重置 SHOW 命令的默认列¶
如果您需要撤销之前的 SYSTEM$SET_DEFAULT_COLUMNS_OVERRIDE_FOR_SHOW_COMMAND 调用,并针对特定对象类型在 SHOW 命令中返回所有列,请调用 SYSTEM$UNSET_DEFAULT_COLUMNS_OVERRIDE_FOR_SHOW_COMMAND 函数,指定对象的类型。例如:
获取 SHOW 命令的默认列的列表¶
如果您需要确定是否针对特定对象类型调用了 SYSTEM$SET_DEFAULT_COLUMNS_OVERRIDE_FOR_SHOW_COMMAND,并且您希望在该命令的输出中返回列的列表,请调用 SYSTEM$GET_DEFAULT_COLUMNS_OVERRIDE_FOR_SHOW_COMMAND 函数,指定对象的类型。例如:
如果之前没有调用过 SYSTEM$SET_DEFAULT_COLUMNS_OVERRIDE_FOR_SHOW_COMMAND,或者如果调用了 SYSTEM$UNSET_DEFAULT_COLUMNS_OVERRIDE_FOR_SHOW_COMMAND,则该函数返回空字符串。
覆盖 Snowflake 视图的默认列¶
要从 Snowflake 视图的 SELECT * 查询结果中排除新引入的列,请调用 SYSTEM$SET_DEFAULT_COLUMNS_OVERRIDE_FOR_SYSTEM_OBJECT 函数,指定对象类型、包含该视图的数据库和架构、该视图的名称以及应返回的列的列表。
假设在 ACCOUNT_USAGE 架构 </sql-reference/account-usage/databases>` 的 DATABASES 视图中引入了新的 ``replicable_with_failover_groups` 列。为防止在该视图的 SELECT * 查询结果中返回新的 replicable_with_failover_groups 列,请调用 SYSTEM$SET_DEFAULT_COLUMNS_OVERRIDE_FOR_SYSTEM_OBJECT,指定 'VIEW' 作为对象类型,'SNOWFLAKE' 作为数据库,'ACCOUNT_USAGE' 作为架构,以及 'TABLES' 作为视图。传入应在输出中返回的列的列表(该列表以逗号分隔,不包括 replicable_with_failover_groups):
该示例使用 || 运算符构造字符串,其中包含以逗号分隔的列列表。
当您账户中的任何人执行 DATABASES 视图的 SELECT * 查询时,输出中将不会返回新的 replicable_with_failover_groups 列。
如果您需要为 INFORMATION_SCHEMA 视图调用此函数,请为数据库名称传入空字符串。例如,要从 INFORMATION_SCHEMA 架构 </sql-reference/info-schema/databases>` 中的 DATABASES 视图的 :code:`SELECT * 查询结果中排除 replicable_with_failover_groups 列,请执行以下操作:
重置 Snowflake 视图的默认列¶
如果您需要撤销之前的 SYSTEM$SET_DEFAULT_COLUMNS_OVERRIDE_FOR_SYSTEM_OBJECT 调用,并在 Snowflake 视图的 SELECT * 查询中返回所有列,请调用 SYSTEM$UNSET_DEFAULT_COLUMNS_OVERRIDE_FOR_SYSTEM_OBJECT 函数,指定对象类型、包含该视图的数据库和架构,以及该视图的名称。例如:
如果您需要为 INFORMATION_SCHEMA 视图调用此函数,请为数据库名称传入空字符串。例如:
获取 Snowflake 视图的默认列的列表¶
如果您需要确定是否针对特定视图调用了 SYSTEM$SET_DEFAULT_COLUMNS_OVERRIDE_FOR_SYSTEM_OBJECT,并且您希望在该视图的 SELECT * 查询中返回列的列表,请调用 SYSTEM$GET_DEFAULT_COLUMNS_OVERRIDE_FOR_SYSTEM_OBJECT 函数,指定对象类型、包含该视图的数据库和架构,以及该视图的名称。例如:
如果您需要为 INFORMATION_SCHEMA 视图调用此函数,请为数据库名称传入空字符串。例如:
如果之前没有调用过 SYSTEM$SET_DEFAULT_COLUMNS_OVERRIDE_FOR_SYSTEM_OBJECT,或者如果调用了 SYSTEM$UNSET_DEFAULT_COLUMNS_OVERRIDE_FOR_SYSTEM_OBJECT,则该函数返回空字符串。
从之前针对 SHOW 命令和 Snowflake 视图的所有调用中获取列的列表¶
要获取针对所有 SHOW 命令和 Snowflake 视图所覆盖的列的列表,请调用 SYSTEM$GET_ALL_DEFAULT_COLUMNS_OVERRIDES 函数。例如:
该函数返回一个包含 JSON 对象数组的字符串。每个对象表示特定 SHOW 命令或 Snowflake 视图的列的列表。例如:
有关每个对象中的名/值对说明,请参阅 SYSTEM$GET_ALL_DEFAULT_COLUMNS_OVERRIDES。
更新脚本和代码以防在引入新列时出现问题¶
为防止因引入新列而出现问题,脚本和代码应在查询 Snowflake 视图时从 SHOW 命令的输出中选择特定列。
要从 SHOW 命令的输出中选择特定列,您可以使用 管道运算符。请参见 为 SHOW 命令的输出选择列的列表 中的示例。