Cygnus MySQL 接收器错误(attr_persistence = 列)
Cygnus MySQL sink error (attr_persistence = column)
我正在使用 cygnus 在 MySQL 数据库和 Cosmos 中存储数据。
在 cosmos 中存储数据工作正常,但是当存储在 MySQL 中时,特别是使用属性 "cygnusagent.sinks.mysql-sink.attr_persistence = column" 而不是 "cygnusagent.sinks.mysql-sink.attr_persistence = row" 数据未存储并且我在 [=32] 中遇到一些错误=]日志。
由于在使用列属性时需要预先创建table(更多信息:https://github.com/telefonicaid/fiware-cygnus/blob/master/doc/design/OrionMySQLSink.md#important-notes-regarding-the-persistence-mode),我创建table:
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)
这是 flume 日志:
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)
我在哪里收到以下错误:
Bad context data (Unknown column 'systemid' in 'field list')
我是否需要在与元数据相关的 table 中创建更多列?我是否正确创建了 table?
提前致谢。
是的,文档的 this 部分详细说明必须为每个属性添加一个关于元数据的附加列(通过在属性名称后缀 _md
)。然而,没有给出示例(顺便说一句,有待改进),所以这里是(根据您的具体情况量身定制):
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);
属性名称与 table 中的字段匹配非常重要。我的意思是,您的实体 必须 有一个名为 systemid
的属性;如果您的属性将被命名为 system_id
,那么它也必须是字段名称(作为元数据字段 system_id_md
)。
你看,有一个关于接收时间的附加列(recvTime
),因为每次收到通知时 Cygnus 都会保留这样的值。
关于table名称,你写的很完美:它必须是通知的FIWARE服务路径、实体ID和实体类型的串联('_'作为串联字符)。这样的 table 必须存在于名为通知的 FIWARE 服务的数据库中。
我正在使用 cygnus 在 MySQL 数据库和 Cosmos 中存储数据。 在 cosmos 中存储数据工作正常,但是当存储在 MySQL 中时,特别是使用属性 "cygnusagent.sinks.mysql-sink.attr_persistence = column" 而不是 "cygnusagent.sinks.mysql-sink.attr_persistence = row" 数据未存储并且我在 [=32] 中遇到一些错误=]日志。
由于在使用列属性时需要预先创建table(更多信息:https://github.com/telefonicaid/fiware-cygnus/blob/master/doc/design/OrionMySQLSink.md#important-notes-regarding-the-persistence-mode),我创建table:
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)
这是 flume 日志:
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)
我在哪里收到以下错误:
Bad context data (Unknown column 'systemid' in 'field list')
我是否需要在与元数据相关的 table 中创建更多列?我是否正确创建了 table?
提前致谢。
是的,文档的 this 部分详细说明必须为每个属性添加一个关于元数据的附加列(通过在属性名称后缀 _md
)。然而,没有给出示例(顺便说一句,有待改进),所以这里是(根据您的具体情况量身定制):
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);
属性名称与 table 中的字段匹配非常重要。我的意思是,您的实体 必须 有一个名为 systemid
的属性;如果您的属性将被命名为 system_id
,那么它也必须是字段名称(作为元数据字段 system_id_md
)。
你看,有一个关于接收时间的附加列(recvTime
),因为每次收到通知时 Cygnus 都会保留这样的值。
关于table名称,你写的很完美:它必须是通知的FIWARE服务路径、实体ID和实体类型的串联('_'作为串联字符)。这样的 table 必须存在于名为通知的 FIWARE 服务的数据库中。