在 Snowflake 中灵活命名表
Posted
技术标签:
【中文标题】在 Snowflake 中灵活命名表【英文标题】:Flexibly naming tables in Snowflake 【发布时间】:2019-10-10 14:25:21 【问题描述】:(代表 Snowflake 客户提交)
………………
我想灵活命名我创建的表。
例如
Set name = April
然后
Create table customer_data_$name as
到目前为止,我已经找到了两个推荐的选项:
1 - 使用 Snowsql:
snowsql -c myconn -w trainingwh --variable NAME=April -f test.sql -o variable_substitution=True
脚本 test.sql:
create table mytab_&NAME as
select current_timestamp ts;
2 - 使用 javascript 存储过程:
create or replace procedure Proc_CT(NAME varchar)
RETURNS varchar(22)
LANGUAGE JAVASCRIPT
Execute as OWNER
as
$$
var ct_qry = `create or replace table mytab_`+NAME+`(i int);`
var ct_stmt = snowflake.createStatement( sqlText: ct_qry );
ct_stmt.execute();
return 'Done.';
$$
;
CALL Proc_CT('April');
两个问题:
A.在这两个建议中,是否有任何理由比另一个多利用一个?
B.在这种情况下,还有其他推荐的选项可以利用吗?
………………
非常感谢任何建议或其他建议。谢谢!
【问题讨论】:
【参考方案1】:在这 2 个选项中,我会使用 Snowsql 上的存储过程,因为它是一种更便携的解决方案。 Snowsql 需要在主机上执行,而存储过程可以在任何地方执行,因为它们在 Snowflake 中运行。这样,如果您想在 ELT/ETL 进程中使用第三方工具、python、java 等执行此操作,您只需调用 SP 来创建您的表。
作为说明,我可能会创建一个为我重命名表的 SP,而不是执行完整的 CTAS 语句。然后,您的进程可以创建一个不涉及 SP 的表,然后您可以将表名 + $name 值传递给 SP 并让它为您重命名。无论哪种方式都有效,但我就是这样做的。
【讨论】:
以上是关于在 Snowflake 中灵活命名表的主要内容,如果未能解决你的问题,请参考以下文章