【公式】HULFT IoT EdgeStreaming 逆引きリファレンス_2021年7月1日_初版発行
入力値が揃ったタイミングで処理を実行したい
テーブルへの書き込みと、テーブルのレコード監視機能を組み合わせて非同期データの待ち合わせを実行する処理について説明します。
この処理で以下のような出力結果を得られます。
- 例(「インターバル」が「1」で、テンポラリテーブルの内容が揃ったら出力する場合)
-
1秒ごとに監視対象ファイルの内容をテンポラリテーブルに入力し、テンポラリテーブルの内容が条件通りに揃ったら出力する。
処理の説明
テンポラリテーブルへの書き込みと、テンポラリテーブルのレコード監視機能を組み合わせて、非同期データの待ち合わせを行います。
ここでは以下の流れで処理を作成していきます。
1. 「time」、「uniqueNumber」、「Name」の3つのカラムを持つテンポラリテーブルを作成します。
使用するコンポーネントアイコンは、 「書き込み」です。
2. 1秒ごとに現在時刻と自動でインクリメントされる番号を取得し、テンポラリテーブルの「time」カラムと「uniqueNumber」カラムに書き込む処理を作成します。
使用するコンポーネントアイコンは、「定期イベント」および「書き込み」です。
ポイントとなる機能(コンポーネントアイコン)
ポイントとなる機能(Mapperロジック)
- 現在日時(OSタイムゾーン)
-
現在日時を出力します。
ツールパレットの日付-基本-現在日時(OSタイムゾーン)で設定できます。
- 日時フォーマッティング(定型書式)
-
選択されたフォーマットに日時をフォーマッティングします。
ツールパレットの文字列-日付-日時フォーマッティング(定型書式)で設定できます。
- インクリメント
-
1を追加した値を出力します。
ツールパレットの数値-基本-インクリメントで設定できます。
操作手順
ここでは、「処理の説明」に記載されている処理を例に説明します。
1. テンポラリテーブルの設定(グローバルリソース)を行います。
-
ツールパレットの基本-テンポラリテーブル-書き込みをスクリプトキャンバスにドラッグ&ドロップします。
新規書き込み処理ダイアログが表示されます。
-
「必須設定」タブの「テーブル」で、「追加」を選択します。
新規テンポラリテーブル設定ダイアログが表示されます。
-
以下のようにテンポラリテーブルを設定し、完了ボタンをクリックします。
-
追加ボタンをクリックして、列名「time」、「uniqueNumber」、「Name」の3つのカラムを作成します。
-
「データ生存期間」および「クリーンナップ間隔」を入力します。
ここでは「60」を入力します。
-
-
完了ボタンをクリックします。
2. 1秒ごとに自動でインクリメントされる番号と時刻を、テンポラリテーブルへ書き込むストリームフローを作成します。
-
ツールパレットの基本-基本-定期イベントをスクリプトキャンバスにドラッグ&ドロップします。
新規定期イベント処理ダイアログが表示されます。
-
「インターバル」に「1」を入力し、完了ボタンをクリックします。
3. スクリプトキャンバスで、定期イベントアイコンを書き込みアイコンへドラッグ&ドロップします。
マッピングを追加する旨のメッセージが出た場合ははいボタンをクリックしてください。
mapping_1アイコンとストリームフローが作成されます。
4. スクリプトキャンバスで「mapping_1」をダブルクリックします。
Mapperエディタが表示されます。
5. ツールパレットから以下のロジックをMapperエディタにドラッグ&ドロップします。
-
現在日時を取得するため、日付-基本-現在日時(OSタイムゾーン)
-
出力する日時のフォーマットを指定するため、文字列-日付-日時フォーマッティング(定型書式)
-
自動でインクリメントされる番号を出力するため、数値-基本-インクリメント
Mapperエディタに各ロジックが配置されます。
6. 配置したロジックのプロパティを入力します。
-
日時フォーマッティング(定型書式)ロジックをダブルクリックします。
日時フォーマッティング(定型書式)ロジックのプロパティダイアログが表示されます。
-
「フォーマット」のプルダウンメニューからフォーマットを選択します。
ここでは「hh:mm:ss」を選択します。
-
必要に応じて「コメント」も入力し、完了ボタンをクリックします。
-
必要に応じて現在日時(OSタイムゾーン)およびインクリメントロジックをそれぞれダブルクリックして「コメント」を入力し、完了ボタンをクリックします。
7. 現在日時(OSタイムゾーン)ロジックを日時フォーマッティング(定型書式)ロジックへドラッグ&ドロップします。
現在日時(OSタイムゾーン)ロジックから日時フォーマッティング(定型書式)ロジックへのマッピングリンクが表示されます。
8. 日時フォーマッティング(定型書式)ロジックを出力先(ここでは「time」)へドラッグ&ドロップします。
日時フォーマッティング(定型書式)ロジックから「time」へマッピングリンクが表示されます。
9. インクリメントロジックを出力先(ここでは「uniqueNumber」)へドラッグ&ドロップします。
インクリメントロジックから「uniqueNumber」へマッピングリンクが表示されます。
これで「mapping_1」の設定ができました。スクリプトキャンバスに戻ります。
10. ファイルに行が書き込まれるたびに取得時刻と行の内容をテンポラリテーブルへ書き込むストリームフローを作成します。
-
ツールパレットの基本-テンポラリテーブル-書き込みをスクリプトキャンバスにドラッグ&ドロップします。
新規書き込み処理ダイアログが表示されます。
-
「必須設定」タブの「テーブル」で、手順1. で追加したテーブルを選択します。
-
完了ボタンをクリックします。
-
ツールパレットのファイル-基本-更新監視をスクリプトキャンバスにドラッグ&ドロップします。
新規更新監視処理ダイアログが表示されます。
-
「必須設定」タブの「ファイル名」で、更新監視対象のファイルを指定します。
-
完了ボタンをクリックします。
11. スクリプトキャンバスで、更新監視アイコンを書き込みアイコンへドラッグ&ドロップします。
マッピングを追加する旨のメッセージが出た場合ははいボタンをクリックしてください。
mapping_2アイコンとストリームフローが作成されます。
12. スクリプトキャンバスで「mapping_2」をダブルクリックします。
Mapperエディタが表示されます。
13. 入力元の「payload」を出力先の「Name」へドラッグ&ドロップします。
「payload」から「Name」へマッピングリンクが表示されます。
これで「mapping_2」の設定ができました。スクリプトキャンバスに戻ります。
14. テンポラリテーブルのすべてのカラムに値が揃ったときに標準出力へ値を出力するストリームフローを作成します。
-
ツールパレットの基本-テンポラリテーブル-レコード監視をスクリプトキャンバスにドラッグ&ドロップします。
新規レコード監視処理ダイアログが表示されます。
-
以下のように監視対象を設定します。
-
「必須設定」タブの「テーブル」で、手順1. で作成したテンポラリテーブルを選択します。
-
「データ監視対象」の「監視対象」すべてにチェックを入れます。
-
-
完了ボタンをクリックします。
-
ツールパレットの基本-基本-標準出力をスクリプトキャンバスにドラッグ&ドロップします。
新規標準出力処理ダイアログが表示されます。
-
完了ボタンをクリックします。
15. スクリプトキャンバスで、レコード監視アイコンを標準出力アイコンへドラッグ&ドロップします。
マッピングを追加する旨のメッセージが出た場合ははいボタンをクリックしてください。
mapping_3アイコンとストリームフローが作成されます。
16. スクリプトキャンバスで「mapping_3」をダブルクリックします。
Mapperエディタが表示されます。
17. 出力先のスキーマを作成します。
ここでは「stdout」の配下に「root」要素を作成し、「root」要素の子要素として「time」、「uniqueNumber」、および「Name」を作成します。
-
出力先の「stdout」を右クリックして、メニューからルート要素の追加を選択します。
「root」要素が作成されます。
-
「root」要素を右クリックして、メニューから追加-子要素を選択します。
出力要素の追加ダイアログが表示されます。
-
「要素名」に「time」を入力します。「コメント」は必要に応じて入力してください。
-
OKボタンをクリックします。
「root」配下に「time」要素が作成されます。
-
「time」と同じ手順で「root」配下に「uniqueNumber」要素および「Name」要素を作成します。
18. 入力元から出力先へ以下をドラッグ&ドロップします。
-
入力元の「time」を出力先の「time」へ
-
入力元の「uniqueNumber」を出力先の「uniqueNumber」へ
-
入力元の「Name」を出力先の「Name」へ
19. スクリプトを保存します。
スクリプトの保存方法については「ファーストステップガイド」を参照してください。
スクリプトを実行すると、監視対象のファイルに1行書き込みが行われたタイミングで、以下のように「time」、「uniqueNumber」、「Name」の値が揃って標準出力されます。
{"stdout":{"Name":"product027","time":"08:49:27","uniqueNumber":3}}
【公式】HULFT IoT EdgeStreaming 逆引きリファレンス_2021年7月1日_初版発行