Bigquery Stackoverflow - 按类别查询关闭的问题

Man*_*chs 5 google-bigquery

背景资料

正如这里所解释的,StackOverflow 问题可以由于多种原因而关闭,即重复的...偏离主题的原因...需要细节或清晰度需要更多的关注基于意见的

查询在 Google Cloud Platform 上的公共 StackOverflow Bigquery 上执行。这个 Bigquery 包含post_questionsvotes等表,第一个包含所有问题,第二个包含对这些问题的投票。

post_questions架构:

ID 标题 身体 accepted_answer_id answer_count 评论计数 ...

投票架构:

ID 创立日期 post_id 投票类型 ID

存在 16 个不同的vote_type_id,根据Meta上的这篇文章,vote_type_id 6 对应于关闭投票。在用户投了三票后,一个问题在 StackOverflow 上显示为已结束。因此,以下查询将返回 10 个已关闭问题的 id 和 URL。

SELECT q.id, CONCAT('/sf/', CAST(q.id as STRING)) as url,
FROM `bigquery-public-data.stackoverflow.posts_questions` AS q
JOIN `bigquery-public-data.stackoverflow.votes` AS v
  ON q.id = v.post_id
WHERE v.vote_type_id = 6
GROUP BY q.id
HAVING COUNT(*) >= 3
LIMIT 10
Run Code Online (Sandbox Code Playgroud)

我的问题是,是否可以根据接近投票的原因查询已结束的问题?例如,查询 250 个问题因重复而关闭?

Mik*_*ant 3

例如,[howto] 查询因重复而关闭的问题

您应该使用 PostHistory 表

帖子历史记录类型 ID

  • 10 = 帖子已关闭 - 帖子投票结束

评论:此字段将包含编辑帖子的用户发表的评论。如果 PostHistoryTypeId = 10,则此字段包含关闭原因的 CloseReasonId

  • 1 = 完全重复
  • 101 = 重复

所以,最后 - 查询是

SELECT q.id, CONCAT('/sf/', CAST(q.id as STRING)) as url,
FROM `bigquery-public-data.stackoverflow.posts_questions` AS q
JOIN `bigquery-public-data.stackoverflow.post_history` AS h
  ON q.id = h.post_id
WHERE h.post_history_type_id = 10
AND h.comment in ('1', '101')
GROUP BY q.id   
Run Code Online (Sandbox Code Playgroud)

我的问题是,是否可以根据关闭投票原因查询关闭的问题

SELECT CASE 
    WHEN comment IN ('1', '101') THEN 'Duplicate'
    WHEN comment = '102' THEN 'Off-topic'
    WHEN comment = '3' THEN 'Subjective and argumentative'
    WHEN comment = '4' THEN 'Not a real question'
    WHEN comment = '7' THEN 'Too localized'
    WHEN comment = '10' THEN 'General reference'
    WHEN comment = '20' THEN 'Noise or pointless (Meta sites only)'
    WHEN comment = '103' THEN '''Unclear what you're asking'''
    WHEN comment = '104' THEN 'Too broad'
    WHEN comment = '105' THEN 'Primarily opinion-based'
    ELSE 'Unknown'
  END close_reason,
  COUNT(DISTINCT q.id) cloased_posts
FROM `bigquery-public-data.stackoverflow.posts_questions` AS q
JOIN `bigquery-public-data.stackoverflow.post_history` AS h
  ON q.id = h.post_id
WHERE h.post_history_type_id = 10
GROUP BY close_reason
ORDER BY cloased_posts DESC    
Run Code Online (Sandbox Code Playgroud)

带输出

在此输入图像描述