Mapping Tables
EMQX Mapping Tablesプラグインは、Rule SQL用の名前付きマッピングテーブルを提供します。SQL文内で長いCASE WHEN式を維持せずに、安定した識別子、コード、またはバイナリフィールドIDを構造化された値にマッピングする必要があるルールでこのプラグインを使用してください。
このプラグインはEMQX 6.1.5以降で利用可能です。Rule SQLでmaptab_lookupを使用する前に、プラグインをインストールして起動してください。
マッピングテーブルはemqx ctl maptabs CLIを通じてJSONファイルからロードされ、EMQXのレプリケートされたデータベースに保存されます。ルールはmaptab_lookup SQL関数でテーブルを照会します。関数のシグネチャやSQL例については、組み込みSQL関数を参照してください。
テーブルファイル
マッピングテーブルはJSONファイルです。ファイル名の.json拡張子を除いた部分がテーブル名として使用されます。テーブル名には英数字、アンダースコア、ハイフンのみ使用可能です。
JSONファイルは行オブジェクトの配列を含む必要があります。各行はkeyフィールドを必ず含みます。その他のフィールドは行の値マップを構成します。
例:
[
{
"key": 1,
"signal_name": "temperature_c",
"start_bit": 17,
"length": 8,
"type": "integer",
"signedness": "signed",
"endian": "big"
},
{
"key": 2,
"signal_name": "pressure_kpa",
"start_bit": 17,
"length": 32,
"type": "float",
"signedness": "unsigned",
"endian": "big"
}
]keyはJSONの整数または文字列でなければなりません。JSONのネイティブ型は保持されるため、整数の50と文字列の"50"は異なるキーとして扱われます。
ロードはフェイルクローズ方式です。以下の問題がある場合、EMQXはファイル全体を拒否し、以前のテーブルバージョンを保持します。
- 無効なJSON
- 配列でないトップレベルの値
- オブジェクトでない行
keyを含まない行- 重複するキー
- 浮動小数点数、ブール値、null、配列、オブジェクト型のキー
CLIコマンド
emqx ctl maptabs CLIでマッピングテーブルを管理します。
| コマンド | 説明 |
|---|---|
emqx ctl maptabs list | ローカルノードにキャッシュされているテーブルの一覧を表示。行数とバージョンを含む。 |
emqx ctl maptabs status | すべての稼働中ノードのテーブル一覧を表示。キャッシュのずれ検出に使用。 |
emqx ctl maptabs load <file> | テーブルJSONファイルを検証し、すべてのノードにレプリケート。 |
emqx ctl maptabs reload | すべての稼働中ノードでストレージからキャッシュを再構築。キャッシュ同期が必要な場合に使用。 |
emqx ctl maptabs get <name> | 保存されているテーブルのJSON内容を表示。 |
emqx ctl maptabs delete <name> | すべてのノードからテーブルを削除。 |
すべてのコマンド出力はJSON形式ですが、emqx ctl maptabs get <name>はテーブルが存在する場合、保存されたJSON内容を直接表示します。
設定
プラグインは標準のプラグイン設定API PUT /api/v5/plugins/<name-vsn>/config またはプラグイン設定ファイルで設定します。
| 設定項目 | デフォルト | 説明 |
|---|---|---|
max_tables | 100 | 最大マッピングテーブル数。この制限を超える新規テーブルのロードは拒否されます。既存テーブルの置換は可能です。 |
max_rows_per_table | 10000 | 1テーブルあたりの最大行数。これを超えるファイルは拒否されます。 |
max_table_file_bytes | 10000000 | テーブルJSONファイルの最大サイズ(バイト)。これを超えるファイルは読み込み前に拒否されます。 |
制限はテーブルロード時にチェックされます。制限変更は既存のロード済みテーブルを削除または切り詰めしません。
クラスター動作
プラグインはEMQXの組み込みレプリケートデータベースにテーブル内容を保存します。テーブルのロードや削除はクラスター内の全ノードにレプリケートされ、各ノードは保存された内容からインメモリキャッシュを再構築します。
クラスター内のすべてのノードにプラグインをインストールして起動してください。テーブルロードや削除時にダウンしていたノードは、再起動時にストレージからキャッシュを再構築して追いつきます。
キャッシュの更新はリーダーに対してアトミックです。ルールの照会は古いテーブルバージョンか新しいテーブルバージョンのいずれかを参照し、中途半端な更新は見ません。
アクセスと共有
マッピングテーブルは管理者のみがCLIで管理します。テーブルはテナントのネームスペースを超えて共有されます。照会はクライアントがマルチテナンシーのネームスペースに属しているかに関わらず同じ行を返します。
テナントごとに行を分ける必要がある場合は、テーブルデータにテナントをエンコードしてください。例えば、照会キーにテナントを含める方法があります。
maptab_lookup('signals', concat(client_attrs.tns, ':', item_id))またはテナントごとにテーブルを分け、ルール内でテーブル名を構成することも可能です。テーブル内のすべてのキーと照会箇所に同じ規約を適用してください。
ダウンロード
各EMQXリリースのtarball:
| EMQXバージョン | プラグインバージョン | パッケージ |
|---|---|---|
| 6.1.5 | 0.1.2 | emqx_maptabs-0.1.2.tar.gz (sha256) |