Все возможные результаты от RESULT_SCAN известны заранее? - PullRequest
0 голосов
/ 29 октября 2019

(Пользователь Snowflake обратил на это мое внимание ... Любые рекомендации?)


После оператора слияния «набор результатов»может иметь 1, 2 или 3 столбца, возвращаемых в зависимости от потенциала слияния.

Например,

MERGE ... КОГДА СООТВЕТСТВУЕТ ПОСЛЕ ОБНОВЛЕНИЯ ... будет производиться только"число строк обновлено"

MERGE ... КОГДА СООТВЕТСТВУЕТ ДАННОМУ ОБНОВЛЕНИЮ ... КОГДА НЕ СОГЛАСОВАНО С ПОТОКОМ ВСТАВКИ ... будет производить "число обновленных строк" и "количество вставленных строк"

MERGE ... WHEN MATCHED ... THEN DELETE также покажет «количество удаленных строк» ​​

Это означает, что RESULT_SCAN может возвращать разные столбцы в зависимости от возможностей объединения.

Есть ли причина, по которой MERGE не может вернуть все три столбца независимо? В конце концов, даже простой «UPDATE MyTable SET MyColumn = 5» будет возвращать как «количество обновленных строк», так и «количество обновленных многослойных строк», даже если возможность оператора никогда не приведет к последнему.

Далее,есть ли где-нибудь в документации Snowflake список, показывающий все возможные столбцы в наборе результатов для какой-либо операции? Я знаю, что мог бы «ОПИСАТЬ РЕЗУЛЬТАТ (QueryID)», чтобы получить список имен столбцов, но это дополнительная работа, которую я надеялся избежать.

Мы получили этот ответ на наш первоначальный вопрос:

Когда вы используете метод result_scan, вы используете конкретный идентификатор? Если вы хотите показать все три столбца независимо, вы можете рассмотреть возможность использования

desc result last_query_id();

select * from table(result_scan(last_query_id()));

ссылка: https://docs.snowflake.net/manuals/sql-reference/functions/result_scan.html

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

Вы в пользовательском интерфейсе, вы сможете увидеть имена столбцов в обозревателе объектов: https://docs.snowflake.net/manuals/user-guide/snowflake-manager.html#worksheet-page

HOWEVER:

Если у MERGE нет пути, который использует INSERT, то результирующий набор / RESULT_SCAN не возвращает «количество вставленных строк»колонка. Для меня это проблема. Аналогично для путей к ОБНОВЛЕНИЮ или УДАЛЕНИЮ.

Я знаю, как получить все столбцы для таблицы. У меня вопрос, как получить все столбцы для данного запроса через RESULT_SCAN. Поскольку он динамический и зависит от идентификатора запроса, не могли бы вы перечислить все возможные столбцы из оператора INSERT, оператора MERGE, оператора DESCRIBE и т. Д ...?

...