Snowflake中的灵活命名表

问题描述 投票:1回答:1

(代表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。在这种情况下还有其他建议的选项可以利用吗?

...................................

任何建议或其他建议将不胜感激。谢谢!

snowflake-datawarehouse
1个回答
2
投票

在这两个选项中,我将通过Snowsql使用存储过程,因为它是更可移植的解决方案。 Snowsql需要在主机上执行,而存储过程则可以在任何地方执行,因为它们在Snowflake中运行。这样,如果您想使用第三方工具python,java等在ELT / ETL流程中执行此操作,则只需调用SP即可创建表。

作为说明,我可能会创建一个为我重命名表的SP,而不是执行完整的CTAS语句。然后,您的过程可以在不涉及SP的情况下创建表,然后可以将表名+ $ name值传递到SP中,并为您重命名。不管哪种方式都有效,但这就是我要做的方式。

© www.soinside.com 2019 - 2024. All rights reserved.