Чтение сведений о состоянии структурированной потоковой передачи

Операции DataFrame или функции табличного значения SQL можно использовать для запроса данных о состоянии и метаданных структурированной потоковой передачи. Используйте эти функции для отслеживания сведений о состоянии для запросов с отслеживанием состояния структурированной потоковой передачи, которые могут быть полезны для мониторинга и отладки.

Для запроса данных о состоянии или метаданных необходимо иметь доступ на чтение к пути контрольной точки для потокового запроса. Функции, описанные в этой статье, предоставляют доступ только для чтения к данным состояния и метаданным. Для запроса сведений о состоянии можно использовать только пакетную семантику чтения.

Примечание.

Невозможно запрашивать сведения о состоянии для конвейеров Lakeflow, потоковых таблиц или материализованных представлений. Невозможно запрашивать сведения о состоянии с помощью бессерверных вычислений или вычислений, настроенных в стандартном режиме доступа.

Требования

  • Используйте одну из следующих конфигураций вычислений:
    • Databricks Runtime 16.3 и более поздних версий на вычислительных системах, настроенных в стандартном режиме доступа.
    • Databricks Runtime 14.3 LTS и выше на вычислительных системах, настроенных на режим выделенного доступа или без режима изоляции.
  • Доступ на чтение к пути контрольной точки, используемому потоковым запросом.

Чтение хранилища состояний структурированной потоковой передачи

Вы можете считывать сведения о хранилище состояний для запросов структурированной потоковой передачи, выполняемых в любой поддерживаемой среде выполнения Databricks. Используйте следующий синтаксис:

Питон

df = (spark.read
  .format("statestore")
  .load("/checkpoint/path"))

Scala

val df = spark.read
  .format("statestore")
  .load("/checkpoint/path")

SQL

SELECT * FROM read_statestore('/checkpoint/path')

Параметры и схема API для чтения состояния

Полный список параметров формата см. в statestore".

Выходные данные имеют следующую схему:

Столбец Тип Описание
key Структура (дополнительный тип, производный от ключа состояния) Ключ для записи оператора с отслеживанием состояния в контрольной точке состояния.
value Структура (дополнительный тип, производный от значения состояния) Значение записи состояния оператора в контрольной точке состояния.
partition_id Целое Раздел контрольной точки состояния, который содержит запись оператора с сохранением состояния.

В Databricks Runtime 16.4 LTS и более поздних версиях, если для параметра readChangeFeed задано значение true, выходные данные имеют следующую схему:

Столбец Тип Описание
batch_id Длинный Идентификатор пакета, к которому относится изменение состояния.
change_type Строка Тип изменения, применяемого пакетом: update для вставок и обновлений, delete для удалений.
key Структура (дополнительный тип, производный от ключа состояния) Ключ для записи оператора с отслеживанием состояния в контрольной точке состояния.
value Структура (дополнительный тип, производный от значения состояния) Значение записи состояния оператора в контрольной точке состояния. null для записей, где change_type имеет значение delete.
partition_id Целое Раздел контрольной точки состояния, который содержит запись оператора с сохранением состояния.

См. табличную функцию read_statestore.

Чтение изменений состояния структурированной потоковой передачи

Доступно в Databricks Runtime 16.4 LTS и более поздних версиях. Чтобы узнать, как состояние изменяется по микропакетам, а не просматривать полное состояние для одного микропакета, установите для readChangeFeed значение true и укажите changeStartBatchId. При необходимости укажите changeEndBatchId. Полный список параметров см. в разделе "Хранилище состояний".

Например, чтобы читать изменения состояния начиная с пакета 2 и до последнего зафиксированного пакета:

Питон

df = (spark.read
  .format("statestore")
  .option("readChangeFeed", True)
  .option("changeStartBatchId", 2)
  .load("<checkpointLocation>")
)

Scala

val df = spark.read
  .format("statestore")
  .option("readChangeFeed", true)
  .option("changeStartBatchId", 2)
  .load("<checkpointLocation>")

SQL

SELECT * FROM read_statestore(
    '<checkpointLocation>',
    readChangeFeed => true,
    changeStartBatchId => 2
);

Схема вывода включает дополнительные batch_id и change_type столбцы. Полный вариант схемы см. в разделе "Параметры и схема средства чтения состояния".

Чтение метаданных состояния структурированной потоковой передачи

Доступно в Databricks Runtime 14.3 LTS или более поздней версии. Вы можете считывать сведения о метаданных состояния для запросов структурированной потоковой передачи:

Питон

df = (spark.read
  .format("state-metadata")
  .load("<checkpointLocation>"))

Scala

val df = spark.read
  .format("state-metadata")
  .load("<checkpointLocation>")

SQL

SELECT * FROM read_state_metadata('/checkpoint/path')

Возвращенные данные имеют следующую схему:

Столбец Тип Описание
operatorId Целое Целочисленный идентификатор оператора потоковой передачи с отслеживанием состояния.
operatorName Строка Имя оператора потоковой передачи состояния.
stateStoreName Строка Имя хранилища состояний оператора.
numPartitions Целое Количество секций хранилища состояний.
minBatchId Длинный Минимальный идентификатор пакета, доступный для запроса состояния.
maxBatchId Длинный Максимальный идентификатор пакета, доступный для запроса состояния.

Примечание.

Значения идентификатора пакета, предоставленные minBatchId и maxBatchId, показывают состояние на момент записи контрольной точки. Старые пакеты автоматически очищаются с помощью микро-пакетного выполнения, поэтому указанное здесь значение не гарантируется по-прежнему доступно.

См. табличную функцию read_state_metadata.

Пример: Запрос одной стороны соединения двух потоков

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

Питон

left_df = (spark.read
  .format("statestore")
  .option("joinSide", "left")
  .load("/checkpoint/path"))

Scala

val leftDf = spark.read
  .format("statestore")
  .option("joinSide", "left")
  .load("/checkpoint/path")

SQL

SELECT * FROM read_statestore(
    '/checkpoint/path',
    joinSide => 'left'
);

Пример: Запрос к хранилищу состояний для потока с несколькими операторами состояния

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

Средство чтения метаданных состояния принимает путь контрольной точки в качестве единственного варианта, как показано в следующем примере синтаксиса:

Питон

df = (spark.read
  .format("state-metadata")
  .load("<checkpointLocation>"))

Scala

val df = spark.read
  .format("state-metadata")
  .load("<checkpointLocation>")

SQL

SELECT * FROM read_state_metadata('/checkpoint/path')

В следующей таблице представлен пример выходных данных метаданных хранилища состояний:

operatorId имяОператора stateStoreName числоРазделов minBatchId maxBatchId
0 stateStoreSave по умолчанию 200 0 13 (тринадцать)
1 dedupeWithinWatermark по умолчанию 200 0 13 (тринадцать)

Чтобы получить результаты для dedupeWithinWatermark оператора, запросите средство чтения состояния, используя опцию operatorId, как показано в следующем примере:

Питон

left_df = (spark.read
  .format("statestore")
  .option("operatorId", 1)
  .load("/checkpoint/path"))

Scala

val leftDf = spark.read
  .format("statestore")
  .option("operatorId", 1)
  .load("/checkpoint/path")

SQL

SELECT * FROM read_statestore(
    '/checkpoint/path',
    operatorId => 1
);