我想配置 Orion 和 Cygnus 将所有数据存储在一个表中。
我知道我应该配置基于 HTTP 标头的数据库和表的名称,如下所示:
dbName=<fiware-service-header>
tableName=<fiware-servicePath-header>_<entityId>_<entityType>
我在这篇文章中被告知要问另一个问题。
我想配置 Orion 和 Cygnus 将所有数据存储在一个表中。
我知道我应该配置基于 HTTP 标头的数据库和表的名称,如下所示:
dbName=<fiware-service-header>
tableName=<fiware-servicePath-header>_<entityId>_<entityType>
我在这篇文章中被告知要问另一个问题。
Cygnus 使用通知fiware-service
和fiware-servicePath
标头来组成不同后端元素的名称。具体来说:
<fiware-service>
<fiware-servicePath>_<destination>
/user/<your_user>/<fiware-service>/<fiware-servicePath>/<destination>/<destination>.txt
<fiware-service>
<fiware-servicePath>
<destination>
默认情况下,<destination>
等于<entityId>_<entityType>
。如问题中所述,这可能会导致为每个通知实体创建一个 MySQL 表/HDFS 文件夹/CKAN 资源。
这种默认的目的地生成可以通过使用 Cygnus 的高级功能(基于模式的分组)来更改;顾名思义,该功能基于在数据中查找(配置)模式,以便对显示模式的上下文数据进行分组。例如,此功能允许某种类型的所有实体都存储在单个 MySQL 表中;或某些以前缀开头的实体一起存储在 HDFS 文件中。
为了激活此功能,编辑/usr/cygnus/conf/matching_table.conf
文件并根据需要添加尽可能多的匹配规则;匹配规则语法在此处描述。基本上,规则说“一旦确认了基于模式的匹配,就使用这个新的<destination>
和这个新的<fiware-servicePath>
”:
<rule_id>|<list_of_fields_to_be_compared>|<regular_expresion>|<new_destination>|<new_fiware-servicePath>
因此,“将所有数据存储在名为 'my_unique_table' 的 MySQL 表中”规则如下所示:
<any_unique_number>|<entityId>|.*|unique_table|my_
或者:
<any_unique_number>|<entityId>|.*|_table|my_unique
<fiware-servicePath>
这两个规则都是有效的,因为 MySQL 表名是通过连接和创建的,如前所述<destination>
;在这种情况下,表名等于“my_”+_+“unique_table”或“my_unique”+“_table”。