(代表Snowflake客户提交)
...................................
我想灵活地命名我创建的表。
例如
Set name = April
然后
Create table customer_data_$name as
到目前为止,我已经找到了两个推荐的选项:
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;
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。在这种情况下还有其他建议的选项可以利用吗?
...................................
任何建议或其他建议将不胜感激。谢谢!
在这两个选项中,我将通过Snowsql使用存储过程,因为它是更可移植的解决方案。 Snowsql需要在主机上执行,而存储过程则可以在任何地方执行,因为它们在Snowflake中运行。这样,如果您想使用第三方工具python,java等在ELT / ETL流程中执行此操作,则只需调用SP即可创建表。
作为说明,我可能会创建一个为我重命名表的SP,而不是执行完整的CTAS语句。然后,您的过程可以在不涉及SP的情况下创建表,然后可以将表名+ $ name值传递到SP中,并为您重命名。不管哪种方式都有效,但这就是我要做的方式。