【发布时间】:2022-11-27 22:10:36
【问题描述】:
我在雪花中有一个观点:
CREATE OR REPLACE VIEW DATABASE.PUBLIC.ALL_TABLES(
ID,
CODE,
VARID
) as
Select
ID::string as ID,
CODE::string as CODE,
VARID::string as VARID,
From
(SELECT ID, CODE, VARID FROM TABLE_A) union all
(SELECT ID, CODE, VARID FROM TABLE_B) union all
(SELECT ID, CODE, VARID FROM TABLE_C);
我需要从代码中的视图中选择 varid,但我需要将值转换为大写。
SELECT UPPER(varid) AS varid FROM DATABASE.PUBLIC.ALL_TABLES
但是,这会使查询扫描整个表以将 UPPER() 函数应用于每一行,从而增加扫描的字节数。从上面的视图中选择时,与其应用 UPPER() 函数,不如在视图中应用 UPPER() 函数更好,这样我就不需要每次从中选择时都应用 UPPER() 函数看法。
SELECT varid FROM DATABASE.PUBLIC.ALL_TABLES
CREATE OR REPLACE VIEW DATABASE.PUBLIC.ALL_TABLES(
ID,
CODE,
VARID
) as
Select
ID::string as ID,
CODE::string as CODE,
VARID::string as VARID,
From
(SELECT ID, CODE, UPPER(VARID) AS VARID FROM TABLE_A) union all
(SELECT ID, CODE, UPPER(VARID) AS VARID FROM TABLE_B) union all
(SELECT ID, CODE, UPPER(VARID) AS VARID FROM TABLE_C);
【问题讨论】:
-
你有问题吗?
-
@nbk 从视图外部选择时,在视图内应用 UPPER() 函数而不是应用 UPPER() 函数更好吗?
-
在视图中,但为什么要将它们保存为小写呢?
-
实际上,我认为它是在视图中还是在视图之外并不重要。执行查询时,探查器将确定何时最好应用
UPPER()。将它放在视图中的唯一原因是,如果您不希望任何使用该视图的人能够看到当前情况下的数据。如果您想让该选项对用户开放,请将其置于视图之外。您关于“扫描整个表格”的陈述也有点令人困惑,而不是 Snowflake 的工作原理。
标签: sql snowflake-cloud-data-platform sql-view