Databricks Connect 的查询中断

注释

本文探讨适用于 Databricks Runtime 14.0 及以上版本的 Databricks Connect。

本文介绍如何使用 Databricks Connect 处理异步查询和中断。 Databricks Connect 使你能够将常用 IDE、笔记本服务器和自定义应用程序连接到 Azure Databricks 群集。 请参阅 Databricks Connect

查询执行中断

对于 Databricks Runtime 14.0 及更高版本使用的 Databricks Connect,在执行长时间运行的查询时,查询执行对网络和其他中断的适应性更强。 当客户端程序收到中断信号或被操作系统暂停(最多 5 分钟)时(例如合上笔记本电脑盖),客户端将重新连接到正在运行的查询。 这也允许查询运行更长的时间(以前只有 1 小时)。

Databricks Connect 现在还能够根据需要中断正在运行的查询,例如节省成本。

Python

以下 Python 程序使用 interruptTag() API 中断长时间运行的查询。

from databricks.connect import DatabricksSession
from time import sleep
import threading

session = DatabricksSession.builder.getOrCreate()

def thread_fn():
  sleep(5)
  session.interruptTag("interrupt-me")

# All subsequent DataFrame queries that use session will have this tag.
session.addTag("interrupt-me")

t = threading.Thread(target=thread_fn).start()

df = <a long running DataFrame query>
df.show()

t.join()

Scala

import com.databricks.connect.DatabricksSession

object InterruptTagExample {
  def main(args: Array[String]): Unit = {

    val session = DatabricksSession.builder.getOrCreate()

    val t = new Thread {
      override def run {
        Thread.sleep(5000)
        session.interruptTag("interrupt-me")
      }
    }

    // All subsequent DataFrame queries that use session will have this tag.
    session.addTag("interrupt-me")

    t.start()

    val df = <a long running DataFrame query>
    df.show()

    t.join()
  }
}

长期会话

注释

Databricks Connect 版本 16.4 及更高版本在无服务器计算中支持长期会话。

将 Databricks Connect 与无服务器计算配合使用时,在默认空闲超时后,尽最大努力保留会话。 重新连接时,Databricks 会尝试自动还原会话,包括配置、临时视图、UDF、临时变量和上传的文件。

这对于需要在非活动期间保持状态的命令(例如配置设置、注册用户定义函数 (UDF)、创建临时视图或上传文件)的会话非常有用。 如果没有这样的话,空闲超时会要求你在恢复工作之前重新运行所有这些设置命令。

局限性

  • 长期会话仅在无服务器计算上受支持。 标准或专用计算不支持它们。
  • 空闲超时后的会话恢复是尽最大努力的,不能保证。 如果无法还原会话,则会启动一个新会话。
  • 累积大量状态的会话可能会超过大小限制,之后不再保留状态。 超过此阈值后重新连接将启动新的会话。
  • 保留状态在处于非活动状态的两天后过期。 如果会话空闲时间超过此时间,则重新连接会启动一个新会话。
  • 在重新连接时,使用EXECUTE IMMEDIATE的流式查询状态和SQL脚本不会被保留。