【问题标题】:distinct count on hive does not match cardinality count on elasticsearchhive 上的不同计数与 elasticsearch 上的基数计数不匹配
【发布时间】:2018-02-25 01:51:56
【问题描述】:

我已经使用来自elasticelasticsearch-hadoop 插件从hive 将数据加载到我的elasticsearch 集群中。

我需要获取唯一帐号的计数。我用hqlqueryDSL 编写了以下查询,但是它们返回的计数不同。

Hive 查询:

select count(distinct account) from <tableName> where capacity="550";

// Returns --> 71132

类似地,在 Elasticsearch 中,查询看起来像这样:

{
    "query": {
        "bool": {
            "must": [
              {"match": { "capacity": "550"}}
            ]
        }
    },
    "aggs": {
    "unique_account": {
      "cardinality": {
        "field": "account"
      }
    }
  }
}

// Returns --> 71607

我做错了吗?我该怎么做才能匹配这两个查询?

Note:hive和elasticsearch中的记录数完全一样。

【问题讨论】:

    标签: elasticsearch hive hiveql querydsl elasticsearch-hadoop


    【解决方案1】:

    “Elasticsearch 提供的第一个近似聚合是 基数度量
    ...
    如本章顶部所述,基数度量是 近似算法。它基于 HyperLogLog++ (HLL) 算法。”

    https://www.elastic.co/guide/en/elasticsearch/guide/current/cardinality.html

    对于 OP

    精度阈值

    "precision_threshold 接受从 0 到 40,000 的数字。较大的值是 视为相当于 40,000。
    ...
    虽然不保证 算法,如果基数低于阈值,它几乎 始终 100% 准确。高于此的基数将开始交易 节省内存的准确性,并且一点点错误会蔓延到 指标。”

    https://www.elastic.co/guide/en/elasticsearch/guide/current/cardinality.html

    您可能还想看看"Support for precise cardinality aggregation #15876"

    对于 OP,2

    “我已经尝试了几个数字......”

    您有 71,132 个不同的值,而精度阈值限制为 40,000,因此基数超过阈值,这意味着精度被交易用于节省内存。
    这就是所选实现(基于 HyperLogLog++ 算法)的工作原理。

    【讨论】:

    • 我尝试添加一个"precision_threshold" : 100,但它仍然显示了一些偏离的数字。必须有与 hive 相同的等效方法。
    • "precision_threshold" : 100 并不意味着 100% 准确。查看更新的答案。
    • 我尝试了040000之间的几个数字,结果仍然不准确。我在这里有点困惑。为什么elasticsearch 不能数并给我一个准确的数字,例如hive?我不认为我在这里期待世界之外的功能:(
    【解决方案2】:

    即使使用 40000precision_threshold,基数也不能确保准确计数​​。还有另一种方法可以获得字段的准确不同计数。

    这篇关于“Accurate Distinct Count and Values from Elasticsearch”的文章详细解释了该解决方案以及它对基数的准确性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-08
      • 2019-07-26
      • 2012-05-11
      • 1970-01-01
      • 2011-02-10
      • 2011-12-03
      相关资源
      最近更新 更多