Захват и запуск result_scan с использованием query_id в процедуре Snowflake

#snowflake-cloud-data-platform

Вопрос:

Попытка запустить таблицу описания и запуск RESULT_SCAN по идентификатору запроса запроса таблицы описания.

Процедура:

 var qry = ` describe table TEST_TABLE `;
var qry_rslt = snowflake.execute({sqlText: qry});
var qry_id= qry_rslt.getQueryId();

var qry2 = ` select * from table(result_scan('` qry_id `')) `
snowflake.execute({sqlText: qry2});
 

Процедура возвращает значение Null и не запускает SQL. При ручном запуске запроса на проверку результатов в нем говорится, что оператор не найден.

Любая идея, как прочитать, описывает результат.

Ответ №1:

На самом деле вы не читаете результаты второго запроса. Он запускает его, но не собирает результаты. При этом будет собран только первый столбец результирующего набора:

 create or replace procedure test()
returns string
language javascript
as
$

var qry = ` describe table TEST_TABLE `;
var qry_rslt = snowflake.execute({sqlText: qry});
var qry_id= qry_rslt.getQueryId();

var qry2 = ` select * from table(result_scan('${qry_id}')) `;
rs = snowflake.execute({sqlText: qry2});

var out = "";
var i = 0;

while (rs.next()) {
    if (i   > 0) out  = ",";
    out  = rs.getColumnValue(1);
}

return out;

$;

call test();
 

Вы хотите получить весь DDL в одном заявлении? Если это так, вы можете запустить get_ddl , а затем прочитать только первую строку, первый столбец. У него будет DDL для всей таблицы. Если вам нужна таблица, вам нужно прочитать строки и столбцы, чтобы сделать с ними то, что нужно сделать.