Google Big Query:如何使用嵌套假连接选择较小表的子集?

时间:2015-04-02 12:57:13

标签: join google-bigquery

我想通过选择较小表的子集来解决与How can I join two tables using intervals in Google Big Query?相关的问题。 我想使用row_number函数Row number in BigQuery?使用@FelipeHoffa的解决方案 我创建了嵌套查询,如下所示:

SELECT a.DevID DeviceId,
       a.device_make OS
FROM
  (SELECT device_id DevID, device_make, A, lat, long, is_gps
   FROM [Data.PlacesMaster] WHERE not device_id is null and is_gps is true) a JOIN (select ROW_NUMBER() OVER() row_number,top_left_lat, top_left_long, bottom_right_lat, bottom_right_long, A, count from (SELECT top_left_lat, top_left_long, bottom_right_lat,bottom_right_long, A, COUNT(*) count from  [Karol.fast_food_box]
   GROUP BY (....?)
   ORDER BY COUNT DESC,
   WHERE row_number BETWEEN 1000 AND 2000)) b ON a.A=b.A
WHERE (a.lat BETWEEN b.bottom_right_lat AND b.top_left_lat)
  AND (a.long BETWEEN b.top_left_long AND b.bottom_right_long)
GROUP EACH BY DeviceId,
              OS

你能帮忙完成它吗?我不能通过“group by”来破坏较小的表,我需要在两个表之间保持一致,并且只选择具有lat的项目,长度来自MASTER.table,它们适合较小表格的给定边界框。我需要匹配lat,long to box,我的解决方案形式How can I join two tables using intervals in Google Big Query?仅适用于小型表(大约1000到2000行),因此这个问题。先感谢您。

1 个答案:

答案 0 :(得分:1)

看起来你一次应用两种方法:1)将一个表分成几行,然后在每个行上运行,2)包含一个字段," A",标记你的盒子和你的积分进入' region',你可以等于加入。方法(1)只是做了更多的相同的总工作(也是,它增加了复杂性),所以我建议关注方法(2),它将工作减少到每个&#39的二次方。 ;区域'而不是整个世界大小的二次方。

所以关键是你的A所承担的价值,以及每个A值携带多少点和盒子。例如,如果A是国家代码,它具有正确的逻辑结构,但是一旦您在任何一个国家/地区获得大量数据,它可能不会提供足够的帮助。如果它转到州或省代码,那将使你更进一步。量化的lat / long网格单元更好地概括。迟早你必须处理掉落在区域边缘的问题,这可能有些棘手。我自己会使用lat / long网格。

您使用的是什么值?在您的数据中,A值是多少(点数*箱数)?