Google bigquery 基于user\u dim.user\u properties.key计算用户数
我对Bigquery相当陌生,似乎不知道如何根据未列出的数组计算字段 我想根据与名为“persistent\u user\u id”的user\u dim.user\u properties.key关联的值来计算和列出唯一的用户。同时,我想在user_dim.user_properties.key中为另一个名为“status”的字段设置一个过滤器,该字段的值字符串为“Active” 第一个条件: user\u dim.user\u properties.key=“persistent\u user\u id”,我想计算存储在user\u dim.user\u properties.value.value.string\u value中的唯一值 第二个条件: user\u dim.user\u properties.key=“status”和user\u dim.user\u properties.value.value.string\u value=“Active” 此查询用于根据“persistent\u user\u id”关联值列出用户,但我无法使其工作,因此它将“status”过滤器集添加到“active”。这是我的疑问,任何帮助都将不胜感激Google bigquery 基于user\u dim.user\u properties.key计算用户数,google-bigquery,Google Bigquery,我对Bigquery相当陌生,似乎不知道如何根据未列出的数组计算字段 我想根据与名为“persistent\u user\u id”的user\u dim.user\u properties.key关联的值来计算和列出唯一的用户。同时,我想在user_dim.user_properties.key中为另一个名为“status”的字段设置一个过滤器,该字段的值字符串为“Active” 第一个条件: user\u dim.user\u properties.key=“persistent\u use
SELECT
MAX(user_prop.key) AS keyname,
MAX(user_prop.value.value.string_value) AS user_id,
user_dim.app_info.app_instance_id AS app_id
FROM `tableName_*`, UNNEST (user_dim.user_properties) AS user_prop
WHERE user_prop.key = "persistent_user_id"
AND (_table_suffix >= '20180101') AND (_table_suffix <= '20180228')
GROUP BY app_id
选择
MAX(用户属性键)作为keyname,
最大值(用户属性值、值、字符串值)作为用户id,
用户\u dim.app\u info.app\u实例\u id作为app\u id
从`tableName\*`,UNNEST(user\u dim.user\u properties)作为user\u prop
其中user\u prop.key=“persistent\u user\u id”
和(_table_suffix>='20180101')和(_table_suffix选择
MAX(uid.key)作为keyname,
作为用户id的最大值(uid.value.value.string\u value),
用户\u dim.app\u info.app\u实例\u id作为app\u id
从…起
`表名*`,
UNNEST(用户维度用户属性)作为uid,
UNNEST(user\u dim.user\u属性)作为状态
哪里
uid.key=“持久用户id”
和status.key=“status”
和status.value.value.string_value=“活动”
和(_表_后缀>='20180101')
和(_table_suffixSELECT
MAX(uid.key)作为keyname,
作为用户id的最大值(uid.value.value.string\u value),
用户\u dim.app\u info.app\u实例\u id作为app\u id
从…起
`表名*`,
UNNEST(用户维度用户属性)作为uid,
UNNEST(user\u dim.user\u属性)作为状态
哪里
uid.key=“持久用户id”
和status.key=“status”
和status.value.value.string_value=“活动”
和(_表_后缀>='20180101')
和(_table_后缀,谢谢,这似乎非常有效!快速提问,为什么需要取消两次(user_dim.user.properties)的测试?在我看来,我想要提取的数据似乎在同一个数组中,所以这是如何工作的还不完全清楚。您需要在同一行的不同列中使用某种is_活动值和user_id来进行筛选,对吗?UNNEST从数组元素创建行,所以“status”和“user_id”值最终在同一列中。第二个UNNEST为相同的数据创建第二列。我认为不使用第二个UNNEST也可以获得相同的结果,只需对单个UNNEST的结果进行某种聚合和筛选,但它不一定会更快或更可读。谢谢,这似乎非常有效!Quick问题,为什么需要取消两次(user\u dim.user.properties)的测试?在我看来,我想要提取的数据似乎在同一个数组中,所以这是如何工作的还不完全清楚。您需要在同一行的不同列中使用某种is_活动值和user_id来进行筛选,对吗?UNNEST从数组元素创建行,所以“status”和“user_id”值最终在同一列中。第二个UNNEST为相同的数据创建第二列。我认为不使用第二个UNNEST也可以获得相同的结果,只需对单个UNNEST的结果进行某种聚合和过滤,但它不一定更快或更可读。
SELECT
MAX(uid.key) AS keyname,
MAX(uid.value.value.string_value) AS user_id,
user_dim.app_info.app_instance_id AS app_id
FROM
`tableName_*`,
UNNEST (user_dim.user_properties) AS uid,
UNNEST (user_dim.user_properties) AS status
WHERE
uid.key = "persistent_user_id"
AND status.key = "status"
AND status.value.value.string_value = "Active"
AND (_table_suffix >= '20180101')
AND (_table_suffix <= '20180228')
GROUP BY
app_id