如何使用雪花中的变量替换数据库名称?
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
我可以使用变量来查询过滤条件。例如,
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 |