Spectator Histogram 모듈
Spectator Histogram 모듈
druid-spectator-histogram 확장은 Spectator 고정 버킷 히스토그램 기반의 Apache Druid 근사 히스토그램 집계기와 백분위수 post-aggregator를 제공해요. DataSketches 확장보다 저장 공간이 작아 세그먼트 크기가 줄고, 딥 스토리지 로딩이 빨라지며 메모리 사용량도 낮아져요.
출처: 문서
본문
Summary
이 모듈은 Spectator 고정 버킷 히스토그램(fixed-bucket histograms) 기반의 Apache Druid 근사 히스토그램 집계기와 백분위수 post-aggregator를 제공해요.
백분위수 근사치를 계산하려면 SpectatorHistogram을 고려해 보세요. 이 확장은 DataSketches 확장에 비해 저장 공간이 줄어서, 세그먼트 크기가 작아지고 딥 스토리지에서 로딩이 빨라지며 메모리 사용량이 낮아져요. 이 확장은 낮은 저장 비용으로 대규모 데이터셋에 대한 빠르고 정확한 질의를 제공해요.
이 집계기는 원시 데이터에 양의 long 정수 값만 포함될 때만 적용돼요. 데이터에 음수 값이 있으면 이 집계기를 사용하지 마세요.
아래에 보이는 Druid 인스턴스에서 예시 Wikipedia 데이터셋을 3번 로드했어요.
wikipedia: 데이터셋을 rollup 없이 그대로 수집한 것.wikipedia_spectator:added열에 대해spectatorHistogram타입의 메트릭 열 하나를 추가한 데이터셋.wikipedia_datasketch:added열에 대해quantilesDoublesSketch타입의 메트릭 열 하나를 추가한 데이터셋.
Spectator 히스토그램은 행당 평균 6바이트만 추가하는 반면, quantilesDoublesSketch는 행당 48바이트를 추가해요. Spectator 히스토그램은 추가 저장 크기를 8배 줄여주는 셈이에요.
rollup이 좋아질수록 크기 절감도 좋아져요. 예를 들어 Wikipedia 데이터셋을 day-grain query granularity로 수집하고 countryName 제외한 모든 dimension을 제거하면, 단 106행만 있는 세그먼트가 돼요. 기본 세그먼트는 행당 87바이트예요. SpectatorHistogram과 DataSketches의 행당 바이트를 비교해 보면:
- 추가
spectatorHistogram열은 행당 평균 27바이트를 더해요. - 추가
quantilesDoublesSketch열은 행당 255바이트를 더해요.
SpectatorHistogram은 이 예시에서 추가 저장 크기를 9.4배 줄여요. 저장 절감은 데이터의 분산과 rollup에 따라 데이터셋마다 다를 거예요.
Background
Spectator는 dimensional timeseries 데이터를 기록하도록 코드를 계측(instrument)하는 간단한 라이브러리예요. 주로 Atlas와 함께 동작하도록 만들어졌어요. Atlas는 거의 실시간 운영 인사이트를 위한 dimensional timeseries 데이터를 관리하기 위해 Netflix가 개발했어요.
Atlas-Druid 서비스로, 데이터 스토어로서 Druid를 백엔드로 사용하는 Atlas 질의의 힘을 활용해 고차원(high-dimensionality) 및 고카디널리티(high-cardinality) 데이터의 이점을 얻을 수 있어요.
SpectatorHistogram은 dimension별 필터링과 그룹핑을 허용하면서도 효율적인 병렬 집계를 위해 설계됐어요. 내장 DataSketches quantilesDoublesSketch 집계기와 유사한 기능을 제공하지만, 더 작은 값에서 더 높은 절대 정확도를 유지하도록 고정(opinionated)돼 있어요. 더 큰 값은 절대 정확도가 낮지만, 범위 전반에 걸쳐 상대 정확도는 유지돼요. 자세한 내용은 Bucket boundaries를 참고하세요. SpectatorHistogram은 페이지 로드 시간, 전송 바이트, 응답 시간, 요청 지연 같은 클라우드 서비스와 웹 앱의 일반적인 측정값에 최적화돼 있어요.
몇 가지 절충(trade-off)을 통해 SpectatorHistogram은 DataSketches Quantiles Sketch와 동일한 집계 성능과 정확도로 훨씬 더 컴팩트한 표현을 제공해요. 결과는 데이터셋에 따라 달라진다는 점에 유의하세요. 이 확장의 제한 사항도 참고하세요.
Limitations
- [0, 2^53) 범위의 양의 long 정수 값을 지원해요. 음수는 0으로 강제(coerced)돼요.
- 소수점(decimals)을 지원하지 않아요.
- 버킷 폭이 점점 커지는 276개의 고정 버킷을 생성해요. 실제로 계산된 백분위수의 관측 오차는 0.1%에서 3% 사이(배타적)예요. 전체 버킷 경계 목록은 Bucket boundaries를 참고하세요.
tip — 이 제한 사항이 사용 사례에 맞지 않으면 DataSketches를 대신 사용하세요.
Functionality
SpectatorHistogram 집계기는 원시 숫자 값에서 히스토그램을 생성할 수 있고, SpectatorHistogram 집계기 자체로 생성된 미리 집계된 히스토그램을 집계하거나 결합할 수도 있어요. 질의 시점에 즉석에서 히스토그램을 생성할 수 있지만, 일반적으로 수집 중에 히스토그램을 생성한 뒤 질의 시점에 결합하는 것이 더 성능이 좋아요. 특히 rollup이 활성화된 경우 그렇죠. 이미 롤업된 합산 데이터에서 히스토그램을 생성하는 것은 오해를 부르거나 올바르지 않을 수 있어요.
이 모듈은 SpectatorHistogram 집계기가 만든 히스토그램에서 근사 백분위수를 계산하는 postAggregator인 percentileSpectatorHistogram(단수)과 percentilesSpectatorHistogram(복수)을 제공해요. 다시 말해, 이 postAggregator들은 SpectatorHistogram 집계기로 원시 숫자 값에서 백분위수를 계산하거나 미리 집계된 히스토그램에서 백분위수를 계산하는 데 사용할 수 있어요.
집계기만 원시 숫자 값에서 백분위수를 계산하는 데 사용한다면, 내장 quantilesDoublesSketch 집계기를 대신 사용할 수 있어요. 성능과 정확도는 비슷해요. 다만 DataSketches 집계기는 음수 값을 지원하고, 추가 확장을 다운로드할 필요가 없어요.
집계된 SpectatorHistogram은 longSum이나 doubleSum 집계기로도 조회해서 히스토그램의 모집단(population)을 얻을 수 있어요. 이는 사실상 히스토그램에 집계된 값의 count예요. 이 유연성 덕분에 값의 count를 위한 별도 메트릭을 유지할 필요가 없어요.
고주파 측정값의 경우 클라이언트에서 Druid로 보내기 전에 데이터를 미리 집계해야 할 수도 있어요. 예를 들어 이미지가 많은 웹사이트에서 개별 이미지 렌더 시간을 측정한다면, 실시간으로 Druid로 보내기 전에 페이지 뷰의 렌더 시간을 하나의 히스토그램으로 집계하고 싶을 거예요. 이렇게 하면 클라이언트가 네트워크를 통해 보내야 하는 데이터 양을 줄일 수 있어요.
SpectatorHistogram은 실시간과 배치 모두에서 미리 집계된 히스토그램 수집을 지원해요. spectator bucket ID를 키로 하고 값의 count를 값으로 하는 JSON map으로 보낼 수 있어요. 이는 히스토그램의 직렬화된 JSON 표현과 같은 포맷이에요. 키는 정렬되거나 연속적일 필요가 없어요. 예:
{ "4": 8, "5": 15, "6": 37, "7": 9, "8": 3, "10": 1, "13": 1 }
Loading the extension
SpectatorHistogram을 사용하려면 config 파일에 확장을 포함해 주세요.
druid.extensions.loadList=["druid-spectator-histogram"]
Native Query Components
다음 섹션은 네이티브 Druid 질의에 사용할 집계기와 post-aggregator를 설명해요.
Aggregators
집계의 결과는 원시 데이터의 숫자 값을 받아들이거나 미리 집계된 히스토그램을 결합해서 만들어진 히스토그램이에요. 결과는 키가 bucket 인덱스이고 값이 그 버킷의 항목 수인 JSON 포맷으로 표현돼요.
버킷은 Spectator PercentileBuckets 스펙에 따라 정의돼요. 전체 버킷 경계 목록은 Histogram bucket boundaries를 참고하세요.
// The set of buckets is generated by using powers of 4 and incrementing by one-third of the
// previous power of 4 in between as long as the value is less than the next power of 4 minus
// the delta.
//
// Base: 1, 2, 3
//
// 4 (4^1), delta = 1 (~1/3 of 4)
// 5, 6, 7, ..., 14,
//
// 16 (4^2), delta = 5 (~1/3 of 16)
// 21, 26, 31, ..., 56,
//
// 64 (4^3), delta = 21 (~1/3 of 64)
// ...
모두 같은 기본 구현에 기반한 여러 집계기 타입이 포함돼 있어요. Atlas-Druid 서비스를 사용한다면, 다른 타입들은 질의의 결과 데이터를 어떻게 처리할지 서비스에 신호를 보내요.
spectatorHistogramTimer는 히스토그램이 timer 값의 모음을 나타낸다는 신호를 보내요. timer 값을 수집 시점 또는 그 이전에 나노초로 정규화하는 것을 권장해요. Atlas-Druid 서비스로 질의하면, 사람이 소비하기에 더 자연스러운 시간 단위인 초 단위로 질의 시점에 timer를 정규화해요.spectatorHistogram과spectatorHistogramDistribution은 단위가 없는 어떤 측정값이든 나타낼 수 있는 일반 히스토그램이에요. 정규화는 필요하지도 않고 수행되지도 않아요.
spectatorHistogram aggregator
별칭: spectatorHistogramDistribution, spectatorHistogramTimer
질의 시점에 집계하려면:
{
"type" : "spectatorHistogram",
"name" : <output_name>,
"fieldName" : <column_name>
}
| 속성 | 설명 | 필수 |
|---|---|---|
type |
이 String은 "spectatorHistogram", "spectatorHistogramTimer", "spectatorHistogramDistribution" 중 하나여야 해요. |
yes |
name |
집계의 출력(결과) 이름을 위한 String. | yes |
fieldName |
원시 숫자 값이나 미리 집계된 히스토그램을 담고 있는 입력 필드의 이름을 위한 String. | yes |
longSum, doubleSum, floatSum aggregators
히스토그램의 모집단 크기(히스토그램에 기여한 이벤트 수)를 얻으려면:
{
"type" : "longSum",
"name" : <output_name>,
"fieldName" : <column_name_of_aggregated_histogram>
}
| 속성 | 설명 | 필수 |
|---|---|---|
type |
반드시 "longSum", "doubleSum", "floatSum" 중 하나여야 해요. |
yes |
name |
집계의 출력(결과) 이름을 위한 String. | yes |
fieldName |
미리 집계된 히스토그램을 담고 있는 입력 필드의 이름을 위한 String. | yes |
Post Aggregators
Percentile (singular)
집계된 히스토그램의 값 분포에 기반한 단일 백분위수 계산을 반환해요.
{
"type": "percentileSpectatorHistogram",
"name": <output name>,
"field": {
"type": "fieldAccess",
"fieldName": <name of aggregated SpectatorHistogram>
},
"percentile": <decimal percentile, e.g. 50.0 for median>
}
| 속성 | 설명 | 필수 |
|---|---|---|
type |
이 String은 항상 "percentileSpectatorHistogram"이어야 해요. |
yes |
name |
계산의 출력(결과) 이름을 위한 String. | yes |
field |
집계된 히스토그램을 가리키는 필드 참조. | yes |
percentile |
0.0과 100.0 사이의 단일 십진 백분위수. | yes |
Percentiles (multiple)
요청한 백분위수들에 대응하는 백분위수 배열을 반환해요.
{
"type": "percentilesSpectatorHistogram",
"name": <output name>,
"field": {
"type": "fieldAccess",
"fieldName": <name of aggregated SpectatorHistogram>
},
"percentiles": [25, 50, 75, 99.5]
}
별도의 질의로 개별 백분위수를 요청하는 것보다 단일 질의로 여러 백분위수를 요청하는 것이 더 효율적이에요. 이 배열 기반 헬퍼는 편의를 위해 제공되며, 질의 내에서 단수 백분위수 post-aggregator를 여러 번 사용하는 것보다 약간의 성능 이점이 있어요. 질의에서 더 비싼 부분은 히스토그램의 집계예요. post-aggregation 계산은 모두 같은 집계된 히스토그램에서 일어나요.
결과는 요청된 백분위수 배열의 길이와 순서와 일치하는 배열을 담아요.
"percentilesAdded": [
0.5504911679884643, // 25th percentile
4.013975155279504, // 50th percentile
78.89518317503394, // 75th percentile
8580.024999999994 // 99.5th percentile
]
| 속성 | 설명 | 필수 |
|---|---|---|
type |
이 String은 항상 "percentilesSpectatorHistogram"이어야 해요. |
yes |
name |
계산의 출력(결과) 이름을 위한 String. | yes |
field |
집계된 히스토그램을 가리키는 필드 참조. | yes |
percentiles |
0.0과 100.0 사이의 십진 백분위수의 비어 있지 않은 배열. | yes |
Count Post-Aggregator
히스토그램에 기록된 관측(데이터 포인트)의 총 수를 반환해요. 별도의 count 메트릭 없이 모집단 크기를 이해하는 데 유용해요.
{
"type": "countSpectatorHistogram",
"name": "<output name>",
"field": {
"type": "fieldAccess",
"fieldName": "<name of aggregated SpectatorHistogram>"
}
}
| 속성 | 설명 | 필수 |
|---|---|---|
type |
이 String은 항상 "countSpectatorHistogram"이어야 해요. |
yes |
name |
계산의 출력(결과) 이름을 위한 String. | yes |
field |
집계된 히스토그램을 가리키는 필드 참조. | yes |
SQL Functions
네이티브 질의 집계기와 post-aggregator 외에도, 이 확장은 Druid SQL 질의에서 더 쉽게 사용할 수 있는 SQL 함수를 제공해요.
SPECTATOR_COUNT
Spectator 히스토그램의 총 관측(데이터 포인트) 수를 반환해요.
문법:
SPECTATOR_COUNT(expr)
인자:
expr: 히스토그램으로 집계할 숫자 열, 또는 미리 집계된 Spectator 히스토그램 열.
반환: BIGINT - 총 관측 수 또는 히스토그램이 null/empty면 NULL.
예시:
SELECT
SPECTATOR_COUNT(hist_added) AS total_count,
SPECTATOR_COUNT(added) AS total_count_from_raw
FROM wikipedia
SPECTATOR_PERCENTILE
Spectator 히스토그램에서 근사 백분위수 값을 계산해요. 이 함수는 단일 백분위수 또는 여러 백분위수라는 두 가지 형태를 지원해요.
Single Percentile
문법:
SPECTATOR_PERCENTILE(expr, percentile)
인자:
expr: 히스토그램으로 집계할 숫자 열, 또는 미리 집계된 Spectator 히스토그램 열.percentile: 원하는 백분위수를 나타내는 0과 100 사이의 십진 값.
반환: DOUBLE - 지정된 백분위수의 근사 값, 또는 히스토그램이 null/empty면 NULL.
예시:
SELECT
SPECTATOR_PERCENTILE(hist_added, 50) AS median_added,
SPECTATOR_PERCENTILE(hist_added, 99) AS p99_added,
SPECTATOR_PERCENTILE(added, 95) AS p95_from_raw
FROM wikipedia
Multiple Percentiles (Array)
문법:
SPECTATOR_PERCENTILE(expr, ARRAY[p1, p2, ...])
인자:
expr: 히스토그램으로 집계할 숫자 열, 또는 미리 집계된 Spectator 히스토그램 열.ARRAY[p1, p2, ...]: 원하는 백분위수를 나타내는 0과 100 사이의 십진 값 배열.
반환: DOUBLE ARRAY - 요청한 순서대로 지정된 백분위수의 근사 값 배열, 또는 히스토그램이 null/empty면 NULL.
예시:
SELECT
SPECTATOR_PERCENTILE(hist_added, ARRAY[25, 50, 75, 99]) AS percentiles
FROM wikipedia
이것은 25번째, 50번째, 75번째, 99번째 백분위수를 나타내는 [200.5, 341.0, 468.5, 675.9] 같은 배열을 반환해요.
배열 형태를 사용하는 것이 서로 다른 백분위수에 대해 SPECTATOR_PERCENTILE을 여러 번 호출하는 것보다 효율적이에요. 기본 히스토그램이 한 번만 집계되기 때문이에요.
Combined Example
하나의 질의에서 두 함수를 함께 사용할 수 있어요. 같은 열에 대한 여러 집계는 효율성을 위해 기본 히스토그램 집계기를 공유해요.
SELECT
countryName,
SPECTATOR_COUNT(hist_added) AS observation_count,
SPECTATOR_PERCENTILE(hist_added, 50) AS median_added,
SPECTATOR_PERCENTILE(hist_added, 90) AS p90_added,
SPECTATOR_PERCENTILE(hist_added, 99) AS p99_added
FROM wikipedia
GROUP BY countryName
ORDER BY observation_count DESC
LIMIT 10
또는 배열 형태를 사용해 단일 열로 여러 백분위수를 얻을 수 있어요.
SELECT
countryName,
SPECTATOR_COUNT(hist_added) AS observation_count,
SPECTATOR_PERCENTILE(hist_added, ARRAY[50, 90, 99]) AS percentiles
FROM wikipedia
GROUP BY countryName
ORDER BY observation_count DESC
LIMIT 10
Examples
Example Ingestion Spec
히스토그램 메트릭 열로 샘플 Wikipedia 데이터셋을 수집하는 예시:
{
"type": "index_parallel",
"spec": {
"ioConfig": {
"type": "index_parallel",
"inputSource": {
"type": "http",
"uris": ["https://druid.apache.org/data/wikipedia.json.gz"]
},
"inputFormat": { "type": "json" }
},
"dataSchema": {
"granularitySpec": {
"segmentGranularity": "day",
"queryGranularity": "minute",
"rollup": true
},
"dataSource": "wikipedia",
"timestampSpec": { "column": "timestamp", "format": "iso" },
"dimensionsSpec": {
"dimensions": [
"isRobot",
"channel",
"flags",
"isUnpatrolled",
"page",
"diffUrl",
"comment",
"isNew",
"isMinor",
"isAnonymous",
"user",
"namespace",
"cityName",
"countryName",
"regionIsoCode",
"metroCode",
"countryIsoCode",
"regionName"
]
},
"metricsSpec": [
{ "name": "count", "type": "count" },
{ "name": "sum_added", "type": "longSum", "fieldName": "added" },
{
"name": "hist_added",
"type": "spectatorHistogram",
"fieldName": "added"
}
]
},
"tuningConfig": {
"type": "index_parallel",
"partitionsSpec": { "type": "hashed" },
"forceGuaranteedRollup": true
}
}
}
Example Query
샘플 Wikipedia 데이터셋을 사용하는 예시 질의:
{
"queryType": "timeseries",
"dataSource": {
"type": "table",
"name": "wikipedia"
},
"intervals": {
"type": "intervals",
"intervals": [
"0000-01-01/9999-12-31"
]
},
"granularity": {
"type": "all"
},
"aggregations": [
{
"type": "spectatorHistogram",
"name": "histogram_added",
"fieldName": "added"
}
],
"postAggregations": [
{
"type": "percentileSpectatorHistogram",
"name": "medianAdded",
"field": {
"type": "fieldAccess",
"fieldName": "histogram_added"
},
"percentile": "50.0"
}
]
}
결과:
[
{
"result": {
"histogram_added": {
"0": 11096, "1": 632, "2": 297, "3": 187, "4": 322, "5": 161,
"6": 174, "7": 127, "8": 125, "9": 162, "10": 123, "11": 106,
"12": 95, "13": 104, "14": 95, "15": 588, "16": 540, "17": 690,
"18": 719, "19": 478, "20": 288, "21": 250, "22": 219, "23": 224,
"24": 737, "25": 424, "26": 343, "27": 266, "28": 232, "29": 217,
"30": 171, "31": 164, "32": 161, "33": 530, "34": 339, "35": 236,
"36": 181, "37": 152, "38": 113, "39": 128, "40": 80, "41": 75,
"42": 289, "43": 145, "44": 138, "45": 83, "46": 45, "47": 46,
"48": 64, "49": 65, "50": 71, "51": 421, "52": 525, "53": 59,
"54": 31, "55": 35, "56": 8, "57": 10, "58": 5, "59": 4, "60": 11,
"61": 10, "62": 5, "63": 2, "64": 2, "65": 1, "67": 1, "68": 1,
"69": 1, "70": 1, "71": 1, "78": 2
},
"medianAdded": 4.013975155279504
},
"timestamp": "2016-06-27T00:00:00.000Z"
}
]
Histogram bucket boundaries
다음 배열은 각 bucket 인덱스의 상한을 나열해요. 총 276개의 버킷이 있어요. 첫 번째 bucket 인덱스는 0이고 마지막 bucket 인덱스는 275예요. bucket 인덱스가 커질수록 bucket 폭이 커져요. 이는 더 큰 값에 대해 더 큰 절대 오차를 만들지만, 숫자 범위에 걸쳐 대략적인 백분율의 상대 오차를 유지해요. 예를 들어 값 10에서 최대 오차는 0이에요. bucket 폭이 1(11-10의 차이)이기 때문이에요. 값 16,000,000,000의 경우 bucket 폭은 1,431,655,768(17179869184-15748213416에서)이에요. 이는 1,431,655,768/16,000,000,000*100에서 최대 ~8.9%의 오차를 줘요. 실제로 계산된 백분위수의 관측 오차는 (0.1%, 3%) 범위예요.
[
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 21, 26, 31, 36, 41, 46,
51, 56, 64, 85, 106, 127, 148, 169, 190, 211, 232, 256, 341, 426, 511, 596,
681, 766, 851, 936, 1024, 1365, 1706, 2047, 2388, 2729, 3070, 3411, 3752,
4096, 5461, 6826, 8191, 9556, 10921, 12286, 13651, 15016, 16384, 21845,
27306, 32767, 38228, 43689, 49150, 54611, 60072, 65536, 87381, 109226,
131071, 152916, 174761, 196606, 218451, 240296, 262144, 349525, 436906,
524287, 611668, 699049, 786430, 873811, 961192, 1048576, 1398101, 1747626,
2097151, 2446676, 2796201, 3145726, 3495251, 3844776, 4194304, 5592405,
6990506, 8388607, 9786708, 11184809, 12582910, 13981011, 15379112, 16777216,
22369621, 27962026, 33554431, 39146836, 44739241, 50331646, 55924051,
61516456, 67108864, 89478485, 111848106, 134217727, 156587348, 178956969,
201326590, 223696211, 246065832, 268435456, 357913941, 447392426, 536870911,
626349396, 715827881, 805306366, 894784851, 984263336, 1073741824, 1431655765,
1789569706, 2147483647, 2505397588, 2863311529, 3221225470, 3579139411,
3937053352, 4294967296, 5726623061, 7158278826, 8589934591, 10021590356,
11453246121, 12884901886, 14316557651, 15748213416, 17179869184, 22906492245,
28633115306, 34359738367, 40086361428, 45812984489, 51539607550, 57266230611,
62992853672, 68719476736, 91625968981, 114532461226, 137438953471,
160345445716, 183251937961, 206158430206, 229064922451, 251971414696,
274877906944, 366503875925, 458129844906, 549755813887, 641381782868,
733007751849, 824633720830, 916259689811, 1007885658792, 1099511627776,
1466015503701, 1832519379626, 2199023255551, 2565527131476, 2932031007401,
3298534883326, 3665038759251, 4031542635176, 4398046511104, 5864062014805,
7330077518506, 8796093022207, 10262108525908, 11728124029609, 13194139533310,
14660155037011, 16126170540712, 17592186044416, 23456248059221,
29320310074026, 35184372088831, 41048434103636, 46912496118441,
52776558133246, 58640620148051, 64504682162856, 70368744177664,
93824992236885, 117281240296106, 140737488355327, 164193736414548,
187649984473769, 211106232532990, 234562480592211, 258018728651432,
281474976710656, 375299968947541, 469124961184426, 562949953421311,
656774945658196, 750599937895081, 844424930131966, 938249922368851,
1032074914605736, 1125899906842624, 1501199875790165, 1876499844737706,
2251799813685247, 2627099782632788, 3002399751580329, 3377699720527870,
3752999689475411, 4128299658422952, 4503599627370496, 6004799503160661,
7505999378950826, 9007199254740991, 10508399130531156, 12009599006321321,
13510798882111486, 15011998757901651, 16513198633691816, 18014398509481984,
24019198012642645, 30023997515803306, 36028797018963967, 42033596522124628,
48038396025285289, 54043195528445950, 60047995031606611, 66052794534767272,
72057594037927936, 96076792050570581, 120095990063213226, 144115188075855871,
168134386088498516, 192153584101141161, 216172782113783806, 240191980126426451,
264211178139069096, 288230376151711744, 384307168202282325, 480383960252852906,
576460752303423487, 672537544353994068, 768614336404564649, 864691128455135230,
960767920505705811, 1056844712556276392, 1152921504606846976, 1537228672809129301,
1921535841011411626, 2305843009213693951, 2690150177415976276, 3074457345618258601,
3458764513820540926, 3843071682022823251, 4227378850225105576, 9223372036854775807
]
더 알아보기 (Learn more)
- Aggregations와 Post Aggregations 문서에서 집계 전반을 참고할 수 있어요.
- 유사한 근사 분위수 스케치로 DataSketches Quantiles Sketch도 살펴보세요.
- Spectator 라이브러리를 참고해 보세요.