BigQuery查询事件表

时间:2019-05-30 08:28:14

标签: sql google-bigquery standard-sql

目标:要对具有event_name ='Wallet'的用户进行计数

问题:我将查询结果限制为100以进行检查,因此预期结果必须为100,但是当我使用count(params.value.string_value)时,它显示124。

代码SELECT count(params.value.string_value) FROM "myproj.analytics_197163127.events_20190528",UNNEST(event_params) as params where event_name ='Wallet' and params.key = 'UserId' limit 100

预期结果:如果查询返回100条记录,则计数应为100,但如何显示124?

希望问题很清楚

2 个答案:

答案 0 :(得分:2)

HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) resp; if(request.getHeader("Authorization")==null){ response.setHeader(HttpHeaders.WWW_AUTHENTICATE,"Basic"); response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); } else{ String credentials = request.getHeader("Authorization"); } 应用于查询产生的结果集。

您的查询是没有limit的聚合查询。这样的聚合总是 返回一行。因此,group by不会影响结果。

如果您想在结果集中看到limit,请使用CTE或子查询:

100

答案 1 :(得分:1)

查询显示100条记录,因为末尾有100条记录:

SELECT event_date,event_timestamp,event_name, params.value.string_value 
FROM myproj.analytics_197163127.events_20190528, UNNEST(event_params) as params 
where event_name ='Wallet' and params.key = 'UserId' 
limit 100

将其删除,然后再次检查。

LIMIT 100指定要从SQL语句返回的行数。它不会影响查询中的COUNT()。因此,两者之间存在差异:

select count(*) from table limit 100 

这将返回带有表中行数的单个值。另一方面:

select count(*) from (select * from table limit 100) 

这将返回100(如果表中的行超过100,否则将返回表中的行数)