在 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 中灵活命名表的主要内容,如果未能解决你的问题,请参考以下文章

从命名阶段将数据合并到表中

我们可以使用雪花中的存储过程将文件从文件位置加载到命名内部阶段吗?

EXCEL 我想用日期命名自动建立多个工作表

用vba新建工作表,并命名

数据库存命名规则

JPA命名查询与标准API?