Хранимая процедура Snowflake для выполнения инструкции create для внешней таблицы

#javascript #stored-procedures #snowflake-cloud-data-platform #snowflake-sql

Вопрос:

Попытка создать хранимую процедуру в snowflake, которая принимает аргументы для создания инструкции «создать» для внешней таблицы с использованием метаданных промежуточного файла из схемы вывода и ее выполнения. Поскольку я довольно новичок в хранимой процедуре Snowflake , был бы очень признателен за информацию о том, как этого добиться?

 CREATE OR REPLACE PROCEDURE DatabaseName.SchemaName.TEST_PROCEDURE(DB_NAME STRING, SCHEMA_NAME 
STRING, TABLE_NAME STRING , FILEPATH STRING)
returns string 
language javascript
as
$
var cmd = `
   SELECT
   'CREATE OR REPLACE EXTERNAL TABLE ' || DB_NAME ||'.'||SCHEMA_NAME||'.'||TABLE_NAME|| ' (' 
||
LISTAGG(
  CLEAN_COLUMN || ' ' || TYPE || ' AS (' ||
  'VALUE:'|| CLEAN_COLUMN || '::' || TYPE || ')', ', ') AS QUERY_TEXT
 FROM (
SELECT *
,CASE WHEN COLUMN_NAME LIKE '%#%' THEN '"'||COLUMN_NAME||'"' ELSE COLUMN_NAME END AS CLEAN_COLUMN
from table(
  INFER_SCHEMA(
    LOCATION => '@db.src_xxx.stg_yyyy/2021-awdfg'
    ,FILE_FORMAT => '@db.src_xxx.parquet'
  )
) A
 )
`
var sql = snowflake.createStatement({sqlText: cmd});
var result = sql.execute();
    return 'Success';
$;
 

Комментарии:

1. Я предполагаю, что он сгенерирует только один оператор CREATE TABLE, это правильно?

2. Можете ли вы поделиться инструкцией create о том, как вы хотите создать внешнюю таблицу?

3. Да, он создаст один оператор CREATE TABLE, используя метаданные промежуточного файла, как указано в разделе Расположение.

4. Поскольку в промежуточном состоянии есть несколько файлов , процедура должна «создавать таблицу» для каждого из них при вызове ( таким образом, параметризуя расположение файла)