如何使用雪花中的变量替换数据库名称?

How can i replace a db name using variable in snowflake?

我可以使用变量来查询过滤条件。例如,

set mytime = '2021-12-12 09:00:00';

select col1
from db1.schema.table1
where event_time > $mytime

但是,如果我用同样的方法把db1换成变量,就不行了。即,

set mytime = '2021-12-12 09:00:00';
set db_name = 'db1';

select col1
from $db_name.schema.table1
where event_time > $mytime

因此,如果您的变量具有完全限定名称 db/schema/table 名称并且您使用 INDENTIFIER 函数可以提供帮助。

create table test.test.db1(id number);

set db_name = 'test.test.db1';

insert into test.test.db1 values (1),(2),(3);

然后这有效:

select id
from identifier ($db_name);
ID
1
2
3

但即时编写字符串目前不起作用:

select id
from identifier ($just_db_name||'.test.db1');

但是你可以分两步:

set fqn_db_name = $just_db_name||'.test.db1';

select id
from identifier ($fqn_db_name);
ID
1
2
3

雪花脚本:

使用snowflake scripting,它可以作为单个“语句”来完成,如下所示:

begin
    let fqn text := $just_db_name || '.test.db1';
    let res resultset := (select id from identifier(:fqn));
    return table(res);
end; 
ID
1
2
3