Снежинка query_history сбрасывается после приостановки работы склада - PullRequest
1 голос
/ 20 марта 2020

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

    SELECT "QUERY_TEXT", "DATABASE_NAME", "SCHEMA_NAME", "QUERY_TYPE", "USER_NAME", "ROLE_NAME", "EXECUTION_STATUS", "ERROR_CODE", "START_TIME", "END_TIME", "TOTAL_ELAPSED_TIME", "BYTES_SCANNED", "ROWS_PRODUCED" 
FROM table(MY_DATABASE.information_schema.query_history(end_time_range_start=>dateadd(HOUR, -4, current_timestamp()), current_timestamp())) 

Как ни странно, если используемый мной склад (размер: XS) приостанавливается после периода бездействия, следующий Когда я пытаюсь получить историю запросов - история, существовавшая до приостановки хранилища, исчезла.

Я не смог найти ничего, что могло бы объяснить это.

Кто-нибудь сталкивался с этой проблемой или связанной с ней документация, которая могла бы объяснить это?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 23 марта 2020

1: Ваш вопрос утверждает, что после периода бездействия не указывается, что такое период бездействия.

"после периода бездействия, в следующий раз, когда я пытаюсь получить историю запросов - историю это было до того, как приостановка хранилища исчезла. "

Если прошло более 7 дней, данные можно найти в таблице account_usage. Ниже приведена ссылка на разницу между INFORMATION_SCHEMA и ACCOUNT_USAGE.

https://docs.snowflake.com/en/sql-reference/account-usage.html#differences между схемой использования-информации-счета-счета

2: Ваш запрос не соответствует укажите USER_NAME или WAHREHOUSE_NAME в своем запросе, чтобы, возможно, до того, как вывод ваших запросов до приостановки хранилища мог превысить 4-часовой период, как в вашем предикате. Если вы можете увеличить период времени и проверить, сохраняется ли поведение.

3: В общем случае не рекомендуется запрашивать INFORMATION_SCHEMA для получения истории запросов, если только приложению не требуются данные без каких-либо задержек. Если возможно, используйте таблицу ACCOUNT_USAGE для получения информации истории запросов.

Вот что я сделал.

1: Создан склад XS

2: Установите auto_suspend на 5 минут

3: Выполнено несколько запросов

4: Выполнен запрос (в котором не указано имя_пользователя или имя_хранилища), что означает, что вы ищете историю всех пользователей.

SELECT "QUERY_TEXT", "DATABASE_NAME", "SCHEMA_NAME", "QUERY_TYPE", "USER_NAME", "ROLE_NAME", "EXECUTION_STATUS", "ERROR_CODE", "START_TIME", "END_TIME", "TOTAL_ELAPSED_TIME", "BYTES_SCANNED", "ROWS_PRODUCED" FROM table(MY_DATABASE.information_schema.query_history(end_time_range_start=>dateadd(HOUR, -4, current_timestamp()), current_timestamp()))

5: возвращен вывод нескольких 100 записей.

6: Использовал дополнительное условие where для проверки данных моего пользователя, который выполнил несколько запросов перед auto_suspend для Warehouse и возвратил несколько записей.

SELECT "QUERY_TEXT", "DATABASE_NAME", "SCHEMA_NAME", "QUERY_TYPE", "USER_NAME", "ROLE_NAME", "EXECUTION_STATUS", "ERROR_CODE", "START_TIME", "END_TIME", "TOTAL_ELAPSED_TIME", "BYTES_SCANNED", "ROWS_PRODUCED" FROM table(MY_DATABASE.information_schema.query_history(end_time_range_start=>dateadd(HOUR, -4, current_timestamp()), current_timestamp())) WHERE USER_NAME = 'ADITYA'

7: Подождал 10 минут, чтобы мой склад был auto_suspended.

8: Повторите пункт 5 и пункт 6, и он снова вернул записи, как и ожидалось.

0 голосов
/ 20 марта 2020

Я не могу точно объяснить ограничения этого запроса информационной схемы, который вы выполняете (некоторые из них возвращают только 10 000 строк или, как вы сказали, после выключения хранилища), но это ограниченное представление о реальной истории запросов , Вы можете использовать базу данных snowflake для всей истории запросов.

Это массивный стол, поэтому убедитесь, что на него установлены фильтры. Вот пример запроса для доступа к нему:

USE DATABASE snowflake;
USE SCHEMA account_usage;

SELECT *
FROM query_history
WHERE start_time BETWEEN '2020-01-01 00:00' AND '2020-01-03 00:00'
  AND DATABASE_NAME = 'DATABASE_NAME'
  AND USER_NAME = 'USERNAME'
ORDER BY START_TIME DESC;
...