【问题标题】:Snowflake get query_id for running query?雪花获取 query_id 以运行查询?
【发布时间】:2020-08-19 00:47:36
【问题描述】:

我想以编程方式获取 Snowflake 中正在运行的查询的 query_id。 account_usage.query_history 似乎没有存储正在运行的查询 ID。有没有其他方法可以获取运行查询的query_id?

【问题讨论】:

  • “以编程方式”是什么意思?如果您使用诸如 python 驱动程序之类的驱动程序运行查询,则查询 ID 应自动传回给您。你的意思是 SQL 吗?
  • @samud 在 sql 中的大多数答案下面有一些答案,它们中的任何一个都是您要找的吗?请务必标记最佳答案。澄清您计划使用的程序将有助于获得更明确的答案。我们期待您的回音。

标签: snowflake-cloud-data-platform snowflake-schema


【解决方案1】:

您可以选择返回最近执行的查询的 ID

 select last_query_id();

select last_query_id(1);

返回会话中执行的第一个查询的 ID

阅读更多here

【讨论】:

  • last_query_id() 仅显示此会话的查询,因此如果此会话有一个正在运行的查询,您不能运行另一个查询当前的查询。..
【解决方案2】:

如果我没记错的话,您需要在客户端应用程序上进行两次会话才能获取查询 ID。您只想对长时间运行的查询执行此操作(例如,允许检查状态或在这么多秒后中止它),因为您可以使用 last_query_id() 获取短查询的查询 ID。

-- In first session, get the session ID before executing the long-running query.
select current_session() as SESSION_ID;

-- In second session, get the query ID of the running query in the first session
select  QUERY_ID
from    table(information_schema.query_history())
where   execution_status ='RUNNING' 
    and session_id = 172747880058954;

【讨论】:

  • docs.snowflake.com/en/sql-reference/… - Query_History 的数据延迟最长为 45 分钟,因此无法保证在运行查询时查询位于 Query_history 表中。至少,如果我正确理解了这个文档?
  • 它在该页面上讨论的数据延迟适用于 SNOWFLAKE 数据库。这是从 Snowflake 到客户的共享数据库,某些数据的延迟可能长达 3 小时。我的示例中的第二个查询将显示最近的活动。 INFORMATION_SCHEMA 是即时的,而 SNOWFLAKE 数据库 ACCOUNT_USAGE 架构有延迟。
【解决方案3】:

提供了其他选项,但如果您想检查在特定时间(长时间运行)运行的查询,您可以使用此查询。

SET long_running_threshold_seconds = 10;

SELECT * FROM TABLE(information_schema.query_history()) WHERE (execution_status = 'RUNNING'
AND datediff('seconds',start_time,current_timestamp()) > $long_running_threshold_seconds )

【讨论】:

    【解决方案4】:

    您可以使用信息架构。

    select *
    from table(information_schema.query_history())  where execution_status ='RUNNING';
    

    【讨论】:

    • 这会得到任何正在运行的查询,不一定是从程序调用中运行的查询。
    猜你喜欢
    • 2021-09-21
    • 2023-03-25
    • 1970-01-01
    • 2020-03-22
    • 1970-01-01
    • 2022-01-04
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多