Google bigquery 如何覆盖postgresql的数据请求?

Google bigquery 如何覆盖postgresql的数据请求?,google-bigquery,Google Bigquery,我有这个疑问 select count(distinct mac) from t out where radar_id = '32' and log_time >= '2018-08-18 00:00:00' and log_time < '2018-08-22 23:59:59' and mac not in (select mac from t as inn where out.log_time - interval '2 minutes' > in

我有这个疑问

select count(distinct mac)
from t out
where radar_id = '32'
  and log_time >= '2018-08-18 00:00:00'
  and log_time < '2018-08-22 23:59:59'
  and mac not in
      (select mac from t as inn where out.log_time - interval '2 minutes' > inn.log_time);
我把它改写成

select count(distinct mac)
from `test-from-frelance.123.sniffer_logs` out
where radar_id = '32'
  and log_time >= '2018-08-18 00:00:00'
  and log_time < '2018-08-22 23:59:59'
  and mac not in
      (select mac 
      from `test-from-frelance.123.sniffer_logs` as inn 
      where TIMESTAMP_SUB(out.log_time, interval 2 minute) > inn.log_time );
但我有一个错误:

如果没有连接两侧字段相等的条件,则不能使用左外连接

我不明白我哪里错了。如何解决这个问题


需要从桌子上拿什么?需要获取mac从“2018-08-18 00:00:00”到“2018-08-22 23:59:59”列日志时间中向db发送信息的不同设备包含设备发送信息时的信息,不包括间隔大于2分钟的设备。

下面是BigQuery标准SQL的简单示例

#standardSQL
SELECT COUNT(1) devices FROM (
  SELECT mac FROM (
    SELECT mac, 
      TIMESTAMP_DIFF(log_time, LAG(log_time) OVER(PARTITION BY mac ORDER BY log_time), MINUTE) delta
    FROM `test-from-frelance.123.sniffer_logs` out
    WHERE radar_id = '32'
      AND log_time >= '2018-08-18 00:00:00'
      AND log_time < '2018-08-22 23:59:59'
  )
  GROUP BY mac
  HAVING MIN(delta) > 2  
)
在这里,我们首先计算给定mac的连续条目之间的距离/间隔,然后过滤掉至少有一个小于/等于2分钟的条目,最后计算幸存的mac


您可以根据您的具体情况调整逻辑以满足您的需要

您的mac不在select中。。。正在由BQ引擎转换为左连接,这在BigQuery中有一些限制,反映在您看到的错误中。重写它使其工作并没有什么大不了的,但为了不浪费每一次时间,您应该在这里展示您试图实现的逻辑。显然,我们可以对逻辑进行反向工程——我做到了——但到目前为止,这对我来说没有多大实际意义——因此,如果你能给出清晰的逻辑——将非常好。请澄清并排除发送信息少于2分钟的设备。顺便问一下,为什么请求失败?在postgresql中这是正确的。你读过我上面的第一条评论吗?BTW.如果我的答案有帮助——考虑投票并接受:OYES我读不懂为什么BQ引擎翻译了我的查询。它有什么好处。阅读什么来理解这个主题?如果需要,试着让MINdelta在1到10之间