correcting minimum client count - desktop and fenix (#2544)

* correcting minimum client count - desktop and fenix

* corrected test cases for desktop

* corrected the join for desktop
This commit is contained in:
Alekhya 2021-12-06 10:14:42 -05:00 коммит произвёл GitHub
Родитель a6523d1960
Коммит 5b743090b4
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
21 изменённых файлов: 31670 добавлений и 875 удалений

Просмотреть файл

@ -145,6 +145,11 @@ def main():
"minimum": 1,
"description": "The number of users to filter the data on.",
},
"minimum_client_count": {
"type": "integer",
"minimum": 1,
"description": "The minimum client count for each build id.",
},
},
"required": [
"build_date_udf",
@ -159,19 +164,22 @@ def main():
"build_date_udf": "mozfun.glam.build_hour_to_datetime",
"filter_version": True,
"num_versions_to_keep": 3,
"total_users": 800,
"total_users": 10,
"minimum_client_count": 800,
},
"org_mozilla_fenix_glam_beta": {
"build_date_udf": "mozfun.glam.build_hour_to_datetime",
"filter_version": True,
"num_versions_to_keep": 3,
"total_users": 2000,
"total_users": 10,
"minimum_client_count": 2000,
},
"org_mozilla_fenix_glam_release": {
"build_date_udf": "mozfun.glam.build_hour_to_datetime",
"filter_version": True,
"num_versions_to_keep": 3,
"total_users": 90000,
"total_users": 10,
"minimum_client_count": 90000,
},
"firefox_desktop_glam_nightly": {
"build_date_udf": "mozfun.glam.build_hour_to_datetime",
@ -242,13 +250,15 @@ def main():
table(
"scalar_bucket_counts_v1",
**models.scalar_bucket_counts(
source_table=f"glam_etl.{args.prefix}__clients_scalar_aggregates_v1"
source_table=f"glam_etl.{args.prefix}__clients_scalar_aggregates_v1",
**config[args.prefix],
),
),
table(
"histogram_bucket_counts_v1",
**models.histogram_bucket_counts(
source_table=f"glam_etl.{args.prefix}__clients_histogram_aggregates_v1"
source_table=f"glam_etl.{args.prefix}__clients_histogram_aggregates_v1",
**config[args.prefix],
),
),
table(

Просмотреть файл

@ -10,6 +10,17 @@ WITH
attribute_combinations
)
}},
build_ids AS (
SELECT
app_build_id,
channel,
FROM
all_combos
GROUP BY
1,
2
HAVING
COUNT(DISTINCT client_id) > {{ minimum_client_count }}),
normalized_histograms AS (
SELECT
{{ attributes }},
@ -34,6 +45,8 @@ unnested AS (
normalized_histograms,
UNNEST(histogram_aggregates) AS histogram_aggregates,
UNNEST(aggregates) AS aggregates
INNER JOIN build_ids
USING (app_build_id,channel)
),
-- Find information that can be used to construct the bucket range. Most of the
-- distributions follow a bucketing rule of 8*log2(n). This doesn't apply to the

Просмотреть файл

@ -22,6 +22,17 @@ bucketed_booleans AS (
FROM
all_combos
),
build_ids AS (
SELECT
app_build_id,
channel,
FROM
all_combos
GROUP BY
1,
2
HAVING
COUNT(DISTINCT client_id) > {{ minimum_client_count }}),
log_min_max AS (
SELECT
metric,
@ -92,6 +103,14 @@ booleans_and_scalars AS (
bucket
FROM
bucketed_scalars
),
valid_booleans_scalars AS (
SELECT *
FROM booleans_and_scalars
INNER JOIN
build_ids
USING
(app_build_id, channel)
)
SELECT
{{ attributes }},
@ -105,7 +124,7 @@ SELECT
-- we could rely on count(*) because there is one row per client and bucket
COUNT(DISTINCT client_id) AS count
FROM
booleans_and_scalars
valid_booleans_scalars
GROUP BY
{{ attributes }},
{{ aggregate_attributes }},

Просмотреть файл

@ -33,6 +33,18 @@ all_combos AS (
CROSS JOIN
static_combos combo
),
build_ids AS (
SELECT
app_build_id,
channel,
FROM
all_combos
GROUP BY
1,
2
HAVING
COUNT(DISTINCT client_id) > 800
),
normalized_histograms AS (
SELECT
ping_type,
@ -70,6 +82,10 @@ unnested AS (
normalized_histograms,
UNNEST(histogram_aggregates) AS histogram_aggregates,
UNNEST(aggregates) AS aggregates
INNER JOIN
build_ids
USING
(app_build_id, channel)
),
-- Find information that can be used to construct the bucket range. Most of the
-- distributions follow a bucketing rule of 8*log2(n). This doesn't apply to the
@ -82,6 +98,14 @@ distribution_metadata AS (
FROM
UNNEST(
[
STRUCT(
"custom_distribution" AS metric_type,
"search_terms_group_size_distribution" AS metric,
1 AS range_min,
4 AS range_max,
5 AS bucket_count,
"linear" AS histogram_type
),
STRUCT(
"custom_distribution" AS metric_type,
"geckoview_document_site_origins" AS metric,

Просмотреть файл

@ -138,6 +138,18 @@ bucketed_booleans AS (
FROM
all_combos
),
build_ids AS (
SELECT
app_build_id,
channel,
FROM
all_combos
GROUP BY
1,
2
HAVING
COUNT(DISTINCT client_id) > 800
),
log_min_max AS (
SELECT
metric,
@ -237,6 +249,16 @@ booleans_and_scalars AS (
bucket
FROM
bucketed_scalars
),
valid_booleans_scalars AS (
SELECT
*
FROM
booleans_and_scalars
INNER JOIN
build_ids
USING
(app_build_id, channel)
)
SELECT
ping_type,
@ -256,7 +278,7 @@ SELECT
-- we could rely on count(*) because there is one row per client and bucket
COUNT(DISTINCT client_id) AS count
FROM
booleans_and_scalars
valid_booleans_scalars
GROUP BY
ping_type,
os,

Просмотреть файл

@ -44,6 +44,33 @@ static_combos AS (
'*' AS os,
'*' AS app_build_id
),
build_ids AS (
SELECT
app_build_id,
channel,
FROM
filtered_data
GROUP BY
1,
2
HAVING
CASE
WHEN
channel = 'release'
THEN
COUNT(DISTINCT client_id) > 625000
WHEN
channel = 'beta'
THEN
COUNT(DISTINCT client_id) > 9000
WHEN
channel = 'nightly'
THEN
COUNT(DISTINCT client_id) > 375
ELSE
COUNT(DISTINCT client_id) > 100
END
),
all_combos AS (
SELECT
* EXCEPT (os, app_build_id),
@ -51,6 +78,10 @@ all_combos AS (
COALESCE(combo.app_build_id, table.app_build_id) AS app_build_id
FROM
filtered_data table
INNER JOIN
build_ids
USING
(app_build_id, channel)
CROSS JOIN
static_combos combo
),

Просмотреть файл

@ -122,20 +122,47 @@ user_aggregates AS (
app_version,
app_build_id,
channel),
build_ids AS (
SELECT
app_build_id,
channel,
FROM
user_aggregates
GROUP BY
1,
2
HAVING
CASE
WHEN
channel = 'release'
THEN
SUM(user_count) > 625000
WHEN
channel = 'beta'
THEN
SUM(user_count) > 9000
WHEN
channel = 'nightly'
THEN
SUM(user_count) > 375
ELSE
SUM(user_count) > 100
END
),
bucketed_booleans AS (
SELECT
client_id,
os,
app_version,
app_build_id,
user_aggregates.app_build_id,
channel,
user_count,
os = 'Windows' and channel = 'release' AS sampled,
os = 'Windows'
AND channel = 'release' AS sampled,
udf_boolean_buckets(scalar_aggregates) AS scalar_aggregates
FROM
user_aggregates),
user_aggregates
),
bucketed_scalars AS (
SELECT
client_id,
@ -144,32 +171,55 @@ bucketed_scalars AS (
app_build_id,
channel,
user_count,
os = 'Windows' and channel = 'release' AS sampled,
os = 'Windows'
AND channel = 'release' AS sampled,
metric,
metric_type,
key,
process,
agg_type,
-- Keep two decimal places before converting bucket to a string
SAFE_CAST(FORMAT("%.*f", 2, mozfun.glam.histogram_bucket_from_value(buckets, SAFE_CAST(value AS FLOAT64)) + 0.0001) AS STRING) AS bucket
SAFE_CAST(
FORMAT(
"%.*f",
2,
mozfun.glam.histogram_bucket_from_value(buckets, SAFE_CAST(value AS FLOAT64)) + 0.0001
) AS STRING
) AS bucket
FROM
user_aggregates
CROSS JOIN UNNEST(scalar_aggregates)
LEFT JOIN buckets_by_metric
USING(metric, key)
CROSS JOIN
UNNEST(scalar_aggregates)
LEFT JOIN
buckets_by_metric
USING
(metric, key)
WHERE
metric_type = 'scalar' OR metric_type = 'keyed-scalar'),
metric_type = 'scalar'
OR metric_type = 'keyed-scalar'
),
booleans_and_scalars AS (
SELECT * EXCEPT(scalar_aggregates)
FROM bucketed_booleans
CROSS JOIN UNNEST(scalar_aggregates)
SELECT
* EXCEPT (scalar_aggregates)
FROM
bucketed_booleans
CROSS JOIN
UNNEST(scalar_aggregates)
UNION ALL
SELECT
*
FROM
bucketed_scalars
),
valid_booleans_scalars AS (
SELECT *
FROM bucketed_scalars),
FROM booleans_and_scalars
INNER JOIN
build_ids
USING
(app_build_id, channel)
),
clients_scalar_bucket_counts AS (
SELECT
os,
@ -184,7 +234,8 @@ clients_scalar_bucket_counts AS (
'histogram' AS agg_type,
bucket,
SUM(user_count) AS user_count,
FROM booleans_and_scalars
FROM
valid_booleans_scalars
GROUP BY
os,
app_version,
@ -195,8 +246,8 @@ clients_scalar_bucket_counts AS (
key,
process,
client_agg_type,
bucket)
bucket
)
SELECT
os,
app_version,
@ -214,20 +265,30 @@ SELECT
agg_type,
SUM(user_count) AS total_users,
CASE
WHEN metric_type = 'scalar' OR metric_type = 'keyed-scalar'
THEN mozfun.glam.histogram_fill_buckets(
WHEN
metric_type = 'scalar'
OR metric_type = 'keyed-scalar'
THEN
mozfun.glam.histogram_fill_buckets(
ARRAY_AGG(STRUCT<key STRING, value FLOAT64>(bucket, user_count)),
ANY_VALUE(buckets)
)
WHEN metric_type = 'boolean' OR metric_type = 'keyed-scalar-boolean'
THEN mozfun.glam.histogram_fill_buckets(
WHEN
metric_type = 'boolean'
OR metric_type = 'keyed-scalar-boolean'
THEN
mozfun.glam.histogram_fill_buckets(
ARRAY_AGG(STRUCT<key STRING, value FLOAT64>(bucket, user_count)),
['always','never','sometimes'])
END AS aggregates
['always', 'never', 'sometimes']
)
END
AS aggregates
FROM
clients_scalar_bucket_counts
LEFT JOIN buckets_by_metric
USING(metric, key)
LEFT JOIN
buckets_by_metric
USING
(metric, key)
GROUP BY
os,
app_version,

Просмотреть файл

@ -1,61 +1,24 @@
WITH client_counts AS (
SELECT
channel,
app_version,
COALESCE(os, "*") AS os,
COALESCE(app_build_id, "*") AS app_build_id,
process,
metric,
-- BigQuery has some null unicode characters which Postgresql doesn't like, so we remove those here.
-- Also limit string length to 200 to match column length.
SUBSTR(REPLACE(key, r"\x00", ""), 0, 200) AS key,
client_agg_type,
metric_type,
total_users,
agg_type,
aggregates,
CASE
WHEN
channel = 'release'
THEN
total_users > 625000
WHEN
channel = 'beta'
THEN
total_users > 9000
WHEN
channel = 'nightly'
THEN
total_users > 375
ELSE
total_users > 100
END
AS user_count_check
FROM
`moz-fx-data-shared-prod.telemetry.client_probe_counts`
WHERE
channel = @channel
AND app_version IS NOT NULL
)
SELECT
app_version,
os,
app_build_id,
COALESCE(os, "*") AS os,
COALESCE(app_build_id, "*") AS app_build_id,
process,
metric,
key,
-- BigQuery has some null unicode characters which Postgresql doesn't like, so we remove those here.
-- Also limit string length to 200 to match column length.
SUBSTR(REPLACE(key, r"\x00", ""), 0, 200) AS key,
client_agg_type,
metric_type,
total_users,
-- Using MAX instead of COALESCE since this is not in the GROUP BY.
MAX(IF(agg_type = "histogram", mozfun.glam.histogram_cast_json(aggregates), NULL)) AS histogram,
MAX(
IF(agg_type = "percentiles", mozfun.glam.histogram_cast_json(aggregates), NULL)
) AS percentiles
FROM
client_counts
`moz-fx-data-shared-prod.telemetry.client_probe_counts`
WHERE
user_count_check
channel = @channel
AND app_version IS NOT NULL
GROUP BY
channel,
app_version,

Просмотреть файл

@ -2,6 +2,7 @@
from itertools import product
from pathlib import Path
from uuid import uuid4
import yaml
@ -12,13 +13,14 @@ SUBMISSION_DATE = "2020-10-01"
APP_BUILD_ID = "2020100100"
OS = "Android"
PING_TYPE = "metrics"
MININUM_CLIENT_COUNT = 900
# See the scalar_bucket_counts minimal example for more details on the
# preconditions.
CLIENTS_HISTOGRAM_AGGREGATES = [
{
CLIENTS_HISTOGRAM_AGGREGATES = []
for i in range(MININUM_CLIENT_COUNT):
data = {
"sample_id": 1,
"client_id": UUID,
"client_id": str(uuid4()),
"ping_type": PING_TYPE,
"os": OS,
"app_version": 84,
@ -37,7 +39,7 @@ CLIENTS_HISTOGRAM_AGGREGATES = [
}
],
}
]
CLIENTS_HISTOGRAM_AGGREGATES.append(data)
BASE_ROW = {
"agg_type": "summed_histogram",

Просмотреть файл

@ -1,82 +1,16 @@
- agg_type: summed_histogram
app_build_id: '2020100100'
app_build_id: '*'
app_version: 84
channel: '*'
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
os: Android
ping_type: metrics
os: '*'
ping_type: '*'
range_max: 2
record: &id001
record:
key: '1'
value: 1.0
- agg_type: summed_histogram
app_build_id: '*'
app_version: 84
channel: '*'
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
os: Android
ping_type: metrics
range_max: 2
record: *id001
- agg_type: summed_histogram
app_build_id: '2020100100'
app_version: 84
channel: '*'
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
os: '*'
ping_type: metrics
range_max: 2
record: *id001
- agg_type: summed_histogram
app_build_id: '*'
app_version: 84
channel: '*'
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
os: '*'
ping_type: metrics
range_max: 2
record: *id001
- agg_type: summed_histogram
app_build_id: '2020100100'
app_version: 84
channel: '*'
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
os: Android
ping_type: '*'
range_max: 2
record: *id001
- agg_type: summed_histogram
app_build_id: '*'
app_version: 84
channel: '*'
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
os: Android
ping_type: '*'
range_max: 2
record: *id001
- agg_type: summed_histogram
app_build_id: '2020100100'
app_version: 84
channel: '*'
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
os: '*'
ping_type: '*'
range_max: 2
record: *id001
value: 900.0
- agg_type: summed_histogram
app_build_id: '*'
app_version: 84
@ -87,18 +21,59 @@
os: '*'
ping_type: '*'
range_max: 2
record: *id001
record:
key: '2'
value: 0.0
- agg_type: summed_histogram
app_build_id: '2020100100'
app_build_id: '*'
app_version: 84
channel: '*'
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
os: '*'
ping_type: metrics
range_max: 2
record:
key: '1'
value: 900.0
- agg_type: summed_histogram
app_build_id: '*'
app_version: 84
channel: '*'
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
os: '*'
ping_type: metrics
range_max: 2
record:
key: '2'
value: 0.0
- agg_type: summed_histogram
app_build_id: '*'
app_version: 84
channel: '*'
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
os: Android
ping_type: metrics
ping_type: '*'
range_max: 2
record: &id002
record:
key: '1'
value: 900.0
- agg_type: summed_histogram
app_build_id: '*'
app_version: 84
channel: '*'
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
os: Android
ping_type: '*'
range_max: 2
record:
key: '2'
value: 0.0
- agg_type: summed_histogram
@ -111,7 +86,48 @@
os: Android
ping_type: metrics
range_max: 2
record: *id002
record:
key: '1'
value: 900.0
- agg_type: summed_histogram
app_build_id: '*'
app_version: 84
channel: '*'
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
os: Android
ping_type: metrics
range_max: 2
record:
key: '2'
value: 0.0
- agg_type: summed_histogram
app_build_id: '2020100100'
app_version: 84
channel: '*'
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
os: '*'
ping_type: '*'
range_max: 2
record:
key: '1'
value: 900.0
- agg_type: summed_histogram
app_build_id: '2020100100'
app_version: 84
channel: '*'
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
os: '*'
ping_type: '*'
range_max: 2
record:
key: '2'
value: 0.0
- agg_type: summed_histogram
app_build_id: '2020100100'
app_version: 84
@ -122,9 +138,11 @@
os: '*'
ping_type: metrics
range_max: 2
record: *id002
record:
key: '1'
value: 900.0
- agg_type: summed_histogram
app_build_id: '*'
app_build_id: '2020100100'
app_version: 84
channel: '*'
key: ''
@ -133,7 +151,9 @@
os: '*'
ping_type: metrics
range_max: 2
record: *id002
record:
key: '2'
value: 0.0
- agg_type: summed_histogram
app_build_id: '2020100100'
app_version: 84
@ -144,9 +164,11 @@
os: Android
ping_type: '*'
range_max: 2
record: *id002
record:
key: '1'
value: 900.0
- agg_type: summed_histogram
app_build_id: '*'
app_build_id: '2020100100'
app_version: 84
channel: '*'
key: ''
@ -155,7 +177,9 @@
os: Android
ping_type: '*'
range_max: 2
record: *id002
record:
key: '2'
value: 0.0
- agg_type: summed_histogram
app_build_id: '2020100100'
app_version: 84
@ -163,18 +187,22 @@
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
os: '*'
ping_type: '*'
os: Android
ping_type: metrics
range_max: 2
record: *id002
record:
key: '1'
value: 900.0
- agg_type: summed_histogram
app_build_id: '*'
app_build_id: '2020100100'
app_version: 84
channel: '*'
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
os: '*'
ping_type: '*'
os: Android
ping_type: metrics
range_max: 2
record: *id002
record:
key: '2'
value: 0.0

Просмотреть файл

@ -1,99 +0,0 @@
"""Testing data for query."""
from itertools import product
from pathlib import Path
from uuid import uuid4
import yaml
ROOT = Path(__file__).parent
SUBMISSION_DATE = "2020-10-01"
APP_BUILD_ID = "2020100100"
OS = "Android"
PING_TYPE = "metrics"
# NOTE: each client contributes a total of 1 to the final aggregate
CLIENTS_HISTOGRAM_AGGREGATES = [
{
"sample_id": 1,
"client_id": str(uuid4()),
"ping_type": PING_TYPE,
"os": OS,
"app_version": 84,
"app_build_id": APP_BUILD_ID,
"channel": "*",
"histogram_aggregates": [
{
"metric": "network_tcp_connection",
"metric_type": "timing_distribution",
"key": "",
"agg_type": "summed_histogram",
"value": [
{"key": "1", "value": 1},
{"key": "2", "value": 0},
],
}
],
},
{
"sample_id": 1,
"client_id": str(uuid4()),
"ping_type": PING_TYPE,
"os": OS,
"app_version": 84,
"app_build_id": APP_BUILD_ID,
"channel": "*",
"histogram_aggregates": [
{
"metric": "network_tcp_connection",
"metric_type": "timing_distribution",
"key": "",
"agg_type": "summed_histogram",
"value": [
{"key": "1", "value": 1},
{"key": "3", "value": 1},
],
}
],
},
]
BASE_ROW = {
"agg_type": "summed_histogram",
"app_build_id": "*",
"app_version": 84,
"channel": "*",
"key": "",
"metric": "network_tcp_connection",
"metric_type": "timing_distribution",
"os": "*",
"ping_type": "*",
"range_max": 3,
"record": {"key": "1", "value": 1.0},
}
EXPECT = [
{**BASE_ROW, **dict(zip(["record", "ping_type", "os", "app_build_id"], values))}
for values in product(
[
{"key": "1", "value": 1.5},
{"key": "2", "value": 0.0},
{"key": "3", "value": 0.5},
],
*zip([PING_TYPE, OS, APP_BUILD_ID], ["*"] * 3),
)
]
prefix = "glam_etl"
tables = [
(
f"{prefix}.org_mozilla_fenix_glam_nightly__clients_histogram_aggregates_v1.yaml",
CLIENTS_HISTOGRAM_AGGREGATES,
),
("expect.yaml", EXPECT),
]
for name, data in tables:
with (ROOT / name).open("w") as fp:
yaml.dump(data, fp)

Просмотреть файл

@ -1,270 +0,0 @@
- agg_type: summed_histogram
app_build_id: '2020100100'
app_version: 84
channel: '*'
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
os: Android
ping_type: metrics
range_max: 3
record: &id001
key: '1'
value: 1.5
- agg_type: summed_histogram
app_build_id: '*'
app_version: 84
channel: '*'
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
os: Android
ping_type: metrics
range_max: 3
record: *id001
- agg_type: summed_histogram
app_build_id: '2020100100'
app_version: 84
channel: '*'
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
os: '*'
ping_type: metrics
range_max: 3
record: *id001
- agg_type: summed_histogram
app_build_id: '*'
app_version: 84
channel: '*'
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
os: '*'
ping_type: metrics
range_max: 3
record: *id001
- agg_type: summed_histogram
app_build_id: '2020100100'
app_version: 84
channel: '*'
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
os: Android
ping_type: '*'
range_max: 3
record: *id001
- agg_type: summed_histogram
app_build_id: '*'
app_version: 84
channel: '*'
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
os: Android
ping_type: '*'
range_max: 3
record: *id001
- agg_type: summed_histogram
app_build_id: '2020100100'
app_version: 84
channel: '*'
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
os: '*'
ping_type: '*'
range_max: 3
record: *id001
- agg_type: summed_histogram
app_build_id: '*'
app_version: 84
channel: '*'
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
os: '*'
ping_type: '*'
range_max: 3
record: *id001
- agg_type: summed_histogram
app_build_id: '2020100100'
app_version: 84
channel: '*'
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
os: Android
ping_type: metrics
range_max: 3
record: &id002
key: '2'
value: 0.0
- agg_type: summed_histogram
app_build_id: '*'
app_version: 84
channel: '*'
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
os: Android
ping_type: metrics
range_max: 3
record: *id002
- agg_type: summed_histogram
app_build_id: '2020100100'
app_version: 84
channel: '*'
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
os: '*'
ping_type: metrics
range_max: 3
record: *id002
- agg_type: summed_histogram
app_build_id: '*'
app_version: 84
channel: '*'
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
os: '*'
ping_type: metrics
range_max: 3
record: *id002
- agg_type: summed_histogram
app_build_id: '2020100100'
app_version: 84
channel: '*'
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
os: Android
ping_type: '*'
range_max: 3
record: *id002
- agg_type: summed_histogram
app_build_id: '*'
app_version: 84
channel: '*'
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
os: Android
ping_type: '*'
range_max: 3
record: *id002
- agg_type: summed_histogram
app_build_id: '2020100100'
app_version: 84
channel: '*'
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
os: '*'
ping_type: '*'
range_max: 3
record: *id002
- agg_type: summed_histogram
app_build_id: '*'
app_version: 84
channel: '*'
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
os: '*'
ping_type: '*'
range_max: 3
record: *id002
- agg_type: summed_histogram
app_build_id: '2020100100'
app_version: 84
channel: '*'
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
os: Android
ping_type: metrics
range_max: 3
record: &id003
key: '3'
value: 0.5
- agg_type: summed_histogram
app_build_id: '*'
app_version: 84
channel: '*'
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
os: Android
ping_type: metrics
range_max: 3
record: *id003
- agg_type: summed_histogram
app_build_id: '2020100100'
app_version: 84
channel: '*'
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
os: '*'
ping_type: metrics
range_max: 3
record: *id003
- agg_type: summed_histogram
app_build_id: '*'
app_version: 84
channel: '*'
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
os: '*'
ping_type: metrics
range_max: 3
record: *id003
- agg_type: summed_histogram
app_build_id: '2020100100'
app_version: 84
channel: '*'
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
os: Android
ping_type: '*'
range_max: 3
record: *id003
- agg_type: summed_histogram
app_build_id: '*'
app_version: 84
channel: '*'
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
os: Android
ping_type: '*'
range_max: 3
record: *id003
- agg_type: summed_histogram
app_build_id: '2020100100'
app_version: 84
channel: '*'
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
os: '*'
ping_type: '*'
range_max: 3
record: *id003
- agg_type: summed_histogram
app_build_id: '*'
app_version: 84
channel: '*'
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
os: '*'
ping_type: '*'
range_max: 3
record: *id003

Просмотреть файл

@ -1,47 +0,0 @@
- mode: NULLABLE
name: sample_id
type: INTEGER
- mode: NULLABLE
name: client_id
type: STRING
- mode: NULLABLE
name: ping_type
type: STRING
- mode: NULLABLE
name: os
type: STRING
- mode: NULLABLE
name: app_version
type: INTEGER
- mode: NULLABLE
name: app_build_id
type: STRING
- mode: NULLABLE
name: channel
type: STRING
- fields:
- mode: NULLABLE
name: metric
type: STRING
- mode: NULLABLE
name: metric_type
type: STRING
- mode: NULLABLE
name: key
type: STRING
- mode: NULLABLE
name: agg_type
type: STRING
- fields:
- mode: NULLABLE
name: key
type: STRING
- mode: NULLABLE
name: value
type: INTEGER
mode: REPEATED
name: value
type: RECORD
mode: REPEATED
name: histogram_aggregates
type: RECORD

Просмотреть файл

@ -1,34 +0,0 @@
- app_build_id: '2020100100'
app_version: 84
channel: '*'
client_id: 5c2364fc-46d4-4537-9575-a8ddaba2b42f
histogram_aggregates:
- agg_type: summed_histogram
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
value:
- key: '1'
value: 1
- key: '2'
value: 0
os: Android
ping_type: metrics
sample_id: 1
- app_build_id: '2020100100'
app_version: 84
channel: '*'
client_id: 813d66e1-57dc-46aa-84ec-682b48cc2e3c
histogram_aggregates:
- agg_type: summed_histogram
key: ''
metric: network_tcp_connection
metric_type: timing_distribution
value:
- key: '1'
value: 1
- key: '3'
value: 1
os: Android
ping_type: metrics
sample_id: 1

Просмотреть файл

@ -1,12 +0,0 @@
- name: submission_date
type: DATE
value: '2020-10-01'
- name: min_sample_id
type: INT64
value: 0
- name: max_sample_id
type: INT64
value: 99
- name: sample_size
type: INT64
value: 100

Просмотреть файл

@ -11,13 +11,14 @@ SUBMISSION_DATE = "2020-10-01"
APP_BUILD_ID = "2020100100"
OS = "Android"
PING_TYPE = "metrics"
MINIMUM_CLIENT_COUNT = 900
# Testing precondition: ping_type, os, and app_build_id must not be "*". See
# models.py under the scalar_bucket_counts parameters to see that sets fields
# are used in the static combinations. If these are set to "*", then they will
# be double counted...
CLIENTS_SCALAR_AGGREGATES = [
{
CLIENTS_SCALAR_AGGREGATES = []
for i in range(MINIMUM_CLIENT_COUNT):
data = {
"client_id": str(uuid4()),
"ping_type": PING_TYPE,
"os": OS,
@ -33,25 +34,9 @@ CLIENTS_SCALAR_AGGREGATES = [
"value": 4.0,
},
],
},
{
"client_id": str(uuid4()),
"ping_type": PING_TYPE,
"os": OS,
"app_version": 84,
"app_build_id": APP_BUILD_ID,
"channel": "*",
"scalar_aggregates": [
{
"metric": "places_manager_write_query_count",
"metric_type": "counter",
"key": "",
"agg_type": "count",
"value": 8.0,
},
],
},
]
}
CLIENTS_SCALAR_AGGREGATES.append(data)
# we must generate the set of combinations. Each one of these have the same
# values though.

Просмотреть файл

@ -1,240 +1,112 @@
- agg_type: histogram
app_build_id: '2020100100'
app_version: 84
bucket: '4.00'
bucket_count: 100
channel: '*'
client_agg_type: count
count: 1
key: ''
metric: places_manager_write_query_count
metric_type: counter
os: Android
ping_type: metrics
range_max: 3.0
range_min: 2.0
- agg_type: histogram
app_build_id: '*'
app_version: 84
bucket: '4.00'
bucket_count: 100
channel: '*'
client_agg_type: count
count: 1
key: ''
metric: places_manager_write_query_count
metric_type: counter
os: Android
ping_type: metrics
range_max: 3.0
range_min: 2.0
- agg_type: histogram
app_build_id: '2020100100'
app_version: 84
bucket: '4.00'
bucket_count: 100
channel: '*'
client_agg_type: count
count: 1
key: ''
metric: places_manager_write_query_count
metric_type: counter
os: '*'
ping_type: metrics
range_max: 3.0
range_min: 2.0
- agg_type: histogram
app_build_id: '*'
app_version: 84
bucket: '4.00'
bucket_count: 100
channel: '*'
client_agg_type: count
count: 1
key: ''
metric: places_manager_write_query_count
metric_type: counter
os: '*'
ping_type: metrics
range_max: 3.0
range_min: 2.0
- agg_type: histogram
app_build_id: '2020100100'
app_version: 84
bucket: '4.00'
bucket_count: 100
channel: '*'
client_agg_type: count
count: 1
key: ''
metric: places_manager_write_query_count
metric_type: counter
os: Android
ping_type: '*'
range_max: 3.0
range_min: 2.0
- agg_type: histogram
app_build_id: '*'
app_version: 84
bucket: '4.00'
bucket_count: 100
channel: '*'
client_agg_type: count
count: 1
key: ''
metric: places_manager_write_query_count
metric_type: counter
os: Android
ping_type: '*'
range_max: 3.0
range_min: 2.0
- agg_type: histogram
app_build_id: '2020100100'
app_version: 84
bucket: '4.00'
bucket_count: 100
channel: '*'
client_agg_type: count
count: 1
count: 900
key: ''
metric: places_manager_write_query_count
metric_type: counter
os: '*'
ping_type: '*'
range_max: 3.0
range_max: 2.0
range_min: 2.0
- agg_type: histogram
app_build_id: '*'
app_version: 84
bucket: '4.00'
bucket_count: 100
channel: '*'
client_agg_type: count
count: 1
key: ''
metric: places_manager_write_query_count
metric_type: counter
os: '*'
ping_type: '*'
range_max: 3.0
range_min: 2.0
- agg_type: histogram
app_build_id: '2020100100'
app_version: 84
bucket: '8.00'
bucket_count: 100
channel: '*'
client_agg_type: count
count: 1
key: ''
metric: places_manager_write_query_count
metric_type: counter
os: Android
ping_type: metrics
range_max: 3.0
range_min: 2.0
- agg_type: histogram
app_build_id: '*'
app_version: 84
bucket: '8.00'
bucket_count: 100
channel: '*'
client_agg_type: count
count: 1
key: ''
metric: places_manager_write_query_count
metric_type: counter
os: Android
ping_type: metrics
range_max: 3.0
range_min: 2.0
- agg_type: histogram
app_build_id: '2020100100'
app_version: 84
bucket: '8.00'
bucket_count: 100
channel: '*'
client_agg_type: count
count: 1
count: 900
key: ''
metric: places_manager_write_query_count
metric_type: counter
os: '*'
ping_type: metrics
range_max: 3.0
range_max: 2.0
range_min: 2.0
- agg_type: histogram
app_build_id: '*'
app_version: 84
bucket: '8.00'
bucket_count: 100
channel: '*'
client_agg_type: count
count: 1
count: 900
key: ''
metric: places_manager_write_query_count
metric_type: counter
os: Android
ping_type: '*'
range_max: 2.0
range_min: 2.0
- agg_type: histogram
app_build_id: '*'
app_version: 84
bucket_count: 100
channel: '*'
client_agg_type: count
count: 900
key: ''
metric: places_manager_write_query_count
metric_type: counter
os: Android
ping_type: metrics
range_max: 2.0
range_min: 2.0
- agg_type: histogram
app_build_id: '2020100100'
app_version: 84
bucket_count: 100
channel: '*'
client_agg_type: count
count: 900
key: ''
metric: places_manager_write_query_count
metric_type: counter
os: '*'
ping_type: '*'
range_max: 2.0
range_min: 2.0
- agg_type: histogram
app_build_id: '2020100100'
app_version: 84
bucket_count: 100
channel: '*'
client_agg_type: count
count: 900
key: ''
metric: places_manager_write_query_count
metric_type: counter
os: '*'
ping_type: metrics
range_max: 3.0
range_max: 2.0
range_min: 2.0
- agg_type: histogram
app_build_id: '2020100100'
app_version: 84
bucket: '8.00'
bucket_count: 100
channel: '*'
client_agg_type: count
count: 1
count: 900
key: ''
metric: places_manager_write_query_count
metric_type: counter
os: Android
ping_type: '*'
range_max: 3.0
range_min: 2.0
- agg_type: histogram
app_build_id: '*'
app_version: 84
bucket: '8.00'
bucket_count: 100
channel: '*'
client_agg_type: count
count: 1
key: ''
metric: places_manager_write_query_count
metric_type: counter
os: Android
ping_type: '*'
range_max: 3.0
range_max: 2.0
range_min: 2.0
- agg_type: histogram
app_build_id: '2020100100'
app_version: 84
bucket: '8.00'
bucket_count: 100
channel: '*'
client_agg_type: count
count: 1
count: 900
key: ''
metric: places_manager_write_query_count
metric_type: counter
os: '*'
ping_type: '*'
range_max: 3.0
range_min: 2.0
- agg_type: histogram
app_build_id: '*'
app_version: 84
bucket: '8.00'
bucket_count: 100
channel: '*'
client_agg_type: count
count: 1
key: ''
metric: places_manager_write_query_count
metric_type: counter
os: '*'
ping_type: '*'
range_max: 3.0
os: Android
ping_type: metrics
range_max: 2.0
range_min: 2.0

Просмотреть файл

@ -1,6 +1,2 @@
{"agg_type":"histogram","aggregates":[{"key":"5.00","value":0},{"key":"5.03","value":0},{"key":"5.07","value":0},{"key":"5.11","value":0},{"key":"5.14","value":0},{"key":"5.18","value":0},{"key":"5.21","value":0},{"key":"5.25","value":0},{"key":"5.29","value":0},{"key":"5.32","value":0},{"key":"5.36","value":0},{"key":"5.40","value":0},{"key":"5.43","value":0},{"key":"5.47","value":0},{"key":"5.51","value":0},{"key":"5.55","value":0},{"key":"5.59","value":0},{"key":"5.63","value":0},{"key":"5.66","value":0},{"key":"5.70","value":0},{"key":"5.74","value":0},{"key":"5.78","value":0},{"key":"5.82","value":0},{"key":"5.86","value":0},{"key":"5.90","value":0},{"key":"5.95","value":0},{"key":"5.99","value":0},{"key":"6.03","value":0},{"key":"6.07","value":0},{"key":"6.11","value":0},{"key":"6.16","value":0},{"key":"6.20","value":0},{"key":"6.24","value":0},{"key":"6.29","value":0},{"key":"6.33","value":0},{"key":"6.37","value":0},{"key":"6.42","value":0},{"key":"6.46","value":0},{"key":"6.51","value":0},{"key":"6.55","value":0},{"key":"6.60","value":0},{"key":"6.64","value":0},{"key":"6.69","value":0},{"key":"6.74","value":0},{"key":"6.78","value":0},{"key":"6.83","value":0},{"key":"6.88","value":0},{"key":"6.93","value":0},{"key":"6.97","value":0},{"key":"7.02","value":0},{"key":"7.07","value":0},{"key":"7.12","value":0},{"key":"7.17","value":0},{"key":"7.22","value":0},{"key":"7.27","value":0},{"key":"7.32","value":0},{"key":"7.37","value":0},{"key":"7.42","value":0},{"key":"7.47","value":0},{"key":"7.53","value":0},{"key":"7.58","value":0},{"key":"7.63","value":0},{"key":"7.68","value":0},{"key":"7.74","value":0},{"key":"7.79","value":0},{"key":"7.85","value":0},{"key":"7.90","value":0},{"key":"7.96","value":0},{"key":"8.01","value":0},{"key":"8.07","value":0},{"key":"8.12","value":0},{"key":"8.18","value":0},{"key":"8.24","value":0},{"key":"8.29","value":0},{"key":"8.35","value":0},{"key":"8.41","value":0},{"key":"8.47","value":0},{"key":"8.53","value":0},{"key":"8.59","value":0},{"key":"8.65","value":0},{"key":"8.71","value":0},{"key":"8.77","value":0},{"key":"8.83","value":0},{"key":"8.89","value":0},{"key":"8.95","value":0},{"key":"9.01","value":0},{"key":"9.08","value":0},{"key":"9.14","value":0},{"key":"9.20","value":0},{"key":"9.27","value":0},{"key":"9.33","value":0},{"key":"9.40","value":0},{"key":"9.46","value":0},{"key":"9.53","value":0},{"key":"9.59","value":0},{"key":"9.66","value":0},{"key":"9.73","value":0},{"key":"9.79","value":0},{"key":"9.86","value":0},{"key":"9.93","value":0},{"key":"10.00","value":1}],"app_build_id":"first","app_version":75,"channel":"nightly","client_agg_type":"min","key":"","metric":"some_metric","metric_type":"scalar","os":"first","process":"parent","total_users":1}
{"agg_type":"histogram","aggregates":[{"key":"5.00","value":0},{"key":"5.03","value":0},{"key":"5.07","value":0},{"key":"5.11","value":0},{"key":"5.14","value":0},{"key":"5.18","value":0},{"key":"5.21","value":0},{"key":"5.25","value":0},{"key":"5.29","value":0},{"key":"5.32","value":0},{"key":"5.36","value":0},{"key":"5.40","value":0},{"key":"5.43","value":0},{"key":"5.47","value":0},{"key":"5.51","value":0},{"key":"5.55","value":0},{"key":"5.59","value":0},{"key":"5.63","value":0},{"key":"5.66","value":0},{"key":"5.70","value":0},{"key":"5.74","value":0},{"key":"5.78","value":0},{"key":"5.82","value":0},{"key":"5.86","value":0},{"key":"5.90","value":0},{"key":"5.95","value":0},{"key":"5.99","value":0},{"key":"6.03","value":0},{"key":"6.07","value":0},{"key":"6.11","value":0},{"key":"6.16","value":0},{"key":"6.20","value":0},{"key":"6.24","value":0},{"key":"6.29","value":0},{"key":"6.33","value":0},{"key":"6.37","value":0},{"key":"6.42","value":0},{"key":"6.46","value":0},{"key":"6.51","value":0},{"key":"6.55","value":0},{"key":"6.60","value":0},{"key":"6.64","value":0},{"key":"6.69","value":0},{"key":"6.74","value":0},{"key":"6.78","value":0},{"key":"6.83","value":0},{"key":"6.88","value":0},{"key":"6.93","value":0},{"key":"6.97","value":0},{"key":"7.02","value":0},{"key":"7.07","value":0},{"key":"7.12","value":0},{"key":"7.17","value":0},{"key":"7.22","value":0},{"key":"7.27","value":0},{"key":"7.32","value":0},{"key":"7.37","value":0},{"key":"7.42","value":0},{"key":"7.47","value":0},{"key":"7.53","value":0},{"key":"7.58","value":0},{"key":"7.63","value":0},{"key":"7.68","value":0},{"key":"7.74","value":0},{"key":"7.79","value":0},{"key":"7.85","value":0},{"key":"7.90","value":0},{"key":"7.96","value":0},{"key":"8.01","value":0},{"key":"8.07","value":0},{"key":"8.12","value":0},{"key":"8.18","value":0},{"key":"8.24","value":0},{"key":"8.29","value":0},{"key":"8.35","value":0},{"key":"8.41","value":0},{"key":"8.47","value":0},{"key":"8.53","value":0},{"key":"8.59","value":0},{"key":"8.65","value":0},{"key":"8.71","value":0},{"key":"8.77","value":0},{"key":"8.83","value":0},{"key":"8.89","value":0},{"key":"8.95","value":0},{"key":"9.01","value":0},{"key":"9.08","value":0},{"key":"9.14","value":0},{"key":"9.20","value":0},{"key":"9.27","value":0},{"key":"9.33","value":0},{"key":"9.40","value":0},{"key":"9.46","value":0},{"key":"9.53","value":0},{"key":"9.59","value":0},{"key":"9.66","value":0},{"key":"9.73","value":0},{"key":"9.79","value":0},{"key":"9.86","value":0},{"key":"9.93","value":0},{"key":"10.00","value":1}],"app_build_id":"first","app_version":75,"channel":"nightly","client_agg_type":"min","key":"","metric":"some_metric","metric_type":"scalar","process":"parent","total_users":1}
{"agg_type":"histogram","aggregates":[{"key":"5.00","value":1},{"key":"5.03","value":0},{"key":"5.07","value":0},{"key":"5.11","value":0},{"key":"5.14","value":0},{"key":"5.18","value":0},{"key":"5.21","value":0},{"key":"5.25","value":0},{"key":"5.29","value":0},{"key":"5.32","value":0},{"key":"5.36","value":0},{"key":"5.40","value":0},{"key":"5.43","value":0},{"key":"5.47","value":0},{"key":"5.51","value":0},{"key":"5.55","value":0},{"key":"5.59","value":0},{"key":"5.63","value":0},{"key":"5.66","value":0},{"key":"5.70","value":0},{"key":"5.74","value":0},{"key":"5.78","value":0},{"key":"5.82","value":0},{"key":"5.86","value":0},{"key":"5.90","value":0},{"key":"5.95","value":0},{"key":"5.99","value":0},{"key":"6.03","value":0},{"key":"6.07","value":0},{"key":"6.11","value":0},{"key":"6.16","value":0},{"key":"6.20","value":0},{"key":"6.24","value":0},{"key":"6.29","value":0},{"key":"6.33","value":0},{"key":"6.37","value":0},{"key":"6.42","value":0},{"key":"6.46","value":0},{"key":"6.51","value":0},{"key":"6.55","value":0},{"key":"6.60","value":0},{"key":"6.64","value":0},{"key":"6.69","value":0},{"key":"6.74","value":0},{"key":"6.78","value":0},{"key":"6.83","value":0},{"key":"6.88","value":0},{"key":"6.93","value":0},{"key":"6.97","value":0},{"key":"7.02","value":0},{"key":"7.07","value":0},{"key":"7.12","value":0},{"key":"7.17","value":0},{"key":"7.22","value":0},{"key":"7.27","value":0},{"key":"7.32","value":0},{"key":"7.37","value":0},{"key":"7.42","value":0},{"key":"7.47","value":0},{"key":"7.53","value":0},{"key":"7.58","value":0},{"key":"7.63","value":0},{"key":"7.68","value":0},{"key":"7.74","value":0},{"key":"7.79","value":0},{"key":"7.85","value":0},{"key":"7.90","value":0},{"key":"7.96","value":0},{"key":"8.01","value":0},{"key":"8.07","value":0},{"key":"8.12","value":0},{"key":"8.18","value":0},{"key":"8.24","value":0},{"key":"8.29","value":0},{"key":"8.35","value":0},{"key":"8.41","value":0},{"key":"8.47","value":0},{"key":"8.53","value":0},{"key":"8.59","value":0},{"key":"8.65","value":0},{"key":"8.71","value":0},{"key":"8.77","value":0},{"key":"8.83","value":0},{"key":"8.89","value":0},{"key":"8.95","value":0},{"key":"9.01","value":0},{"key":"9.08","value":0},{"key":"9.14","value":0},{"key":"9.20","value":0},{"key":"9.27","value":0},{"key":"9.33","value":0},{"key":"9.40","value":0},{"key":"9.46","value":0},{"key":"9.53","value":0},{"key":"9.59","value":0},{"key":"9.66","value":0},{"key":"9.73","value":0},{"key":"9.79","value":0},{"key":"9.86","value":0},{"key":"9.93","value":0},{"key":"10.00","value":0}],"app_build_id":"second","app_version":75,"channel":"nightly","client_agg_type":"min","key":"","metric":"some_metric","metric_type":"scalar","os":"first","process":"parent","total_users":1}
{"agg_type":"histogram","aggregates":[{"key":"5.00","value":1},{"key":"5.03","value":0},{"key":"5.07","value":0},{"key":"5.11","value":0},{"key":"5.14","value":0},{"key":"5.18","value":0},{"key":"5.21","value":0},{"key":"5.25","value":0},{"key":"5.29","value":0},{"key":"5.32","value":0},{"key":"5.36","value":0},{"key":"5.40","value":0},{"key":"5.43","value":0},{"key":"5.47","value":0},{"key":"5.51","value":0},{"key":"5.55","value":0},{"key":"5.59","value":0},{"key":"5.63","value":0},{"key":"5.66","value":0},{"key":"5.70","value":0},{"key":"5.74","value":0},{"key":"5.78","value":0},{"key":"5.82","value":0},{"key":"5.86","value":0},{"key":"5.90","value":0},{"key":"5.95","value":0},{"key":"5.99","value":0},{"key":"6.03","value":0},{"key":"6.07","value":0},{"key":"6.11","value":0},{"key":"6.16","value":0},{"key":"6.20","value":0},{"key":"6.24","value":0},{"key":"6.29","value":0},{"key":"6.33","value":0},{"key":"6.37","value":0},{"key":"6.42","value":0},{"key":"6.46","value":0},{"key":"6.51","value":0},{"key":"6.55","value":0},{"key":"6.60","value":0},{"key":"6.64","value":0},{"key":"6.69","value":0},{"key":"6.74","value":0},{"key":"6.78","value":0},{"key":"6.83","value":0},{"key":"6.88","value":0},{"key":"6.93","value":0},{"key":"6.97","value":0},{"key":"7.02","value":0},{"key":"7.07","value":0},{"key":"7.12","value":0},{"key":"7.17","value":0},{"key":"7.22","value":0},{"key":"7.27","value":0},{"key":"7.32","value":0},{"key":"7.37","value":0},{"key":"7.42","value":0},{"key":"7.47","value":0},{"key":"7.53","value":0},{"key":"7.58","value":0},{"key":"7.63","value":0},{"key":"7.68","value":0},{"key":"7.74","value":0},{"key":"7.79","value":0},{"key":"7.85","value":0},{"key":"7.90","value":0},{"key":"7.96","value":0},{"key":"8.01","value":0},{"key":"8.07","value":0},{"key":"8.12","value":0},{"key":"8.18","value":0},{"key":"8.24","value":0},{"key":"8.29","value":0},{"key":"8.35","value":0},{"key":"8.41","value":0},{"key":"8.47","value":0},{"key":"8.53","value":0},{"key":"8.59","value":0},{"key":"8.65","value":0},{"key":"8.71","value":0},{"key":"8.77","value":0},{"key":"8.83","value":0},{"key":"8.89","value":0},{"key":"8.95","value":0},{"key":"9.01","value":0},{"key":"9.08","value":0},{"key":"9.14","value":0},{"key":"9.20","value":0},{"key":"9.27","value":0},{"key":"9.33","value":0},{"key":"9.40","value":0},{"key":"9.46","value":0},{"key":"9.53","value":0},{"key":"9.59","value":0},{"key":"9.66","value":0},{"key":"9.73","value":0},{"key":"9.79","value":0},{"key":"9.86","value":0},{"key":"9.93","value":0},{"key":"10.00","value":0}],"app_build_id":"second","app_version":75,"channel":"nightly","client_agg_type":"min","key":"","metric":"some_metric","metric_type":"scalar","process":"parent","total_users":1}
{"agg_type":"histogram","aggregates":[{"key":"5.00","value":1},{"key":"5.03","value":0},{"key":"5.07","value":0},{"key":"5.11","value":0},{"key":"5.14","value":0},{"key":"5.18","value":0},{"key":"5.21","value":0},{"key":"5.25","value":0},{"key":"5.29","value":0},{"key":"5.32","value":0},{"key":"5.36","value":0},{"key":"5.40","value":0},{"key":"5.43","value":0},{"key":"5.47","value":0},{"key":"5.51","value":0},{"key":"5.55","value":0},{"key":"5.59","value":0},{"key":"5.63","value":0},{"key":"5.66","value":0},{"key":"5.70","value":0},{"key":"5.74","value":0},{"key":"5.78","value":0},{"key":"5.82","value":0},{"key":"5.86","value":0},{"key":"5.90","value":0},{"key":"5.95","value":0},{"key":"5.99","value":0},{"key":"6.03","value":0},{"key":"6.07","value":0},{"key":"6.11","value":0},{"key":"6.16","value":0},{"key":"6.20","value":0},{"key":"6.24","value":0},{"key":"6.29","value":0},{"key":"6.33","value":0},{"key":"6.37","value":0},{"key":"6.42","value":0},{"key":"6.46","value":0},{"key":"6.51","value":0},{"key":"6.55","value":0},{"key":"6.60","value":0},{"key":"6.64","value":0},{"key":"6.69","value":0},{"key":"6.74","value":0},{"key":"6.78","value":0},{"key":"6.83","value":0},{"key":"6.88","value":0},{"key":"6.93","value":0},{"key":"6.97","value":0},{"key":"7.02","value":0},{"key":"7.07","value":0},{"key":"7.12","value":0},{"key":"7.17","value":0},{"key":"7.22","value":0},{"key":"7.27","value":0},{"key":"7.32","value":0},{"key":"7.37","value":0},{"key":"7.42","value":0},{"key":"7.47","value":0},{"key":"7.53","value":0},{"key":"7.58","value":0},{"key":"7.63","value":0},{"key":"7.68","value":0},{"key":"7.74","value":0},{"key":"7.79","value":0},{"key":"7.85","value":0},{"key":"7.90","value":0},{"key":"7.96","value":0},{"key":"8.01","value":0},{"key":"8.07","value":0},{"key":"8.12","value":0},{"key":"8.18","value":0},{"key":"8.24","value":0},{"key":"8.29","value":0},{"key":"8.35","value":0},{"key":"8.41","value":0},{"key":"8.47","value":0},{"key":"8.53","value":0},{"key":"8.59","value":0},{"key":"8.65","value":0},{"key":"8.71","value":0},{"key":"8.77","value":0},{"key":"8.83","value":0},{"key":"8.89","value":0},{"key":"8.95","value":0},{"key":"9.01","value":0},{"key":"9.08","value":0},{"key":"9.14","value":0},{"key":"9.20","value":0},{"key":"9.27","value":0},{"key":"9.33","value":0},{"key":"9.40","value":0},{"key":"9.46","value":0},{"key":"9.53","value":0},{"key":"9.59","value":0},{"key":"9.66","value":0},{"key":"9.73","value":0},{"key":"9.79","value":0},{"key":"9.86","value":0},{"key":"9.93","value":0},{"key":"10.00","value":0}],"app_version":75,"channel":"nightly","client_agg_type":"min","key":"","metric":"some_metric","metric_type":"scalar","os":"first","process":"parent","total_users":1}
{"agg_type":"histogram","aggregates":[{"key":"5.00","value":1},{"key":"5.03","value":0},{"key":"5.07","value":0},{"key":"5.11","value":0},{"key":"5.14","value":0},{"key":"5.18","value":0},{"key":"5.21","value":0},{"key":"5.25","value":0},{"key":"5.29","value":0},{"key":"5.32","value":0},{"key":"5.36","value":0},{"key":"5.40","value":0},{"key":"5.43","value":0},{"key":"5.47","value":0},{"key":"5.51","value":0},{"key":"5.55","value":0},{"key":"5.59","value":0},{"key":"5.63","value":0},{"key":"5.66","value":0},{"key":"5.70","value":0},{"key":"5.74","value":0},{"key":"5.78","value":0},{"key":"5.82","value":0},{"key":"5.86","value":0},{"key":"5.90","value":0},{"key":"5.95","value":0},{"key":"5.99","value":0},{"key":"6.03","value":0},{"key":"6.07","value":0},{"key":"6.11","value":0},{"key":"6.16","value":0},{"key":"6.20","value":0},{"key":"6.24","value":0},{"key":"6.29","value":0},{"key":"6.33","value":0},{"key":"6.37","value":0},{"key":"6.42","value":0},{"key":"6.46","value":0},{"key":"6.51","value":0},{"key":"6.55","value":0},{"key":"6.60","value":0},{"key":"6.64","value":0},{"key":"6.69","value":0},{"key":"6.74","value":0},{"key":"6.78","value":0},{"key":"6.83","value":0},{"key":"6.88","value":0},{"key":"6.93","value":0},{"key":"6.97","value":0},{"key":"7.02","value":0},{"key":"7.07","value":0},{"key":"7.12","value":0},{"key":"7.17","value":0},{"key":"7.22","value":0},{"key":"7.27","value":0},{"key":"7.32","value":0},{"key":"7.37","value":0},{"key":"7.42","value":0},{"key":"7.47","value":0},{"key":"7.53","value":0},{"key":"7.58","value":0},{"key":"7.63","value":0},{"key":"7.68","value":0},{"key":"7.74","value":0},{"key":"7.79","value":0},{"key":"7.85","value":0},{"key":"7.90","value":0},{"key":"7.96","value":0},{"key":"8.01","value":0},{"key":"8.07","value":0},{"key":"8.12","value":0},{"key":"8.18","value":0},{"key":"8.24","value":0},{"key":"8.29","value":0},{"key":"8.35","value":0},{"key":"8.41","value":0},{"key":"8.47","value":0},{"key":"8.53","value":0},{"key":"8.59","value":0},{"key":"8.65","value":0},{"key":"8.71","value":0},{"key":"8.77","value":0},{"key":"8.83","value":0},{"key":"8.89","value":0},{"key":"8.95","value":0},{"key":"9.01","value":0},{"key":"9.08","value":0},{"key":"9.14","value":0},{"key":"9.20","value":0},{"key":"9.27","value":0},{"key":"9.33","value":0},{"key":"9.40","value":0},{"key":"9.46","value":0},{"key":"9.53","value":0},{"key":"9.59","value":0},{"key":"9.66","value":0},{"key":"9.73","value":0},{"key":"9.79","value":0},{"key":"9.86","value":0},{"key":"9.93","value":0},{"key":"10.00","value":0}],"app_version":75,"channel":"nightly","client_agg_type":"min","key":"","metric":"some_metric","metric_type":"scalar","process":"parent","total_users":1}
{"agg_type":"histogram","aggregates":[],"app_build_id":"first","app_version":75,"channel":"nightly","client_agg_type":"min","key":"","metric":"some_metric","metric_type":"scalar","os":"first","process":"parent","total_users":400}
{"agg_type":"histogram","aggregates":[],"app_build_id":"first","app_version":75,"channel":"nightly","client_agg_type":"min","key":"","metric":"some_metric","metric_type":"scalar","process":"parent","total_users":400}