【问题标题】:Join BQ tables using a comparator使用比较器连接 BQ 表
【发布时间】:2015-12-22 04:43:30
【问题描述】:

我被这个查询卡住了!我有一张表Logs.Customer_Internet_Activity_Information,其中包含客户的测试数据。表中有一个IP地址。在另一张桌子上 Logs.IP 有一个 startIpnum 和一个 endIpNum 和一个 localIDstartIPnum 是该范围内的较低 IP 地址,endIpNum 是该范围内的最大 IP 地址。每个范围都有一个本地 ID,它引用一个城市、国家等......

我的查询试图在 Range 中查找客户 IP 以查找本地 ID。

Select t1.email ,t1.IP , t2.Local_ID

from [TablewithcustomerIP address] as t1 cross join [table with IP ranges] as t2

where t1.IP between t2.startIpNum and t2.endIpNum

【问题讨论】:

  • 您能否评论一下您的查询当前执行的操作,以及这与您期望的行为有何不同?
  • 即使我切换表时也会出现此错误... 3.96 - 3.168: JOIN 运算符的右侧表必须是一个小表。如果左侧表较小,则切换表,如果两个表都大于goo.gl/wXqgHs 中描述的最大值,则使用 JOIN EACH。
  • 您是否尝试按照错误提示将“JOIN”更改为“JOIN EACH”?或者,如果您的 t1 较小,请尝试反转它们?你说当你切换表时你会得到这个......当你不切换它们时,你会得到什么?
  • 当我在连接错误消息中反转表时:错误:3.74 - 3.167:JOIN 运算符的右侧表必须是一个小表。如果左侧表较小,则切换表,如果两个表都大于goo.gl/wXqgHs 中描述的最大值,则使用 JOIN EACH。如果我尝试加入每个它需要一个 ON 子句..这两个表之间没有链接变量..
  • hmmmm...对此不确定,但我认为您可以执行“ON t1.IP between...”并让它工作...如果这不起作用,让我知道,可能有一种方法可以使用子查询来获取您想要的内容

标签: join google-bigquery


【解决方案1】:

所以你遇到的直接问题是谷歌不允许cross join each

这有点小技巧,但如果性能对您来说不是问题,您可以尝试:

select
  t1.email
  ,t1.IP
  ,t2.Local_ID

from (select true as dummy, email, Ip from [TablewithcustomerIP address]) as t1
inner join each (select true as dummy,Local_ID, startIpNum, endIpNum from [table with IP ranges]) as t2
  on t2.dummy = t1.dummy

where t1.IP between t2.startIpNum and t2.endIpNum

但是,查询可能需要很长时间才能完成,如果有的话。更好的解决方案是加入您的where 条件,但不幸的是,目前不可能。我热切地等待 Google 添加自定义连接条件的那一天,这可能是我最怀念的 SQL 功能。

【讨论】:

  • 超时...查询失败错误:请求超时。请再试一次。作业编号:practicum-2015:job_UAMbi8hq_RdeBTmED9Ux6_6Akl0
  • 我担心这可能会发生。您能否估计两个表的大小以及您希望 t1 中的 IP 地址落入 t2 中的多少范围?
  • @ticketcitymr 另一个可能有所帮助但高度依赖数据的方法是使用数学创建“子​​网”属性(将包含 IP 的前 2 部分),以及然后将 THAT 与连接上的 = 匹配。从那里,where 子句中的 between 可以工作。您需要将 IP 除以 (256*256) 以获得 IP 的前 2 部分,然后将其与 =... 上的范围相匹配,但这实际上取决于您在第二张表中的范围.
  • IP 范围约 200 万的表,客户 IP 地址约 100 万的表。客户 Ips 跨越 98% 的 IP 范围
  • 我的意思是单个 IP 可能落入的范围数,以估计结果集的大小。也就是说,我对你能做什么没有更多的想法。 :-/
猜你喜欢
  • 1970-01-01
  • 2015-06-15
  • 2021-09-27
  • 1970-01-01
  • 2016-02-14
  • 1970-01-01
  • 2013-04-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多