0

我在 2.3.0 版本中使用 WSO2BAM,我在其中定义了一个在 Cassandra 数据源中保存大量数据的流。目前我的 Hive 脚本处理来自 99% 的数据是不必要的键空间的所有事件。它也占用磁盘空间。

我的想法是在这些数据变得不必要后清除它。

流的格式为:{"streamId":"kroki_i_kolejki_zlecen:1.0.0","name":"kroki_i_kolejki_zlecen","version":"1.0.0","nickName":"Kroki i kolejki zlecen","description ":"Wyniki i daty zamkniecia zlecen","payloadData":[{"name":"casenum","type":"STRING"},{"name":"type_id","type":"STRING"} ,{"name":"id_zlecenie","type":"STRING"},{"name":"sid","type":"STRING"},{"name":"step_name","type": "STRING"},{"name":"proc_name","type":"STRING"},{"name":"step_desc","type":"STRING"},{"name":"audit_date","type":"STRING"},{"name":"audit_usecs","type":"STRING"},{"name":"user_name","类型":"STRING"}]}

我的意图是在收到具有特定 payload_type_id 的事件后删除具有相同列的数据payload_id_zlecenie。在关系数据库中,它等于查询:

delete from kroki_i_kolejki_zlecen where payload_id_zlecenie = [argument];

有可能吗?

4

2 回答 2

2

据我所知,在 Hive 中,您无法删除 Cassandra 数据。Inosh 给出的 [1] 链接描述了如何归档超过特定持续时间的 Cassandra 记录。(例如超过 3 个月的记录)所有存档的数据将存储在后缀为“_arch”的列族中。在该功能中,在生成的 Hive 脚本中使用自定义分析器来删除 Cassandra 行。还要注意,删除的记录大约需要 10 天才能用它的行键完全删除整行。在此之前,您将看到一些与 Cassandra 行 ID 关联的空字段。

Inosh 的 [2] 是您问题的真正解决方案。启用增量处理后,hive 脚本将仅处理在先前的 hive 脚本执行中未处理的 Cassandra 行。这意味着,Hive 将汇总每次执行中处理的值,并将它们保留以备将来使用。下次 hive 将使用该值,并且之前处理过的最后一个时间戳,并处理该时间戳之后的所有记录。新的聚合值和旧的聚合值将用于获取总值。

[1] - http://docs.wso2.org/display/BAM240/Archive+Cassandra+Data

[2] - http://docs.wso2.org/pages/viewpage.action?pageId=32345660

于 2013-12-03T14:48:38.870 回答
1

您可以使用 Cassandra 数据归档功能 [1] 来归档 cassandra 数据。

另请参阅增量分析 [2],这是 BAM 2.4.0 发布的新功能。使用该功能,可以增量分析接收到的数据,而无需处理 CF 中的所有事件。

[1] - http://docs.wso2.org/display/BAM240/Archive+Cassandra+Data

[2] - http://docs.wso2.org/pages/viewpage.action?pageId=32345660

于 2013-12-02T12:08:27.153 回答