Гибко называть таблицы в Snowflake - PullRequest
1 голос
/ 10 октября 2019

(отправка от имени клиента Snowflake)

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

Iхотел бы гибко именовать таблицы, которые я создаю.

Например

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

script 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 голосов
/ 10 октября 2019

Из 2 вариантов я бы пошел с хранимой процедурой по Snowsql, потому что это более переносимое решение. Snowsql должен выполняться с хост-машины, в то время как хранимые процедуры могут выполняться из любого места, так как они выполняются внутри Snowflake. Таким образом, если вы хотите сделать это в процессе ELT / ETL с использованием стороннего инструмента, Python, Java и т. Д., Вы можете просто вызвать SP для создания таблицы.

Как примечание,Вероятно, я бы создал SP, который переименовал бы таблицу для меня, вместо того, чтобы делать полный оператор CTAS. Затем ваш процесс может создать таблицу без участия SP, а затем вы можете передать значения имени таблицы + $ name в SP и переименовать ее для вас. В любом случае, но я так и сделаю.

...