如何更改默认行为以将每个实体的信息存储在不同的表中

时间:2015-04-23 12:44:24

标签: fiware fiware-orion fiware-cygnus

我想配置Orion和Cygnus将所有数据存储在一个表中。

我知道我应该在HTTP标头中配置数据库和表的名称,如下所示:

dbName=<fiware-service-header>
tableName=<fiware-servicePath-header>_<entityId>_<entityType>

我被告知in this post要问另一个问题。

1 个答案:

答案 0 :(得分:1)

Cygnus使用通知的fiware-servicefiware-servicePath标头来组成不同后端元素的名称。具体做法是:

  • 的MySQL
    • 数据库称为<fiware-service>
    • 表名称称为<fiware-servicePath>_<destination>
  • HDFS
    • HDFS路径创建为/user/<your_user>/<fiware-service>/<fiware-servicePath>/<destination>/<destination>.txt
  • CKAN
    • 组织称为<fiware-service>
    • 包/数据集称为<fiware-servicePath>
    • 资源称为<destination>

默认情况下,<destination>等于<entityId>_<entityType>。如问题所述,这可能会导致每个通知实体创建一个MySQL表/ HDFS文件夹/ CKAN资源。

这种默认目的地生成可以通过使用Cygnus的高级功能(基于模式的分组)来改变;顾名思义,该功能基于在数据中查找(配置)模式,以便对显示模式的上下文数据进行分组。例如,该特征允许某种类型的所有实体存储在单个MySQL表中;或者以前缀开头的某些实体一起存储在HDFS文件中。

要激活此功能,请编辑/usr/cygnus/conf/matching_table.conf文件并根据需要添加任意数量的匹配规则;匹配规则语法描述为here。基本上,规则说明一旦基于模式的匹配得到确认,请使用新的<destination>和新的<fiware-servicePath>&#34;:

<rule_id>|<list_of_fields_to_be_compared>|<regular_expresion>|<new_destination>|<new_fiware-servicePath>

因此,&#34;将所有数据存储在名为“my_unique_table&#39;&#34;”的MySQL表中。规则看起来像:

<any_unique_number>|<entityId>|.*|unique_table|my_

或:

<any_unique_number>|<entityId>|.*|_table|my_unique

这两个规则都是有效的,因为正如已经说过的那样,通过连接<fiware-servicePath><destination>创建MySQL表名;在这种情况下,表名等于&#34;我的_&#34; + _ +&#34; unique_table&#34;或者&#34; my_unique&#34; +&#34; _table&#34;。