0

我有一个 Hive 表,其中对于用户 ID,我有一个 ts 列,它是一个时间序列,存储为数组。我想将时间序列保持为最近的窗口。

(a) 如何将一个新数字附加到另一个由 ID 连接的表的每一列的末尾?(b) 如何删除前导数字?

4

1 回答 1

0

Hive 中的数据通常存储在 HDFS 中。HDFS 的附加功能有限。如果不断修改数据是分析系统的核心,那么也许您应该考虑使用 HBase 或 Cassandra 等替代方案。

但是,如果数据更新只是您工作流程的一小部分,我会鼓励您继续使用 Hive(以便利用它的类似 SQL 的功能),但重新考虑您的存储这些更新的设计。

对上述问题的快速解决方案是在表中为每个用户 ID 设置多个记录。每条记录都有对应于用户 ID 的时间序列。当您想对时间序列进行最后一次 N 分析时,您应该通过在 User ID 列上使用 by Distribute By从表中进行选择。您的自定义 reducer 将简单地挑选最后 N 个(或更少,如果时间序列的大小小于 N)时间戳并返回它们。

Harish Butani 还对 Hive 中的 Windowing 函数做了一些工作。您还可以查看他的工作相关文档以获得更多见解。祝你好运,亚历克西!

于 2012-07-08T16:02:03.883 回答