Запрос BigQuery, чтобы получить диаграмму для медианного первого ответа для любого тега в переполнении стека? - PullRequest
0 голосов
/ 16 января 2020

Основываясь на этом сообщении в блоге - как я могу получить график с квартальным временем, необходимым для получения ответа о переполнении стека для любого тега?

" Когда будет ответ переполнения стека: Как прогнозировать с помощью BigQuery"

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

1 Ответ

0 голосов
/ 16 января 2020
  • Сначала соедините таблицу вопросов с таблицей ответов - извлеките первый ответ.
  • Откажитесь от вопросов, на которые ответил тот же человек, который его опубликовал, - чтобы избежать повторных ответов "0".
  • Не делайте наивного AVG(), предпочитайте fhoffa.x.median() или EXP(LOG(AVG()))

Запрос:

WITH interesting_tags AS (
  SELECT * FROM UNNEST(SPLIT('google-bigquery,sql,javascript,tensorflow')) tag
)
, question_to_first_answer AS (
  SELECT c.tag, a.id
    , ARRAY_AGG(STRUCT(a.owner_user_id AS owner, a.creation_date AS ts, a.tags) LIMIT 1)[SAFE_OFFSET(0)] question
    , ARRAY_AGG(STRUCT(b.owner_user_id AS owner, b.creation_date AS ts) ORDER BY b.creation_date LIMIT 1)[SAFE_OFFSET(0)] first_answer
  FROM `fh-bigquery.stackoverflow_archive.201909_posts_questions` a
  LEFT JOIN `fh-bigquery.stackoverflow_archive.201909_posts_answers`  b
  ON a.id = b.parent_id 
  JOIN interesting_tags c
  ON c.tag IN UNNEST(SPLIT(a.tags, '|'))
  GROUP BY 1, 2
)

SELECT tag, quarter, COUNT(*) questions
  , ROUND(fhoffa.x.median(ARRAY_AGG(seconds))/3600,2) median_hours
  , ROUND(fhoffa.x.median(ARRAY_AGG(seconds)),2) median_seconds
FROM (
  SELECT tag, id,
    DATE(TIMESTAMP_TRUNC(question.ts, QUARTER)) AS quarter
    , TIMESTAMP_DIFF(first_answer.ts, question.ts, SECOND) seconds
  FROM question_to_first_answer
  WHERE first_answer.ts IS NOT null
  AND question.owner!=first_answer.owner
  ORDER BY seconds
)
GROUP BY tag, quarter
HAVING questions>10
ORDER BY tag, quarter DESC

enter image description here

enter image description here

...