无法在mysql接收器上使用attr\u持久性列

ymzxtsji  于 2021-06-04  发布在  Flume
关注(0)|答案(1)|浏览(389)

我正在尝试使用orionmysqlsink的列类型。我的代理人有以下代码:

cygnusagent.sinks.mysql-sink.type = com.telefonica.iot.cygnus.sinks.OrionMySQLSink
cygnusagent.sinks.mysql-sink.channel = mysql-channel
cygnusagent.sinks.mysql-sink.enable_grouping = false
cygnusagent.sinks.mysql-sink.mysql_host = localhost
cygnusagent.sinks.mysql-sink.mysql_port = 3306
cygnusagent.sinks.mysql-sink.mysql_username =********
cygnusagent.sinks.mysql-sink.mysql_password =*********
cygnusagent.sinks.mysql-sink.table_type = table-by-destination
cygnusagent.sinks.mysql-sink.attr_persistence = column
cygnusagent.sinks.mysql-sink.batch_size = 1
cygnusagent.sinks.mysql-sink.batch_timeout = 10

我在使用Flume时出现了以下错误:

2015-12-14 08:43:58,118 (SinkRunner-PollingRunner-DefaultSinkProcessor) [ERROR - com.telefonica.iot.cygnus.sinks.OrionSink.process(OrionSink.java:187)] Persistence error (Unknown database 'fiw-serv')

我对行模式没有任何问题,只有列模式。

twh00eeo

twh00eeo1#

这是因为 OrionMySQLSink 需要提前创建表。详细的解释可以在这里找到。基本上:
请注意不要总是通知相同数量的属性;这取决于对ngsi-like发送方的订阅。这对于行持久性模式不是问题,因为为每个通知的属性插入了固定的8字段数据行。然而,列模式可能会受到不同长度的多个数据行(按字段)的影响。因此,只有当您的订阅设计为始终发送相同的属性时,才建议使用列模式,如果自上次通知以来没有更新这些属性,则建议使用事件模式。
此外,在列模式下运行时,由于cygnus不知道通知的属性数(因此数据存储中要写入的字段数),因此无法自动创建表,必须在cygnus执行之前设置表。这不是行模式的情况,因为要写入的字段数始终是恒定的,与通知的属性数无关。
类似的事情发生在 OrionCKANSink ,其中必须提前创建资源、数据存储和视图。

相关问题