LEFT OUTER JOIN Ошибка при создании подзапроса для bigquery - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь вывести MAL, WAL и DAU из таблицы событий на моем bq ...

Я создаю запрос на поиск DAU и с ним нахожу WAU и MAU, но он не работает,я получил эту ошибку:

LEFT OUTER JOIN cannot be used without a condition that is an equality of fields from both sides of the join.

Это мой запрос

WITH dau AS (
  SELECT 
      date, 
      COUNT(DISTINCT(events.device_id)) as DAU_explorer         
  FROM `workspace.event_table` as events
  GROUP BY 1
)

SELECT  
  date, 
  dau, 
  (SELECT 
      COUNT(DISTINCT(device_id))  
     FROM `workspace.event_table` as events
     WHERE events.date BETWEEN DATE_ADD(dau.date, INTERVAL -30 DAY)  AND dau.date
     ) AS mau,
  (SELECT 
      COUNT(DISTINCT(device_id)) as DAU_explorer  
    FROM `workspace.event_table` as events
    WHERE events.date BETWEEN DATE_ADD(dau.date, INTERVAL -7 DAY)  AND dau.date
       ) AS wau
FROM dau

Где моя ошибка?Не возможно запустить такие подзапросы на bq?

1 Ответ

1 голос
/ 15 мая 2019

Попробуйте вместо этого:

WITH data AS (
  SELECT DATE(creation_date) date, owner_user_id device_id
  FROM `bigquery-public-data.stackoverflow.posts_questions` 
  WHERE EXTRACT(YEAR FROM creation_date)=2017
)

#standardSQL
SELECT DATE_SUB(date, INTERVAL i DAY) date_grp
 , COUNT(DISTINCT IF(i<31,device_id,null)) unique_30_day_users
 , COUNT(DISTINCT IF(i<8,device_id,null)) unique_7_day_users
FROM `data`, UNNEST(GENERATE_ARRAY(1, 30)) i
GROUP BY 1
ORDER BY date_grp
LIMIT 100
OFFSET 30

И если вы ищете более эффективное решение, попробуйте приблизительные результаты .

...