# データソースとフィールド

EMQXのルールは、**MQTTメッセージ**、**MQTTイベント**、または**データブリッジ**など、さまざまなデータソースからのデータを処理できます。

[Rule SQL Reference](../data_integration/rule-sql-syntax.md) セクションで説明したように、`FROM`句でデータソースを指定し、対応するフィールドを`SELECT`句や`where`句で参照できます。本セクションでは、[MQTTメッセージ](#mqtt-messages)、[MQTTイベント](#mqtt-events)、および[データブリッジ](#data-bridges)のフィールドについて紹介します。

## MQTTメッセージ

EMQXのルールを使ってメッセージのパブリッシュを処理する場合、`FROM`句でメッセージのトピックを指定する必要があります。

例えば、以下のステートメントでは、`t/#`というパターンにマッチするトピックにパブリッシュされたメッセージの`payload.msg`（`AS`句で`msg`にリネーム）、`clientid`、`username`、`payload`、`topic`、`qos`の各フィールドを選択しています。

例：

```sql
SELECT
  payload.msg as msg,
  clientid,
  username,
  payload,
  topic,
  qos
FROM
  "t/#"
```

出力例：

```json
{
  "username": "u_emqx",
  "topic": "t/a",
  "qos": 1,
  "payload": "{\"msg\":\"hello\"}",
  "msg": "hello",
  "clientid": "c_emqx"
}
```

受信したMQTTメッセージから選択可能なフィールドは以下の通りです。

| フィールド             | 説明                                                         |
| :-------------------- | :----------------------------------------------------------- |
| `id`                  | MQTTメッセージID                                             |
| `clientid`            | パブリッシャーのクライアントID                              |
| `username`            | パブリッシャーのユーザー名                                  |
| `payload`             | MQTTペイロード                                               |
| `peerhost`            | クライアントのIPアドレス                                    |
| `topic`               | MQTTトピック                                                |
| `qos`                 | QoSレベル                                                   |
| `flags`               | フラグ                                                     |
| `headers`             | メッセージ処理に関連する内部データ                          |
| `pub_props`           | PUBLISHプロパティ（MQTT 5.0クライアントのみ）               |
| `timestamp`           | タイムスタンプ（単位：ms）                                  |
| `publish_received_at` | PUBLISHメッセージがEMQXに到達した時刻（単位：ms）          |
| `node`                | イベントが発生したノード                                    |
| `client_attrs`        | [クライアント属性](https://docs.emqx.com/en/emqx/latest/client-attributes/client-attributes.html) |

## MQTTイベント

データ統合のルールでは、`FROM`句に指定できる複数のイベントトピックを提供しています。これらのイベントトピックからデータを抽出することで、クライアントのオンライン・オフラインやクライアントのサブスクリプションなどのイベント通知を取得できます。イベントトピックは`"$events/"`で始まり、例えば`"$events/client_connected"`のように指定します。

デフォルトでは、クライアントはMQTTイベントメッセージを直接サブスクライブできません。本節では、ルールを使ってこれらのメッセージをサブスクライブする方法と各フィールドの意味を説明します。

### イベントトピック一覧

対応するイベントトピック一覧は以下の通りです。

| イベントトピック名                                             | 説明                           |
| ------------------------------------------------------------ | :------------------------------ |
| [$events/message_delivered](#message-delivery-event-events-message-delivered) | メッセージ配信                  |
| [$events/message_acked](#message-acknowledged-event-events-message-acked) | メッセージ受領確認              |
| [$events/message_dropped](#message-dropped-when-routing-event-events-message-dropped) | ルーティング時のメッセージ破棄  |
| [$events/delivery_dropped](#message-dropped-when-delivering-event-events-delivery-dropped) | 配信時のメッセージ破棄          |
| [$events/client_connected](#connection-complete-event-events-client-connected) | 接続完了                      |
| [$events/client_disconnected](#disconnect-event-events-client-disconnected) | 切断                          |
| [$events/client_connack](#connection-acknowlege-event-events-client-connack) | 接続応答                      |
| [$events/client_check_authz_complete](#authorization-check-complete-event-events-client-check-authz-complete) | 認可チェック完了                |
| [$events/client_check_authn_complete](#authentication-check-complete-event-events-client-check-authn-complete) | 認証チェック完了                |
| [$events/session_subscribed](#subscriber-event-events-session-subscribed) | サブスクライブ成功              |
| [$events/session_unsubscribed](#unsubcribe-event-events-session-unsubscribed) | サブスクリプション解除          |

### メッセージ配信イベント ("$events/message_delivered")

このイベントトピックは、メッセージがクライアントに配信された際にルールをトリガーできます。

例えば、`"$events/message_delivered"`イベントトピックから、パブリッシャーのIDとユーザー名、メッセージトピック、メッセージのQoS、イベントが発生したEMQXノード、イベント発生時刻の各フィールドを抽出するには、以下のステートメントを使用します。

例：

```sql
SELECT
  from_clientid,
  from_username,
  topic,
  qos,
  node,
  timestamp
FROM
  "$events/message_delivered"
```

出力例：

```json
{
  "topic": "t/a",
  "timestamp": 1645002753259,
  "qos": 1,
  "node": "emqx@127.0.0.1",
  "from_username": "u_emqx_1",
  "from_clientid": "c_emqx_1"
}
```

各フィールドの詳細は以下の通りです。

| コード                 | 説明                                                     |
| :-------------------- | :------------------------------------------------------ |
| `id`                  | MQTTメッセージID                                        |
| `from_clientid`       | パブリッシャーのクライアントID                          |
| `from_username`       | パブリッシャーのユーザー名                              |
| `clientid`            | サブスクライバーのクライアントID                        |
| `username`            | サブスクライバーのユーザー名                            |
| `payload`             | MQTTペイロード                                         |
| `peerhost`            | クライアントのIPアドレス                                |
| `topic`               | MQTTトピック                                           |
| `qos`                 | QoSレベル                                              |
| `flags`               | フラグ                                                 |
| `pub_props`           | PUBLISHプロパティ（MQTT 5.0クライアントのみ）          |
| `timestamp`           | イベント発生時刻（単位：ms）                           |
| `publish_received_at` | PUBLISHメッセージがEMQXに到達した時刻（単位：ms）     |
| `node`                | イベントが発生したEMQXノード                           |

### メッセージ受領確認イベント ("$events/message_acked")

このイベントトピックは、メッセージ配信がアック（ACK）された際にルールをトリガーできます。

::: tip

QOS 1およびQOS 2のメッセージのみ対応しています。

:::

例えば、`"$events/message_acked"`イベントトピックから、パブリッシャーのIDとユーザー名、メッセージトピック、メッセージのQoS、イベントが発生したEMQXノード、イベント発生時刻の各フィールドを抽出するには、以下のステートメントを使用します。

例：

```sql
SELECT
  from_clientid,
  from_username,
  topic,
  qos,
  node,
  timestamp
FROM
  "$events/message_acked"
```

出力例：

```json
{
  "topic": "t/a",
  "timestamp": 1645002965664,
  "qos": 1,
  "node": "emqx@127.0.0.1",
  "from_username": "u_emqx_1",
  "from_clientid": "c_emqx_1"
}
```

各フィールドの詳細は以下の通りです。

| コード                 | 説明                                                     |
| :-------------------- | :------------------------------------------------------ |
| `id`                  | MQTTメッセージID                                        |
| `from_clientid`       | パブリッシャーのクライアントID                          |
| `from_username`       | パブリッシャーのユーザー名                              |
| `clientid`            | サブスクライバーのクライアントID                        |
| `username`            | サブスクライバーのユーザー名                            |
| `payload`             | MQTTペイロード                                         |
| `peerhost`            | クライアントのIPアドレス                                |
| `topic`               | MQTTトピック                                           |
| `qos`                 | QoSレベル                                              |
| `flags`               | フラグ                                                 |
| `pub_props`           | PUBLISHプロパティ（MQTT 5.0のみ）                       |
| `puback_props`        | PUBACKプロパティ（MQTT 5.0のみ）                        |
| `timestamp`           | イベント発生時刻（単位：ms）                           |
| `publish_received_at` | PUBLISHメッセージがEMQXに到達した時刻（単位：ms）     |
| `node`                | イベントが発生したEMQXノード                           |

### ルーティング時のメッセージ破棄イベント ("$events/message_dropped")

このイベントトピックは、メッセージがルーティング中に破棄された際にルールをトリガーできます。

例えば、`"$events/message_dropped"`イベントトピックから、破棄理由、メッセージトピック、メッセージのQoS、イベントが発生したEMQXノード、イベント発生時刻の各フィールドを抽出するには、以下のステートメントを使用します。

例：

```sql
SELECT
  reason,
  topic,
  qos,
  node,
  timestamp
FROM
  "$events/message_dropped"
```

出力例：

```json
{
  "topic": "t/a",
  "timestamp": 1645003103004,
  "reason": "no_subscribers",
  "qos": 1,
  "node": "emqx@127.0.0.1"
}
```

| フィールド             | 説明                                                         |
| :-------------------- | :----------------------------------------------------------- |
| `id`                  | MQTTメッセージID                                             |
| `reason`              | 破棄理由：<br/><br/>`no_subscribers`: トピックにサブスクライブしているクライアントがいない<br/><br/>`receive_maximum_exceeded`: `awaiting_rel`キューが満杯<br/><br/>`packet_identifier_inuse`: 未解放のパケットIDを持つQoS 2メッセージを受信した |
| `clientid`            | パブリッシャーのクライアントID                              |
| `username`            | パブリッシャーのユーザー名                                  |
| `payload`             | MQTTペイロード                                              |
| `peerhost`            | クライアントのIPアドレス                                    |
| `topic`               | MQTTトピック                                               |
| `qos`                 | QoSレベル                                                  |
| `flags`               | フラグ                                                    |
| `pub_props`           | PUBLISHプロパティ（MQTT 5.0のみ）                           |
| `timestamp`           | イベント発生時刻（単位：ms）                               |
| `publish_received_at` | PUBLISHメッセージがEMQXに到達した時刻（単位：ms）         |
| `node`                | イベントが発生したノード                                   |

### 配信時のメッセージ破棄イベント ("$events/delivery_dropped")

このイベントトピックは、メッセージが配信中に破棄された際にルールをトリガーできます。

例えば、`"$events/delivery_dropped"`イベントトピックから、パブリッシャーのIDとユーザー名、破棄理由、メッセージトピック、QoSの各フィールドを抽出するには、以下のステートメントを使用します。

例：

```sql
SELECT
  from_clientid,
  from_username,
  reason,
  topic,
  qos
FROM "$events/delivery_dropped"
```

出力例：

```json
{
  "topic": "t/a",
  "reason": "queue_full",
  "qos": 1,
  "from_username": "u_emqx_1",
  "from_clientid": "c_emqx_1"
}
```

各フィールドの詳細は以下の通りです。

| フィールド             | 説明                                                         |
| :-------------------- | :----------------------------------------------------------- |
| `id`                  | MQTTメッセージID                                             |
| `reason`              | 破棄理由：<br/><br/>`queue_full`: メッセージ（QoS>0）キューが満杯<br/><br/>`no_local`: クライアントが自身のパブリッシュしたメッセージを受信できない<br/><br/>`expired`: メッセージまたはセッションの有効期限切れ<br/><br/>`qos0_msg`: メッセージ（QoS 0）キューが満杯 |
| `from_clientid`       | パブリッシャーのクライアントID                              |
| `from_username`       | パブリッシャーのユーザー名                                  |
| `clientid`            | サブスクライバーのクライアントID                            |
| `username`            | サブスクライバーのユーザー名                                |
| `payload`             | MQTTペイロード                                              |
| `peerhost`            | クライアントのIPアドレス                                    |
| `topic`               | MQTTトピック                                               |
| `qos`                 | メッセージのQoS                                             |
| `flags`               | フラグ                                                    |
| `pub_props`           | PUBLISHプロパティ（MQTT 5.0クライアントのみ）               |
| `timestamp`           | イベント発生時刻（単位：ms）                               |
| `publish_received_at` | PUBLISHメッセージがEMQXに到達した時刻（単位：ms）         |
| `node`                | イベントが発生したEMQXノード                               |

### 接続完了イベント ("$events/client_connected")

このイベントトピックは、クライアントが正常に接続した際にルールをトリガーできます。

例えば、`"$events/client_connected"`イベントトピックから、クライアントID、ユーザー名、キープアライブ間隔、接続したMQTTクライアントがブリッジとして動作しているかどうかの各フィールドを抽出するには、以下のステートメントを使用します。

例：

```sql
SELECT
  clientid,
  username,
  keepalive,
  is_bridge
FROM
  "$events/client_connected"
```

出力例：

```json
{
  "username": "u_emqx",
  "keepalive": 60,
  "is_bridge": false,
  "clientid": "c_emqx"
}
```

受信したMQTTメッセージから選択可能なフィールドは以下の通りです。

| フィールド             | 説明                                                         |
| :-------------------- | :----------------------------------------------------------- |
| `clientid`            | クライアントID                                              |
| `username`            | クライアントのユーザー名                                    |
| `mountpoint`          | ブリッジメッセージのマウントポイント                       |
| `peername`            | 端末のIPアドレスとポート番号                                |
| `sockname`            | EMQXがリッスンしているIPアドレスとポート番号               |
| `proto_name`          | プロトコル名                                                |
| `proto_ver`           | プロトコルバージョン                                       |
| `keepalive`           | MQTTキープアライブ間隔                                     |
| `clean_start`         | MQTTクリーンスタートフラグ                                 |
| `expiry_interval`     | MQTTセッションの有効期限                                   |
| `is_bridge`           | クライアントがブリッジとして動作しているかどうか           |
| `connected_at`        | クライアントの接続完了時刻（単位：ms）                      |
| `conn_props`          | CONNECTプロパティ（MQTT 5.0クライアントのみ）               |
| `timestamp`           | イベント発生時刻（単位：ms）                               |
| `node`                | イベントが発生したEMQXノード                               |
| `client_attrs`        | [クライアント属性](https://docs.emqx.com/en/emqx/latest/client-attributes/client-attributes.html) |

### 切断イベント ("$events/client_disconnected")

このイベントトピックは、クライアントが切断した際にルールをトリガーできます。

例えば、`"$events/client_disconnected"`イベントトピックから、クライアントID、ユーザー名、切断理由、切断時刻、イベントが発生したEMQXノードの各フィールドを抽出するには、以下のステートメントを使用します。

例：

```sql
SELECT
  clientid,
  username,
  reason,
  disconnected_at,
  node
FROM
  "$events/client_disconnected"
```

出力例：

```json
{
  "username": "u_emqx",
  "reason": "normal",
  "node": "emqx@127.0.0.1",
  "disconnected_at": 1645003578536,
  "clientid": "c_emqx"
}
```

| フィールド             | 説明                                                         |
| :-------------------- | :----------------------------------------------------------- |
| `reason`              | 切断理由：<br/><br/>`normal`: クライアントが意図的に切断<br/><br/>`kicked`: REST API経由でEMQXが強制切断<br/><br/>`keepalive_timeout`: 指定されたキープアライブ期間のタイムアウト<br/><br/>`not_authorized`: 認可失敗<br/><br/>`tcp_closed`: ピアがネットワーク接続を閉じた<br/><br/>`discarded`: `clean_start`が`true`の別クライアントが同じClientIDで接続し、前の接続が切断された<br/><br/>`takenover`: `clean_start`が`false`の別クライアントが同じClientIDで接続し、前の接続を引き継いだ<br/><br/>`internal_error`: 不正なメッセージ形式やその他不明なエラーによる切断 |
| `clientid`            | クライアントID                                              |
| `username`            | クライアントのユーザー名                                    |
| `peername`            | IPアドレスとポート番号                                      |
| `sockname`            | EMQXがリッスンしているIPアドレスとポート番号               |
| `disconnected_at`     | クライアント切断完了時刻（単位：ms）                        |
| `disconn_props`       | DISCONNECTプロパティ（MQTT 5.0クライアントのみ）             |
| `timestamp`           | イベント発生時刻（単位：ms）                               |
| `node`                | イベントが発生したEMQXノード                               |
| `client_attrs`        | [クライアント属性](https://docs.emqx.com/en/emqx/latest/client-attributes/client-attributes.html) |

### 接続応答イベント ("$events/client_connack")

このイベントトピックは、EMQXがクライアントに`CONNACK`パケットを送信した際にルールをトリガーできます。

例：

```sql
SELECT
  clientid,
  username,
  reason_code,
  node
FROM
  "$events/client_connack"
```

出力例：

```json
{
  "username": "u_emqx",
  "reason_code": "success",
  "node": "emqx@127.0.0.1",
  "connected_at": 1645003578536,
  "clientid": "c_emqx"
}
```

抽出可能なフィールドは以下の通りです。

| フィールド             | 説明                                                         |
| --------------------- | :----------------------------------------------------------- |
| `reason_code`         | 理由コード*                                                  |
| `clientid`            | パブリッシャーのクライアントID                              |
| `username`            | パブリッシャーのユーザー名                                  |
| `peername`            | IPアドレスとポート                                          |
| `sockname`            | EMQXがリッスンしているIPアドレスとポート                   |
| `proto_name`          | プロトコル名                                                |
| `proto_ver`           | プロトコルバージョン                                       |
| `keepalive`           | MQTTキープアライブ間隔                                     |
| `clean_start`         | MQTTクリーンスタートフラグ                                 |
| `expiry_interval`     | MQTTセッションの有効期限                                   |
| `conn_props`          | CONNECTプロパティ（MQTT 5.0クライアントのみ）               |
| `timestamp`           | イベント発生時刻（単位：ms）                               |
| `node`                | イベントが発生したEMQXノード                               |

[^*]: MQTT v5.0プロトコルでは、戻りコードを理由コードに変更し、より多様なエラータイプを示す理由コードが追加されています（[Reason code and ACK - MQTT 5.0 new features](https://www.emqx.com/en/blog/mqtt5-new-features-reason-code-and-ack)）。

以下はMQTT v3.1.1およびMQTT v5.0の理由コードです。

:::: tabs type:card

::: tab MQTT v3.1.1

| 理由コード                      | 説明                                                         |
| ------------------------------ | ------------------------------------------------------------ |
| `connection_accepted`           | 接続が受理された                                           |
| `unacceptable_protocol_version` | クライアントが要求したMQTTプロトコルバージョンをEMQXがサポートしていない |
| `client_identifier_not_valid`   | クライアントIDがEMQXで許可されていない                     |
| `server_unavaliable`            | ネットワーク接続は確立されたが、MQTTサービスが利用不可       |
| `malformed_username_or_password`| ユーザー名またはパスワードのフォーマットが不正             |
| `unauthorized_client`           | クライアントの接続が認可されていない                        |

:::

::: tab MQTT v5.0

| 理由コード                     | 説明                                                         |
| ------------------------------ | ------------------------------------------------------------ |
| `success`                      | 接続成功                                                    |
| `unspecified_error`            | 不明なエラー                                               |
| `malformed_packet`             | パケットの形式が不正                                       |
| `protocol_error`               | プロトコルエラー                                           |
| `implementation_specific_error`| 実装固有のエラー                                           |
| `unsupported_protocol_version` | サポートされていないプロトコルバージョン                   |
| `client_identifier_not_valid`  | 無効なクライアントID                                       |
| `bad_username_or_password`     | 無効なユーザー名またはパスワード                           |
| `not_authorized`               | 認可されていない                                           |
| `server_unavailable`           | サーバー利用不可                                           |
| `server_busy`                  | サーバーがビジー状態                                       |
| `banned`                      | 接続禁止                                                  |
| `bad_authentication_method`    | 無効な認証方式                                            |
| `topic_name_invalid`           | 無効なトピック名                                          |
| `packet_too_large`             | パケットが大きすぎる                                      |
| `quota_exceeded`               | クォータ超過                                              |
| `retain_not_supported`         | Retainメッセージ機能がサポートされていない                |
| `qos_not_supported`            | サポートされていないQoSレベル                              |
| `use_another_server`           | 別のブローカーを使用するよう指示                          |
| `server_moved`                 | ブローカーが移動した                                     |
| `connection_rate_exceeded`     | 接続レート制限に達した                                   |

:::

::::

### 認可チェック完了イベント ("$events/client_check_authz_complete")

このイベントトピックは、クライアントの認可チェックが完了した際にルールをトリガーできます。

例：

```sql
SELECT
  clientid,
  username,
  topic,
  action,
  result,
  authz_source,
  node
FROM
  "$events/client_check_authz_complete"
```

出力例：

```json
{
  "username": "u_emqx",
  "topic": "t/a",
  "action": "publish",
  "result": "allow",
  "authz_source": "cache",
  "node": "emqx@127.0.0.1",
  "clientid": "c_emqx"
}
```

抽出可能なフィールドは以下の通りです。

| フィールド           | 説明                                                         |
| ------------------- | :----------------------------------------------------------- |
| `clientid`          | クライアントID                                              |
| `username`          | ユーザー名                                                 |
| `peerhost`          | クライアントのIPアドレス                                    |
| `topic`             | MQTTトピック                                              |
| `action`            | パブリッシュまたはサブスクライブのアクション               |
| `result`            | アクセス制御チェックの結果                                  |
| `authz_source`      | 認可のソース                                               |
| `timestamp`         | タイムスタンプ（単位：ms）                                 |
| `node`              | イベントが発生したEMQXノード                               |
| `client_attrs`      | [クライアント属性](https://docs.emqx.com/en/emqx/latest/client-attributes/client-attributes.html) |

### 認証チェック完了イベント ("$events/client_check_authn_complete")

このイベントトピックは、クライアントの認証チェックが完了した際にルールをトリガーできます。

例：

```sql
SELECT
  clientid,
  username,
  reason_code,
  is_superuser,
  is_anonymous
FROM
  "$events/client_check_authn_complete"
```

出力例：

```json
{
  "clientid": "c_emqx",
  "username": "u_emqx",
  "reason_code": "success",
  "is_superuser": true,
  "is_anonymous": false
}
```

抽出可能なフィールドは以下の通りです。

| フィールド          | 説明                                                         |
| ------------------ | :----------------------------------------------------------- |
| `clientid`         | クライアントID                                              |
| `username`         | ユーザー名                                                 |
| `peername`         | クライアントのIPアドレス                                    |
| `reason_code`      | 認証結果                                                   |
| `is_superuser`     | スーパーユーザーかどうか                                   |
| `is_anonymous`     | 匿名ユーザーかどうか                                       |
| `client_attrs`     | [クライアント属性](https://docs.emqx.com/en/emqx/latest/client-attributes/client-attributes.html) |

### サブスクライバーイベント ("$events/session_subscribed")

このイベントトピックは、クライアントが正常にサブスクライブした際にルールをトリガーできます。

例：

```sql
SELECT
  clientid,
  username,
  topic,
  qos
FROM
  "$events/session_subscribed"
```

出力例：

```json
{
  "username": "u_emqx",
  "topic": "t/a",
  "qos": 1,
  "clientid": "c_emqx"
}
```

抽出可能なフィールドは以下の通りです。

| フィールド          | 説明                                                         |
| :----------------- | :----------------------------------------------------------- |
| `clientid`         | クライアントID                                              |
| `username`         | クライアントのユーザー名                                    |
| `peerhost`         | クライアントのIPアドレス                                    |
| `topic`            | MQTTトピック                                              |
| `qos`              | QoSレベル                                                 |
| `sub_props`        | SUBSCRIBEプロパティ（MQTT 5.0クライアントのみ）             |
| `timestamp`        | イベント発生時刻（単位：ms）                               |
| `node`             | イベントが発生したEMQXノード                               |
| `client_attrs`     | [クライアント属性](https://docs.emqx.com/en/emqx/latest/client-attributes/client-attributes.html) |

### サブスクリプション解除イベント ("$events/session_unsubscribed")

このイベントトピックは、クライアントのサブスクリプション解除が成功した際にルールをトリガーします。

例：

```sql
SELECT
  clientid,
  username,
  topic,
  qos
FROM
  "$events/session_unsubscribed"
```

出力例：

```json
{
  "username": "u_emqx",
  "topic": "t/a",
  "qos": 1,
  "clientid": "c_emqx"
}
```

抽出可能なフィールドは以下の通りです。

| フィールド          | 説明                                                         |
| ------------------ | :----------------------------------------------------------- |
| `clientid`         | クライアントID                                              |
| `username`         | クライアントのユーザー名                                    |
| `peerhost`         | クライアントのIPアドレス                                    |
| `topic`            | MQTTトピック                                              |
| `qos`              | QoSレベル                                                 |
| `unsub_props`      | UNSUBSCRIBEプロパティ（MQTT 5.0クライアントのみ）           |
| `timestamp`        | イベント発生時刻（単位：ms）                               |
| `node`             | イベントが発生したEMQXノード                               |
| `client_attrs`     | [クライアント属性](https://docs.emqx.com/en/emqx/latest/client-attributes/client-attributes.html) |

## データブリッジ

ルールは、データブリッジによってトリガーされたメッセージやイベントを、`$bridges/`で始まるトピックで扱います。形式は以下の通りです。

```
$bridges/<type>:<name>
```

ここで、

- `<type>:<name>`はブリッジID、
- `<type>`はブリッジタイプ、
- `<name>`はブリッジ名です。

例えば、MQTTブリッジのイベントは`"$bridges/mqtt:*"`の形式で参照できます。MQTTデータブリッジ`my_mqtt_bridge`が送信するすべてのメッセージに対してルールを設定するには、以下のステートメントを使用します。

**例：**

```sql
SELECT
  *
FROM
  "$bridges/mqtt:my_mqtt_bridge"
```

**出力例：**

```sql
{
  "id": "0005E27C1D24E44FF440000017520000",
  "server": "broker.emqx.io:1883",
  "payload": "hello",
  "topic": "t/a",
  "qos": 1,
  "dup": false,
  "retain": false,
  "pub_props": {
    "Message-Expiry-Interval": 30,
    "Payload-Format-Indicator": 0,
    "User-Property": {
      "foo": "bar"
    },
    "User-Property-Pairs": [
      {
        "key": "foo"
      },
      {
        "value": "bar"
      }
    ]
  },
  "message_received_at": 1645002753259,
}
```

返される出力の各フィールドは以下の通りです。

| フィールド             | 説明                                                         |
| :-------------------- | :----------------------------------------------------------- |
| `id`                  | MQTTメッセージID                                             |
| `server`              | リモートMQTTブローカーのサーバー名（例："broker.emqx.io:1883"） |
| `payload`             | MQTTペイロード                                              |
| `topic`               | MQTTトピック                                               |
| `qos`                 | MQTTのQoS                                                 |
| `dup`                 | MQTTのDUPフラグ                                           |
| `retain`              | MQTTのRetainフラグ                                        |
| `pub_props`           | PUBLISHプロパティ（MQTT 5.0クライアントのみ）               |
| `message_received_at` | メッセージ受信時刻のタイムスタンプ（単位：ms）             |
