【公式】HULFT IoT EdgeStreaming 逆引きリファレンス_2021年7月1日_初版発行

特定のカラムが登録されたタイミングで処理を実行したい

テーブルのレコード監視機能を使用して、特定のカラムが更新されたタイミングで実行する処理について説明します。

この処理で以下のような出力結果を得られます。

テンポラリテーブルの特定のカラム(カラムA、カラムB、およびカラムC)に値が書き込まれていくのを監視して、カラムA、カラムB、およびカラムCのすべてに書き込まれたときだけ、その値をデータベースに出力する場合。

  • カラムAにのみ値が書き込まれた場合、何も出力しない。

  • カラムAとカラムCにのみ値が書き込まれた場合、何も出力しない。

  • カラムA、カラムB、カラムCに値が書き込まれた場合、その値をデータベースへ出力する。

処理の説明

テンポラリテーブルへの書き込みと、テンポラリテーブルのレコード監視機能を組み合わせて、特定のカラムが更新されたタイミングで処理を行います。

テンポラリテーブルの特定のカラム(「time」、「sensorA」、「sensorB」、および「optionSensorC」)に値が書き込まれていくのを監視して、「time」、「sensorA」、「sensorB」の3つのカラムに値が書き込まれたとき、「time」、「sensorA」、「sensorB」、および「optionSensorC」の値をデータベースに出力する処理を行います。

ここでは以下の流れで処理を作成していきます。

1. 「time」、「sensorA」、「sensorB」、「optionSensorC」の4つのカラムを持つテンポラリテーブルを作成します。

使用するコンポーネントアイコンは、「書き込み」です。

2. 1秒ごとに現在時刻と自動でインクリメントされる番号を取得し、テンポラリテーブルの「time」カラムに現在時刻を、「sensorA」カラムに番号を書き込む処理を作成します。

使用するコンポーネントアイコンは、「定期イベント」および「書き込み」です。

3. 3秒ごとに現在時刻と自動でインクリメントされる番号を取得し、テンポラリテーブルの「time」カラムに現在時刻を、「sensorB」カラムに番号を書き込む処理を作成します。

使用するコンポーネントアイコンは、「定期イベント」および「書き込み」です。

4. 5秒ごとに現在時刻と自動でインクリメントされる番号を取得し、テンポラリテーブルの「time」カラムに現在時刻を、「optionSensorC」カラムに番号を書き込む処理を作成します。

使用するコンポーネントアイコンは、「定期イベント」および「書き込み」です。

5. 2. 3. 、および4. のストリームフローで書かれた値を「time」カラムをキーとして結合し、「time」、「sensorA」、「sensorB」の値が揃った場合はデータベースに現在時刻と番号を書き込む処理を作成します。

カラム「optionSensorC」には、値が書き込まれていればその値をデータベースに書き込みます。

使用するコンポーネントアイコンは、「レコード監視」および「挿入処理」です。

ポイントとなる機能(コンポーネントアイコン)

書き込み

書き込み処理のプロパティを設定します。

ツールパレットの基本-テンポラリテーブル-書き込みで設定できます。

定期イベント

イベントを実行するインターバルを設定します。

ツールパレットの基本-基本-定期イベントで設定できます。

レコード監視

レコード監視処理のプロパティを設定します。

ツールパレットの基本-テンポラリテーブル-レコード監視で設定できます。

挿入処理

データベースへの挿入処理のプロパティを設定します。

ツールパレットのデータベース-PostgreSQL-挿入で設定できます。

ポイントとなる機能(Mapperロジック)

現在日時(OSタイムゾーン)

現在日時を出力します。

ツールパレットの日付-基本-現在日時(OSタイムゾーン)で設定できます。

日時フォーマッティング(定型書式)

選択されたフォーマットに日時をフォーマッティングします。

ツールパレットの文字列-日付-日時フォーマッティング(定型書式)で設定できます。

インクリメント

1を追加した値を出力します。

ツールパレットの数値-基本-インクリメントで設定できます。

操作手順

ここでは、「処理の説明」に記載されている処理を例に説明します。

1. テンポラリテーブルの設定(グローバルリソース)を行います。

  1. ツールパレットの基本-テンポラリテーブル-書き込みをスクリプトキャンバスにドラッグ&ドロップします。

    新規書き込み処理ダイアログが表示されます。

  2. 「必須設定」タブの「テーブル」で、「追加」を選択します。

    新規テンポラリテーブル設定ダイアログが表示されます。

  3. 以下のようにテンポラリテーブルを設定し、完了ボタンをクリックします。

    • 追加ボタンをクリックして、列名「time」、「sensorA」、「sensorB」、「optionSensorC」の4つのカラムを作成します。

    • カラム「time」で値を結合するために「time」の「主キー」にチェックを入れます。

    • 「データ生存期間」および「クリーンナップ間隔」を入力します。

      ここでは「60」を入力します。

  4. 完了ボタンをクリックします。

2. 1秒ごとに自動でインクリメントされる番号と時刻を、テンポラリテーブルへ書き込むストリームフローを作成します。

  1. ツールパレットの基本-基本-定期イベントをスクリプトキャンバスにドラッグ&ドロップします。

    新規定期イベント処理ダイアログが表示されます。

  2. 「インターバル」に「1」を入力し、完了ボタンをクリックします。

3. スクリプトキャンバスで、定期イベントアイコンを書き込みアイコンへドラッグ&ドロップします。

マッピングを追加する旨のメッセージが出た場合ははいボタンをクリックしてください。

mapping_1アイコンとストリームフローが作成されます。

4. スクリプトキャンバスで「mapping_1」をダブルクリックします。

Mapperエディタが表示されます。

5. ツールパレットから以下のロジックをMapperエディタにドラッグ&ドロップします。

  • 現在日時を取得するため、日付-基本-現在日時(OSタイムゾーン)

  • 出力する日時のフォーマットを指定するため、文字列-日付-日時フォーマッティング(定型書式)

  • 自動でインクリメントされる番号を出力するため、数値-基本-インクリメント

Mapperエディタに各ロジックが配置されます。

6. 配置したロジックのプロパティを入力します。

  1. 日時フォーマッティング(定型書式)ロジックをダブルクリックします。

    日時フォーマッティング(定型書式)ロジックのプロパティダイアログが表示されます。

  2. 「フォーマット」のプルダウンメニューからフォーマットを選択します。

    ここでは「hh:mm:ss」を選択します。

  3. 必要に応じて「コメント」も入力し、完了ボタンをクリックします。

  4. 必要に応じて現在日時(OSタイムゾーン)およびインクリメントロジックをそれぞれダブルクリックして「コメント」を入力し、完了ボタンをクリックします。

7. 現在日時(OSタイムゾーン)ロジックを日時フォーマッティング(定型書式)ロジックへドラッグ&ドロップします。

現在日時(OSタイムゾーン)ロジックから日時フォーマッティング(定型書式)ロジックへのマッピングリンクが表示されます。

8. 日時フォーマッティング(定型書式)ロジックを出力先(ここでは「time」)へドラッグ&ドロップします。

日時フォーマッティング(定型書式)ロジックから「time」へマッピングリンクが表示されます。

9. インクリメントロジックを出力先(ここでは「sensorA」)へドラッグ&ドロップします。

インクリメントロジックから「sensorA」へマッピングリンクが表示されます。

これで「mapping_1」の設定ができました。スクリプトキャンバスに戻ります。

10. 手順 1. で作成したテンポラリテーブルの設定(グローバルリソース)を指定します。

  1. ツールパレットの基本-テンポラリテーブル-書き込みをスクリプトキャンバスにドラッグ&ドロップします。

    新規書き込み処理ダイアログが表示されます。

  2. 「必須設定」タブの「テーブル」で、手順1. で作成したテーブルを選択します。

  3. 完了ボタンをクリックします。

    = 備考 =

    「入力データ」はこの後の手順でストリームフローを作成すると自動的にマッピングアイコンの名前が入力されます。ここでは設定する必要はありません。

11. 3秒ごとに自動でインクリメントされる番号と時刻を、テンポラリテーブルへ書き込むストリームフローを作成します。

  1. ツールパレットの基本-基本-定期イベントをスクリプトキャンバスにドラッグ&ドロップします。

    新規定期イベント処理ダイアログが表示されます。

  2. 「インターバル」に「3」を入力し、完了ボタンをクリックします。

12. スクリプトキャンバスで、定期イベントアイコンを書き込みアイコンへドラッグ&ドロップします。

マッピングを追加する旨のメッセージが出た場合ははいボタンをクリックしてください。

mapping_2アイコンとストリームフローが作成されます。

13. スクリプトキャンバスで「mapping_2」をダブルクリックします。

Mapperエディタが表示されます。

14. ツールパレットから以下のロジックをMapperエディタにドラッグ&ドロップします。

  • 現在日時を取得するため、日付-基本-現在日時(OSタイムゾーン)

  • 出力する日時のフォーマットを指定するため、文字列-日付-日時フォーマッティング(定型書式)

  • 自動でインクリメントされる番号を出力するため、数値-基本-インクリメント

Mapperエディタに各ロジックが配置されます。

15. 配置したロジックのプロパティを入力します。

  1. 日時フォーマッティング(定型書式)ロジックをダブルクリックします。

    日時フォーマッティング(定型書式)ロジックのプロパティダイアログが表示されます。

  2. 「フォーマット」のプルダウンメニューからフォーマットを選択します。

    ここでは「hh:mm:ss」を選択します。

  3. 必要に応じて「コメント」も入力し、完了ボタンをクリックします。

  4. 必要に応じて現在日時(OSタイムゾーン)およびインクリメントロジックをそれぞれダブルクリックして「コメント」を入力し、完了ボタンをクリックします。

16. 現在日時(OSタイムゾーン)ロジックを日時フォーマッティング(定型書式)ロジックへドラッグ&ドロップします。

現在日時(OSタイムゾーン)ロジックから日時フォーマッティング(定型書式)ロジックへのマッピングリンクが表示されます。

17. 日時フォーマッティング(定型書式)ロジックを出力先(ここでは「time」)へドラッグ&ドロップします。

日時フォーマッティング(定型書式)ロジックから「time」へマッピングリンクが表示されます。

18. インクリメントロジックを出力先(ここでは「sensorB」)へドラッグ&ドロップします。

インクリメントロジックから「sensorB」へマッピングリンクが表示されます。

これで「mapping_2」の設定ができました。スクリプトキャンバスに戻ります。

19. 手順 1. で作成したテンポラリテーブルの設定(グローバルリソース)を指定します。

  1. ツールパレットの基本-テンポラリテーブル-書き込みをスクリプトキャンバスにドラッグ&ドロップします。

    新規書き込み処理ダイアログが表示されます。

  2. 「必須設定」タブの「テーブル」で、手順1. で作成したテーブルを選択します。

  3. 完了ボタンをクリックします。

    = 備考 =

    「入力データ」はこの後の手順でストリームフローを作成すると自動的にマッピングアイコンの名前が入力されます。ここでは設定する必要はありません。

20. 5秒ごとに自動でインクリメントされる番号と時刻を、テンポラリテーブルへ書き込むストリームフローを作成します。

  1. ツールパレットの基本-基本-定期イベントをスクリプトキャンバスにドラッグ&ドロップします。

    新規定期イベント処理ダイアログが表示されます。

  2. 「インターバル」に「5」を入力し、完了ボタンをクリックします。

21. スクリプトキャンバスで、定期イベントアイコンを書き込みアイコンへドラッグ&ドロップします。

マッピングを追加する旨のメッセージが出た場合ははいボタンをクリックしてください。

mapping_3アイコンとストリームフローが作成されます。

22. スクリプトキャンバスで「mapping_3」をダブルクリックします。

Mapperエディタが表示されます。

23. ツールパレットから以下のロジックをMapperエディタにドラッグ&ドロップします。

  • 現在日時を取得するため、日付-基本-現在日時(OSタイムゾーン)

  • 出力する日時のフォーマットを指定するため、文字列-日付-日時フォーマッティング(定型書式)

  • 自動でインクリメントされる番号を出力するため、数値-基本-インクリメント

Mapperエディタに各ロジックが配置されます。

24. 配置したロジックのプロパティを入力します。

  1. 日時フォーマッティング(定型書式)ロジックをダブルクリックします。

    日時フォーマッティング(定型書式)ロジックのプロパティダイアログが表示されます。

  2. 「フォーマット」のプルダウンメニューからフォーマットを選択します。

    ここでは「hh:mm:ss」を選択します。

  3. 必要に応じて「コメント」も入力し、完了ボタンをクリックします。

  4. 必要に応じて現在日時(OSタイムゾーン)およびインクリメントロジックをそれぞれダブルクリックして「コメント」を入力し、完了ボタンをクリックします。

25. 現在日時(OSタイムゾーン)ロジックを日時フォーマッティング(定型書式)ロジックへドラッグ&ドロップします。

現在日時(OSタイムゾーン)ロジックから日時フォーマッティング(定型書式)ロジックへのマッピングリンクが表示されます。

26. 日時フォーマッティング(定型書式)ロジックを出力先(ここでは「time」)へドラッグ&ドロップします。

日時フォーマッティング(定型書式)ロジックから「time」へマッピングリンクが表示されます。

27. インクリメントロジックを出力先(ここでは「optionSensorC」)へドラッグ&ドロップします。

インクリメントロジックから「optionSensorC」へマッピングリンクが表示されます。

これで「mapping_3」の設定ができました。スクリプトキャンバスに戻ります。

28. テンポラリテーブルのカラム「time」、「sensorA」、「sensorB」値が揃ったときにデータベースへ値を出力するストリームフローを作成します。

  1. ツールパレットの基本-テンポラリテーブル-レコード監視をスクリプトキャンバスにドラッグ&ドロップします。

    新規レコード監視処理ダイアログが表示されます。

  2. 以下のように監視対象を設定します。

    • 「必須設定」タブの「テーブル」で、手順 1. で作成したテンポラリテーブルを選択します。

    • 「データ監視対象」の以下の「監視対象」にチェックを入れます。

      • 「time」

      • 「sensorA」

      • 「sensorB」

  3. 完了ボタンをクリックします。

29. 出力するデータベースを設定します。

  1. ツールパレットのデータベース-PostgreSQL-挿入をスクリプトキャンバスにドラッグ&ドロップします。

    新規挿入処理ダイアログが表示されます。

  2. 「必須設定」タブを設定します。

  3. 完了ボタンをクリックします。

30. スクリプトキャンバスで、レコード監視アイコンを挿入処理アイコンへドラッグ&ドロップします。

マッピングを追加する旨のメッセージが出た場合ははいボタンをクリックしてください。

mapping_4アイコンとストリームフローが作成されます。

31. スクリプトキャンバスで「mapping_4」をダブルクリックします。

Mapperエディタが表示されます。

32. 入力元から出力先へ以下をドラッグ&ドロップします。

  • 入力元の「time」を出力先の「time」へ

  • 入力元の「sensorA」を出力先の「sensorA」へ

  • 入力元の「sensorB」を出力先の「sensorB」へ

  • 入力元の「optionSensorC」を出力先の「optionSensorC」へ

33. スクリプトを保存します。

スクリプトの保存方法については「ファーストステップガイド」を参照してください。

 

スクリプトを実行すると、以下の結果を得られます。

 

 

【公式】HULFT IoT EdgeStreaming 逆引きリファレンス_2021年7月1日_初版発行