Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Операции 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
);