Hive:在字符串的子字符串中计算非零字符

时间:2016-02-27 09:02:52

标签: mysql hadoop split hive

我在hive外部表的列中有如下所示的字符串

<id>^<count>^<distinct_count>|<id>^<count>^<distinct_count>|...

有两个分隔符。实体级|和子实体级^

我有一个度量,它由非零distinct_countscounts的计数总和定义,这意味着给定一个字符串我检查是否有不同的计数(或计数 - 我可以检查是否为非零,如果它将flag标记为1.则度量标准为sum(flags)。我必须在下一步中将此指标存储在聚合表中。

请为我提供一种在Hive中执行此操作的方法

2 个答案:

答案 0 :(得分:0)

我认为这是不可能的。结束时使用外部python映射器。

答案 1 :(得分:0)

如果您想计算字符串count中非零s的数量,它似乎可以通过

来解决
length(
    regexp_replace(
        regexp_replace(s, "[^^|]*\\^0\\^[^^|]*\\|?", ""),
        "[^^|]*\\^[^^|]*\\^[^^|]*\\|?",
        "1"
    )
)

首先regexp_replace删除零count的部分,第二个regexp_replace用单个符号替换剩余部分(它不一定是"1",任何符号就足够了),以及因此length会返回非零count的部分数。