BigQuery - 按第二个表中的值过滤数据

时间:2017-04-18 13:36:13

标签: mysql google-bigquery

我需要从一个表中过滤Google Analytics数据,并按第二个表中的数据进行过滤。

我使用的查询如下:

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_ids列表(并且只是table_1中的一小部分)。 我想要做的是通过table_2中包含的login_id过滤table_1中的数据,因此当我查询table_1时,只返回那些login_ids。 感谢所有人的帮助。

编辑:

上面的查询返回一个如下所示的表(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_ids与table_2的数据匹配。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

无论如何,内部联接是您需要的解决方案。