bigquery объединяет две таблицы по метке времени и другому столбцу

#sql #google-bigquery

#sql #google-bigquery

Вопрос:

У меня есть две таблицы, как показано ниже:

 TableA: host, timestamp, type
TableB: host, timestamp, type
  

Я хотел бы объединить эти две таблицы по столбцу хоста и метке времени. Он возвращает значение null, потому что обычно между метками времени существует разрыв в несколько секунд, поэтому они не совпадают. Поэтому я хочу объединить их на основе хоста и метки времени (только дата, час и минуты).
столбец метки времени выглядит следующим образом : 2020-11-06 23:33:03.448 UTC

Я создал запрос ниже, который основан только на часах, я хотел бы включить день, минуты (и, возможно, секунду).

   with tableA as (
      SELECT
      EXTRACT(HOUR from timestamp) as hour,
      ...
  ),
  tableB as (
      SELECT
      EXTRACT(HOUR from timestamp) as hour,
      ...
  )
  SELECT * 
  FROM tableA 
  JOIN tableB 
  USING(host,hour)
  

Ответ №1:

Используйте timestamp_trunc() :

 with tableA as (
      SELECT TIMESTAMP_TRUNC(timestamp, HOUR ) as hour,
             ...
     ),
     tableB as (
      SELECT TIMESTAMP_TRUNC(timestamp, HOUR ) as hour,
             ...
     )
SELECT * 
FROM tableA JOIN
     tableB 
     USING(host, hour);