Google bigquery 基于user\u dim.user\u properties.key计算用户数

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

我对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”。这是我的疑问,任何帮助都将不胜感激

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_suffix
SELECT
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