从Spark Connector中杀死Snowflake查询

3

有没有一种方法可以使用Spark连接器杀掉Snowflake查询?或者有没有一种方法在Spark中获取最后一个查询ID或会话ID以在Spark外部终止它。

用例是由用户控制的长时间运行的Spark作业和长时间运行的Snowflake查询。当用户终止Spark作业时,当前的Snowflake查询仍然保持运行状态(长达数小时)。

谢谢


如果这种情况经常发生,您可能希望为Spark连接设置Snowflake查询超时。这可以在首次连接到Snowflake时使用ALTER SESSION语句完成。您还可以在那时获取当前会话以供以后使用。 - Mike Walton
我该如何获取会话?Spark连接器为每个查询使用不同的会话。 - Stéphane
@Stéphane 你可以在用户级别设置用于连接的值:ALTER USER <name> SET STATEMENT_TIMEOUT_IN_SECONDS = 300; - Lukasz Szozda
1
您还可以将statement_timeout_in_seconds作为会话的一部分进行传递:https://docs.snowflake.com/en/user-guide/spark-connector-use.html#additional-options。我认为您也可以使用preaction或postaction脚本来获取session_id。 - Mike Walton
是的 - 这个选项与终止查询无关。但是,您可以将其设置为限制查询的运行时间。至于取消查询,可能有助于在代码中设置一个带有独特标识的查询标签,以便轻松查找您的查询ID并在Snowflake中手动取消查询。这也将使用会话选项进行设置。 - Mike Walton
显示剩余3条评论
1个回答

0

使用与 Spark 相同的用户登录到 Snowflake UI(或使用 SnowSQL),并运行以下命令:

use database <your_db>;
use warehouse <your wh>;

select  
    query_id, query_text, execution_status, error_message, start_time, end_time     
from 
    table(information_schema.query_history( RESULT_LIMIT => 10) );

这应该会显示您最近的查询。找到处于运行状态的查询,复制其QUERY_ID,并使用它来运行此命令:

select system$cancel_query('<your query id here>');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接