1

ここでは、カーディナリティの高いインデックスの操作に関心があります。(Elastic Search の問題として知られているもの)

私たちはすでにあなたからそれを知っています

select count(distinct high_cardinality_field) from my_table

カウントするための最適化がすでにいくつかあります。いつか次のようなものを書くことが可能になるでしょうか?

select count_via_hyperloglog(high_cardinality_field) from my_table

count_via_hyperloglog を UDF または何かとして持つことは、ES プラグインを介して ES で現在可能であるためですか?

4

2 に答える 2

4

クレートでは、この機能は、ハイパーログ アルゴリズムを使用する追加の集計関数としてバックログにあります。presto http://prestodb.io/docs/current/functions/aggregate.htmlから派生したネーミングを行う予定です。あなたの例はおそらく次のようになります:

select approx_distinct(high_cardinality_field) from my_table

ただし、テーブルごとに 1 つの特定のフィールドのパフォーマンスを改善するには、 https://crate.io/docs/current/sql/ddl.html#routingで説明されているように、カーディナリティの高いフィールドに基づいてテーブルをクラスター化します。

于 2014-03-24T10:31:35.530 に答える
2

HyperLogLog による高カーディナリティ カウントは 1.1.0 で計画されています。ドキュメントは既に公開されています: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-cardinality-aggregation.html

例:

{
    "aggs" : {
        "author_count" : {
            "cardinality" : {
                "field" : "author"
            }
        }
    }
}

UDF のようなものについては、スクリプトを使用できます。たとえば、フィルタ集約スクリプト フィルタを組み合わせることで

{
    "aggs": {
        "in_stock_products": {
            "filter": {
                "script": {
                    "script": "doc['price'].value > minPrice"
                    "params": {
                        "minPrice": 5
                    }
                }
            },
            "aggs": {
                "avg_price": {
                    "avg": {
                        "field": "price"
                    }
                }
            }
        }
    }
}
于 2014-03-24T07:13:56.900 に答える