Google bigquery 如何在Google Big Query中使用间隔连接两个表?
您已经确定了使用交叉连接在边界框/圆内查找区域的解决方案,如下所示:Google bigquery 如何在Google Big Query中使用间隔连接两个表?,google-bigquery,bounding-box,Google Bigquery,Bounding Box,您已经确定了使用交叉连接在边界框/圆内查找区域的解决方案,如下所示: SELECT A.ID, C.Car FROM Cars C CROSS JOIN Areas A WHERE C.Latitude BETWEEN A.LatitudeMin AND A.LatitudeMax AND C.Longitude BETWEEN A.LongitudeMin AND A.LongitudeMax 地址: 但是,由于基础架构上的限制,GBQ ops团队阻止了对大型数据集使用交叉连接。
SELECT A.ID, C.Car
FROM Cars C
CROSS JOIN Areas A
WHERE C.Latitude BETWEEN A.LatitudeMin AND A.LatitudeMax AND
C.Longitude BETWEEN A.LongitudeMin AND A.LongitudeMax
地址:
但是,由于基础架构上的限制,GBQ ops团队阻止了对大型数据集使用交叉连接。
因此,我的问题是:如何在大数据表A中找到另一组边界框(smalltable B)中的lat、Long集
我的以下查询已被阻止:
select a.a1, a.a2 , a.mdl, b.name, count(1) count
from TableMaster a
CROSS JOIN places_locations b
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 by ....
TableMaster为538 GB,清洁行数为6658716712行/绝对最小值
每个查询的位置在5到100kb之间变化
我已尝试根据模板调整假连接:
但是,查询需要一个小时,不会产生任何结果,也不会显示任何错误
你能找出一条可能的路径来解决这个难题吗?好的,所以假连接在最后是有效的,解决方案:
` select a.B, a.C , count(1) count from ( SELECT B, C, A, lat, long from [GB_Data.PlacesMasterA] WHERE not B
是空的吗
加入选择左上角、左上角、右下角、右下角、A from
[Places.placeABOXA]b在a.a上=b.a
哪里
a、 b.底部\右侧\横向和
b、 左上和a.长在b.左上和a.长之间
b、 右下角按b,C分组你看到的问题是交叉连接产生了太多的中间值60亿x 1k=6万亿 解决这一问题的方法是减少产出。如果您有其他可以应用的筛选器,则应在加入之前尝试应用这些筛选器。如果你能在加入之前加入一个小组或其中的一部分,那也会有帮助
此外,为了进行查找,可以先进行更粗粒度的查找。也就是说,如果您可以使用具有课程粒度区域的较小表进行初始交叉连接,那么您可以针对区域id上的较大表进行连接,而不是进行交叉连接。您有数据示例吗?我对places_locations areas特别感兴趣,以了解问题的拓扑结构。很抱歉打扰Jordi,它现在可以工作了,上周它没有工作,可能是由于部分块释放,谢谢你,所以在表a和表b中添加了带有字符串aHi Jordan的假列,谢谢你的回答,我在GBQ上执行这个查询时仍然存在问题,问题的拓扑结构是我需要从大型表设备ID和模型中提取,条件是它们的纬度和经度适合较小表的边界框。因此,我能够使用cross执行它,然后由于资源过度使用,它被google阻止,然后我使用fake join解决了这个问题,现在的问题是,当较小的表>大约1000时,然后查询运行了几天,并没有生成结果。我现在正在研究的解决方案是将较小的表拆分为每个表有1000行的较小表,这是另一个问题。我正在尝试实现@FelipeHofa解决方案[但同样没有结果,查询持续运行了几个小时这里有一个示例代码:'从select device_id DevID中选择a.device_mk OS,从[GB_Data.PlacesMasterAMarch]中选择a.device device_mk,a,lat,long,is_gps]……如果非设备id为空且gps为真,则连接选择上左左左左左左左右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右其中,A.A=b.A上的A.lat在b.bottom_right_lat和b.top_left_lat之间,A.long在b.top_left_long和b.bottom_right_long组之间,每个设备ID,OS;'