Может ли Snowflake DB UDF выполнять команды SQL? - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть требование в Snowflake, где я должен сгенерировать немного SQL, а затем выполнить его для создания новой таблицы.

Я успешно сгенерировал оператор create table, создав UDF (жестко запрограммированный в данный момент)

CREATE OR REPLACE FUNCTION COOL_CARGO.test()
  RETURNS STRING 
  AS 
  $$
  SELECT substr(regexp_replace(GET_DDL('TABLE', 'COOL_CARGO.DIM_BRANCH'),('DIM_BRANCH'),'COOL_CARGO.DIM_BRANCH_ERR'), 0, LENGTH(regexp_replace(GET_DDL('TABLE', 'COOL_CARGO.DIM_BRANCH'),('DIM_BRANCH'),'COOL_CARGO.DIM_BRANCH_ERR')) -2)||','||'  etl_err_date timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  etl_id_run int DEFAULT NULL,
  etl_err_noe int DEFAULT NULL,
  etl_err_desc varchar(512) DEFAULT NULL,
  etl_err_col varchar(256) DEFAULT NULL,
  etl_err_cod varchar(256) DEFAULT NULL'||');'
 $$
 ;

Это выводит следующее

create or replace TABLE COOL_CARGO.DIM_BRANCH_ERR (
    TK_BRANCH NUMBER(38,0),
    GB_BRANCH_CODE VARCHAR(256),
    GB_BRANCH_NAME VARCHAR(256),
    GB_BRANCH_CITY VARCHAR(256),
    GB_BRANCH_STATE VARCHAR(256),
    BG_BRANCH_HOME_PORT VARCHAR(256),
    BG_BRANCH_COUNTRY_CODE VARCHAR(256),
    BG_BRANCH_COUNTRY_NAME VARCHAR(256)
,  etl_err_date timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  etl_id_run int DEFAULT NULL,
  etl_err_noe int DEFAULT NULL,
  etl_err_desc varchar(512) DEFAULT NULL,
  etl_err_col varchar(256) DEFAULT NULL,
  etl_err_cod varchar(256) DEFAULT NULL);

Теперь мне нужно создать UDF, который будет выполнять этот оператор создания таблицы, но так как он только кажется, что возвращает такие вещи, как строки, я не могу заставить его выполнить, вызвав его, например, из другой функции.

CREATE OR REPLACE FUNCTION COOL_CARGO.run_test()
     RETURNS string
     AS
     $$
     COOL_CARGO.test()
      $$
     ;

Затем я пытаюсь запустить функцию для создания таблицы с

select COOL_CARGO.run_test();

Я не знаю, можно ли выполнить то, что я хочу, и я был бы очень раздражен, если это невозможно ...

Можно ли это сделать в Snowflake DB?

...