BigQuery - 按第二个表中存在的值过滤数据
Posted
技术标签:
【中文标题】BigQuery - 按第二个表中存在的值过滤数据【英文标题】:BigQuery - filter data by values present in a second table 【发布时间】:2017-04-18 13:36:12 【问题描述】:我需要从一个表中过滤谷歌分析数据,并按第二个表中的数据进行过滤。
我使用的查询如下:
SELECT
fullvisitorid,visitNumber,
max(case when hits.customdimensions.index = 30 then
hits.customdimensions.value end) login_id
FROM [table_1]
GROUP EACH BY fullvisitorid,visitNumber
我有第二个表 table_2,其中包含一个特别感兴趣的 login_id 列表(它们只是 table_1 中的一小部分)。 我想做的是通过table_2中包含的login_id过滤table_1中的数据,所以当我查询table_1时只返回那些login_id。 感谢所有帮助。
编辑:
上述查询返回一个如下所示的表(来自 table_1 的数据):
Row fullvisitorid visitNumber login_id
10 8812091098272426348 1
11 8812203501855327426 3
12 8813941868399328770 15
13 8814004579217219789 1
14 8814073006630329047 102 6kena7aeq1sc312porfhyf
15 8814073006630329047 103 6kena7aeq1sc312porfhyf
16 8814200803368464684 257
17 8814344603188097744 1
18 8814410578161636902 94
Table_2 如下所示:
Row login_id
1 user_id
2 00015mY5EVDsSgFlDDq3EU
3 006rcSwDU1r8fiGnCIBCOZ
4 008ZM8TeCwo3V8Lcyip3rT
5 008nzvMgSF4Ir94ja04lXl
6 00DFrm85sK0tDUm96Kedkw
7 00GLa0WE0sq1Np4bvtmL9j
当我测试以下内容时,我收到一条错误消息,上面写着“无法对重复字段 hits.customdimensions.value 进行分区”。我怀疑使用 case/end 可能会把事情搞砸。
SELECT
fullvisitorid,visitNumber,
max(case when hits.customdimensions.index = 30 then
hits.customdimensions.value end) as login_id
FROM [table_1] as t1
inner join [table_2] as t2 on t2.login_id
= t1.hits.customdimensions.value
GROUP EACH BY fullvisitorid,visitNumber
感谢任何帮助。期望的结果是只返回 table_1 中 login_id 与 table_2 匹配的数据。
【问题讨论】:
【参考方案1】:在下面尝试(它适用于 BigQuery Legacy SQL,因为它是您的问题所在)
#legacySQL
SELECT
fullvisitorid,
visitNumber,
t2.login_id AS login_id
FROM (
SELECT
fullvisitorid,
visitNumber,
MAX(CASE WHEN hits.customdimensions.index = 30
THEN hits.customdimensions.value END
) AS login_id
FROM [table_1]
GROUP BY fullvisitorid, visitNumber
) AS t1
JOIN [table_2] AS t2
ON t2.login_id = t1.login_id
【讨论】:
【参考方案2】:select
t1.fullvisitorid,
t1.visitNumber
FROM
(SELECT
fullvisitorid,visitNumber,
max(case when hits.customdimensions.index = 30 then
hits.customdimensions.value end) login_id
FROM [table_1]) as t1
inner join [table_2] as t2 on t2.login_id = t1.login_id
GROUP EACH BY fullvisitorid,visitNumber
或许应该是
inner join [table_2] as t2 on t2.login_id = t1.hits.customdimensions.value
无论如何,内部连接是您需要的解决方案。
【讨论】:
感谢您的帮助,感觉好像我到了某个地方;但现在它抛出了“无法加入重复字段 hits.customDimensions.value”。有什么想法吗? 嗯,实际上你可以尝试加入子查询(更新了答案)。可能您还需要将 GROUP EACH BY 移动到子查询以上是关于BigQuery - 按第二个表中存在的值过滤数据的主要内容,如果未能解决你的问题,请参考以下文章