3

MySQL データベースと Cosmos の両方にデータを格納するために cygnus を使用しています。cosmos へのデータの保存は正常に機能しますが、MySQL に保存する場合、特に「cygnusagent.sinks.mysql-sink.attr_persistence = row」の代わりに属性「cygnusagent.sinks.mysql-sink.attr_persistence = column」を使用すると、データは保存されません。保存され、flume ログにいくつかのエラーが表示されます。

column 属性を使用する場合、事前にテーブルを作成する必要があるため (詳細: https://github.com/telefonicaid/fiware-cygnus/blob/master/doc/design/OrionMySQLSink.md#important-notes-regarding-the -persistence-mode )、テーブルを作成します。

CREATE TABLE def_servpath_sensorreading4_sensorreading(systemid int,value float, sensorid int, nodeid int);

DESCRIBE def_servpath_sensorreading4_sensorreading(systemid int,value float, sensorid int, nodeid int);
mysql> DESCRIBE def_servpath_sensorreading4_sensorreading;
+----------+---------+------+-----+---------+-------+
| Field    | Type    | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+-------+
| systemid | int(11) | YES  |     | NULL    |       |
| value    | float   | YES  |     | NULL    |       |
| sensorid | int(11) | YES  |     | NULL    |       |
| nodeid   | int(11) | YES  |     | NULL    |       |
+----------+---------+------+-----+---------+-------+
4 rows in set (0.00 sec)

これはフルームのログです:

11 Aug 2015 11:40:31,977 INFO  [SinkRunner-PollingRunner-DefaultSinkProcessor] (com.telefonica.iot.cygnus.sinks.OrionMySQLSink.persist:240)  - [mysql-sink] Persisting data at OrionMySQLSink. Database: def_serv, Table: def_servpath_sensorreading3_sensorreading, Timestamp: 2015-08-11T08:40:31.969, Data (attrs): {systemid=1, value=29.2, sensorid=2, nodeid=1}, (metadata): {sensorid_md=[], systemid_md=[], value_md=[], nodeid_md=[]}
11 Aug 2015 11:40:31,978 WARN  [SinkRunner-PollingRunner-DefaultSinkProcessor] (com.telefonica.iot.cygnus.sinks.OrionSink.process:182)  - Bad context data (Unknown column 'systemid' in 'field list')
11 Aug 2015 11:40:31,978 INFO  [SinkRunner-PollingRunner-DefaultSinkProcessor] (com.telefonica.iot.cygnus.sinks.OrionSink.process:193)  - Finishing transaction (1439278647-655-0000000005)
11 Aug 2015 11:40:32,369 INFO  [SinkRunner-PollingRunner-DefaultSinkProcessor] (com.telefonica.iot.cygnus.sinks.OrionHDFSSink.persist:356)  - [hdfs-sink] Persisting data at OrionHDFSSink. HDFS file (def_serv/def_servpath/sensorreading3_sensorreading/sensorreading3_sensorreading.txt), Data ({"recvTime":"2015-08-11T08:40:31.969Z","nodeid":"1", "nodeid_md":[],"sensorid":"2", "sensorid_md":[],"systemid":"1", "systemid_md":[],"value":"29.2", "value_md":[]})
11 Aug 2015 11:40:32,858 INFO  [SinkRunner-PollingRunner-DefaultSinkProcessor] (com.telefonica.iot.cygnus.sinks.OrionSink.process:193)  - Finishing transaction (1439278647-655-0000000005)

次のエラーが発生する場所:

不正なコンテキスト データ (「フィールド リスト」の不明な列「systemid」)

メタデータに関連するテーブルにさらに列を作成する必要がありますか? テーブルを正しく作成していますか?

前もって感謝します。

4

1 に答える 1

0

はい、ドキュメントのこのセクションでは、メタデータに関する追加の列を各属性ごとに追加する必要があることを詳しく説明しています (属性の名前に を付けることにより_md)。それにもかかわらず、例は与えられていません(改善すべきもの、btw)ので、ここにあります(特定のケースに合わせて調整されています):

create table def_servpath_sensorreading4_sensorreading(recvTime text, systemid int, systemid_md text, value float, value_md text, sensorid int, sensorid_md text, nodeid int, nodeid_md text);

属性名がテーブルのフィールドと一致することが非常に重要です。つまり、エンティティには;という名前の属性が必要です。systemid属性にsystem_id名前を付ける場合、それはフィールド名でもある必要があります (メタデータ フィールドsystem_id_md)。

ご覧のrecvTimeとおり、Cygnus は通知を受信するたびにそのような値を保持するため、受信時間に関する追加の列 ( ) があります。

テーブル名に関しては、完全に構成されています。これは、通知された FIWARE サービス パス、エンティティ ID、およびエンティティ タイプ (連結文字として「_」) を連結したものでなければなりません。そのようなテーブルは、通知された FIWARE サービスとして名前が付けられたデータベース内に存在する必要があります。

于 2015-08-11T09:31:13.033 に答える