Размер результата запроса в snowflake

#snowflake-cloud-data-platform

#snowflake-cloud-data-platform

Вопрос:

Есть ли способ узнать размер ответа на запрос в Snowflake?

Например, в BigQuery мы получаем размер из временной таблицы, созданной BigQuery в задании запроса.

Спасибо!

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

1. Почему бы не использовать таблицу переходных процессов? Из интереса, почему вы хотите знать эту информацию?

2. Да, таблица переходных процессов позволит нам хранить данные дольше, но проблема в том, что они не удаляются автоматически через некоторое время, верно? Нам это нужно для конкретного варианта использования: наиболее важным требованием для этого является то, что ответ отправляется в приложение браузера, и мы хотим ограничить ответ чем-то вроде 100 МБ на запрос, например

3. Хорошо — но в этом случае никакая информация о размере в Snowflake вам не поможет. Данные в Snowflake сильно сжаты (и информация о размере предназначена для этих сжатых данных) — если вы отправите эти данные в веб-приложение, они, очевидно, будут де-сжаты

Ответ №1:

После выполнения запроса вы всегда можете вернуться к его кэшированным результатам. Все, что вам нужно знать, это идентификатор запроса и сканирование его результатов. Затем вы можете определить размер этих результатов любым методом, который вы выберете для измерения размера — например, длиной json, кодирующей все столбцы.

В коде:

 -- run a query then get its id

set last_query_id = (select last_query_id());

select sum(length(to_json(object_construct(a.*)))) table_encoded_size
from table(result_scan($last_query_id)) a;

 

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

1. Я рад, что это сработало @oleurud. Пожалуйста, отметьте этот ответ как принятый в качестве признака того, что он сработал для вас 🙂

2. Привет, Фелипе, мне пришлось добавить object_construct функцию в цепочку, чтобы заставить ее работать: это было бы: select sum(length(to_json(object_construct(a.*)))) table_encoded_size from table(result_scan($last_query_id)) a;

3. Спасибо, что поделились этим советом @juanra! Запрос работал с данными, которые у меня были, и я рад, что вы нашли хорошее решение, когда этого не произошло

4. Я хочу поделиться нашими окончательными результатами. Используя решение result_scan, когда мы используем таблицу объемом 1,5 ГБ, мы получаем следующие результаты: SELECT * FROM BIG_TABLE : 19s (первый раз) или попадание в кэш. result_scan query : 34 seg (возвращает 1.599.524.104 байт) С использованием временной таблицы: CREATE TEMPORARY TABLE XX AS (SELECT * FROM BIG_TABLE) : 29 seg и SELECT BYTES FROM WHERE table_name = 'XX' : 600 мс (2.353.437.184 байт). Как вы видите, есть некоторые различия в требуемом времени и результатах размера. В зависимости от ваших требований к делу, это может быть лучше один или другой

5. Некоторые из этих результатов удивительны! С удовольствием углублюсь в электронную почту, если хотите