德鲁伊 - 一组列的不同值
Druid - Distinct values of a set of columns
我需要使用 REST/JSON API 从 Druid 中的索引中获取一组维度的不同值。目前我正在使用以下聚合查询(尽管我不需要聚合),因为我找不到任何其他方法来获取不同的值,因为所有查询都要求聚合字段。
{
"queryType": "groupBy",
"dataSource": "ds1",
"granularity": "all",
"dimensions": ["level1","level2","level3", "val1", "val2"],
"aggregations": [{"type": "count","name": "val2Count","fieldName": "val2"}],
"intervals": ["2015-10-22T00:00:00.000/2015-12-22T23:00:00.000"]
}
我认为这是一个常见的场景。有没有办法在没有聚合的情况下获得不同的列集?
当我使用聚合进行操作时,如果没有聚合,这种聚合对性能的影响有多大(除了用于额外计数数据的网络 IO)?
您可以使用元数据查询。此查询将为每个维度提供基数估计。
http://druid.io/docs/latest/querying/segmentmetadataquery.html
虽然如果你想列出所有不同的组合,比如 dimension1 和 dimension2,你必须在 dimension1 和 dimension2 上使用 groupBy。添加计数聚合器不会真正影响性能。
您可以使用 select 查询来执行相同的操作。
http://druid.io/docs/latest/querying/select-query.html
{
"queryType": "select",
"dataSource": "ds1",
"granularity": "all",
"descending": "true",
"intervals": ["2016-05-01T00:00:00.000/2016-06-01T00:00:00.000"],
"dimensions":["level1","level2","level3", "val1", "val2"],
"pagingSpec":{"pagingIdentifiers": {}, "threshold":5}
}
如果你只有一个维度,那么你也可以使用 Lexicographic TopNMetricSpec。
http://druid.io/docs/latest/querying/topnmetricspec.html
我一直在寻找相同的答案,在自己进行一些测试后,我发现以下查询比 GROUP BY 的性能更高:
SELECT APPROX_COUNT_DISTINCT(CONCAT(level1, level2, level3, level4, level5))
FROM ds1
WHERE __time >= CURRENT_DATE - INTERVAL '1' DAY
^ 上面这个对我来说比下面的要好得多
SELECT SUM("count") AS distinct_count
FROM (
SELECT 1 AS "count"
FROM ds1
WHERE __time >= CURRENT_DATE - INTERVAL '1' DAY
GROUP BY level1, level2, level3, level4, level5
)
我需要使用 REST/JSON API 从 Druid 中的索引中获取一组维度的不同值。目前我正在使用以下聚合查询(尽管我不需要聚合),因为我找不到任何其他方法来获取不同的值,因为所有查询都要求聚合字段。
{
"queryType": "groupBy",
"dataSource": "ds1",
"granularity": "all",
"dimensions": ["level1","level2","level3", "val1", "val2"],
"aggregations": [{"type": "count","name": "val2Count","fieldName": "val2"}],
"intervals": ["2015-10-22T00:00:00.000/2015-12-22T23:00:00.000"]
}
我认为这是一个常见的场景。有没有办法在没有聚合的情况下获得不同的列集?
当我使用聚合进行操作时,如果没有聚合,这种聚合对性能的影响有多大(除了用于额外计数数据的网络 IO)?
您可以使用元数据查询。此查询将为每个维度提供基数估计。 http://druid.io/docs/latest/querying/segmentmetadataquery.html 虽然如果你想列出所有不同的组合,比如 dimension1 和 dimension2,你必须在 dimension1 和 dimension2 上使用 groupBy。添加计数聚合器不会真正影响性能。
您可以使用 select 查询来执行相同的操作。 http://druid.io/docs/latest/querying/select-query.html
{
"queryType": "select",
"dataSource": "ds1",
"granularity": "all",
"descending": "true",
"intervals": ["2016-05-01T00:00:00.000/2016-06-01T00:00:00.000"],
"dimensions":["level1","level2","level3", "val1", "val2"],
"pagingSpec":{"pagingIdentifiers": {}, "threshold":5}
}
如果你只有一个维度,那么你也可以使用 Lexicographic TopNMetricSpec。 http://druid.io/docs/latest/querying/topnmetricspec.html
我一直在寻找相同的答案,在自己进行一些测试后,我发现以下查询比 GROUP BY 的性能更高:
SELECT APPROX_COUNT_DISTINCT(CONCAT(level1, level2, level3, level4, level5))
FROM ds1
WHERE __time >= CURRENT_DATE - INTERVAL '1' DAY
^ 上面这个对我来说比下面的要好得多
SELECT SUM("count") AS distinct_count
FROM (
SELECT 1 AS "count"
FROM ds1
WHERE __time >= CURRENT_DATE - INTERVAL '1' DAY
GROUP BY level1, level2, level3, level4, level5
)