Databricks Connectでのクエリの中断
この記事では、Databricks Runtime 14.0以降に対応したDatabricks Connectについて説明します。
この記事では、Databricks Connect で非同期クエリと割り込みを処理する方法について説明します。Databricks Connect使用すると、一般的なIDEs 、ノートブック サーバー、カスタム アプリケーションをDatabricksクラスターに接続できます。 Databricks Connectとは何か?を参照してください。
クエリ実行の中断
Databricks Runtime 14.0以降のDatabricks Connectでは、長時間実行されるクエリを実行する際に、ネットワークやその他の割り込みに対するクエリ実行の耐性が向上しています。クライアントプログラムが中断を受けたり、オペレーティングシステムによってプロセスが停止されたりした場合(最大5分間)、例えばノートパソコンの蓋が閉じられた場合、クライアントは実行中のクエリに再接続します。 これにより、クエリの実行時間を延長することも可能になります(以前は1時間まででした)。
Databricks Connectには、必要に応じて実行中のクエリを中断する機能も追加されました。これは、コスト削減などの目的で利用できます。
- Python
- Scala
以下の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()
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 の登録、一時ビューの作成、アップロードなど ファイル。 これがないと、アイドルタイムアウトが発生すると、これらの設定をすべて再実行する必要が生じます。 作業を再開する前にコマンドを実行してください。
制限事項
- 長時間セッションは、サーバレス コンピュートでのみサポートされます。 これらはサポートされていません 標準または専用のコンピュート。
- アイドルタイムアウト後のセッション復旧は、最善を尽くすものであり、保証されるものではありません。もしあなたの セッションを復元できないため、新しいセッションが開始されます。
- 大量の状態を蓄積するセッションはサイズ制限を超える可能性があり、その後、 状態はもはや保持されません。このしきい値を超えて再接続すると、新しいセッションが開始されます。
- 保存状態は、2日間操作がないと期限切れになります。セッションが長時間アイドル状態になると これよりも、再接続すると新しいセッションが開始されます。
- ストリーミングクエリの状態と
EXECUTE IMMEDIATEを使用するSQLスクリプトは保持されません 交差して再接続します。