在 Firebase (BigQuery) 的一个/多个事件中获取多个参数的唯一计数
Getting unique counts of multiple parameters in one / multiple events in Firebase (BigQuery)
我们最近在我们的一款游戏中实施了 Firebase,并在同一游戏中为每个事件配置了多个自定义事件和参数。事件的结构与 Firebase BigQuery DB (Link)
中的 defined/shared 相同
目前,我正在使用以下查询来取出数据:
SELECT
user_dim.app_info.app_instance_id AS id,
(
SELECT
param.value.int_value
FROM
UNNEST(event_dim.params) AS param
WHERE
param.key = 'x') AS x,
(
SELECT
param.value.int_value
FROM
UNNEST(event_dim.params) AS param
WHERE
param.key = 'y') AS y,
(
SELECT
param.value.string_value
FROM
UNNEST(event_dim.params) AS param
WHERE
param.key = 'z') AS z
FROM
`firebase_dataset`
CROSS JOIN
UNNEST(event_dim) AS event_dim
WHERE
event_dim.name = 'event_name';
这给出了所述事件中参数的所有数据的列表。例如,
id x y z
1 100 1000 abc
1 200 1500 def
1 300 2000 ghi
1 400 2500 klm
2 100 1000 abc
2 200 1500 def
3 100 1000 abc
4 100 1000 abc
4 200 1500 def
4 300 2000 ghi
然后我们获取 CSV,然后分别取出 x、y 和 z 的计数或 "id" 中出现 x、y 或 z 的唯一计数。
例如,
X Count of id
100 4
200 3
300 2
400 1
我知道可以直接通过查询获取唯一计数/过度计数值,但我一直无法弄清楚如何在 bigquery 中获取多个参数。
我假设更好的查询将有助于减少 运行 所花费的时间,但不会像数据集那样改变被查询的数据以获得最终结果不会有太大变化。
如果您能提供有关如何直接在 BigQuery 上获得结果的任何帮助,我们将不胜感激。
谢谢!
此致,
光辉
以下适用于 BigQuery 标准 SQL
#standardSQL
SELECT
param.key key,
IFNULL(CAST(param.value.int_value AS STRING), param.value.string_value) value,
COUNT(IFNULL(CAST(param.value.int_value AS STRING), param.value.string_value)) cnt
FROM `firebase_dataset`,
UNNEST(event_dim) AS event_dim, UNNEST(event_dim.params) AS param
WHERE event_dim.name = 'event_name';
GROUP BY key, value
HAVING key IN ('x', 'y', 'z')
您可以使用您在问题中引用的 public 数据集测试/使用它,如下所示
#standardSQL
SELECT
param.key key,
IFNULL(CAST(param.value.int_value AS STRING), param.value.string_value) value,
COUNT(IFNULL(CAST(param.value.int_value AS STRING), param.value.string_value)) cnt
FROM `firebase-analytics-sample-data.ios_dataset.app_events_20160607`,
UNNEST(event_dim) AS event_dim, UNNEST(event_dim.params) AS param
WHERE event_dim.name = 'select_content'
GROUP BY key, value
HAVING key IN ('content_type', 'item_id', 'firebase_event_origin')
我们最近在我们的一款游戏中实施了 Firebase,并在同一游戏中为每个事件配置了多个自定义事件和参数。事件的结构与 Firebase BigQuery DB (Link)
中的 defined/shared 相同目前,我正在使用以下查询来取出数据:
SELECT
user_dim.app_info.app_instance_id AS id,
(
SELECT
param.value.int_value
FROM
UNNEST(event_dim.params) AS param
WHERE
param.key = 'x') AS x,
(
SELECT
param.value.int_value
FROM
UNNEST(event_dim.params) AS param
WHERE
param.key = 'y') AS y,
(
SELECT
param.value.string_value
FROM
UNNEST(event_dim.params) AS param
WHERE
param.key = 'z') AS z
FROM
`firebase_dataset`
CROSS JOIN
UNNEST(event_dim) AS event_dim
WHERE
event_dim.name = 'event_name';
这给出了所述事件中参数的所有数据的列表。例如,
id x y z
1 100 1000 abc
1 200 1500 def
1 300 2000 ghi
1 400 2500 klm
2 100 1000 abc
2 200 1500 def
3 100 1000 abc
4 100 1000 abc
4 200 1500 def
4 300 2000 ghi
然后我们获取 CSV,然后分别取出 x、y 和 z 的计数或 "id" 中出现 x、y 或 z 的唯一计数。
例如,
X Count of id
100 4
200 3
300 2
400 1
我知道可以直接通过查询获取唯一计数/过度计数值,但我一直无法弄清楚如何在 bigquery 中获取多个参数。
我假设更好的查询将有助于减少 运行 所花费的时间,但不会像数据集那样改变被查询的数据以获得最终结果不会有太大变化。
如果您能提供有关如何直接在 BigQuery 上获得结果的任何帮助,我们将不胜感激。
谢谢!
此致, 光辉
以下适用于 BigQuery 标准 SQL
#standardSQL
SELECT
param.key key,
IFNULL(CAST(param.value.int_value AS STRING), param.value.string_value) value,
COUNT(IFNULL(CAST(param.value.int_value AS STRING), param.value.string_value)) cnt
FROM `firebase_dataset`,
UNNEST(event_dim) AS event_dim, UNNEST(event_dim.params) AS param
WHERE event_dim.name = 'event_name';
GROUP BY key, value
HAVING key IN ('x', 'y', 'z')
您可以使用您在问题中引用的 public 数据集测试/使用它,如下所示
#standardSQL
SELECT
param.key key,
IFNULL(CAST(param.value.int_value AS STRING), param.value.string_value) value,
COUNT(IFNULL(CAST(param.value.int_value AS STRING), param.value.string_value)) cnt
FROM `firebase-analytics-sample-data.ios_dataset.app_events_20160607`,
UNNEST(event_dim) AS event_dim, UNNEST(event_dim.params) AS param
WHERE event_dim.name = 'select_content'
GROUP BY key, value
HAVING key IN ('content_type', 'item_id', 'firebase_event_origin')