2

好的,我是 SQL 和 Big Query 的新手,遇到了一个不明确的列名错误。我检查了堆栈溢出的其他答案,但找不到/理解我的问题的答案。所以我得到:错误:2.40 - 2.68:不明确的列名 subreddit。

对于这段代码(我改编自另一个人对类似事物的分析):

#legacySQL

    # Creating list of number of users who authored at least 10 posts in pairs of subreddits: 
    SELECT t1.subreddit, t2.subreddit, SUM(1) as NumOverlaps
    FROM (SELECT subreddit, author, COUNT(1) as cnt 
         FROM (TABLE_QUERY([fh-bigquery:reddit_comments],
     'table_id CONTAINS "2017_" AND length(table_id) >= 5'))
         GROUP BY subreddit, author HAVING cnt > 5) t1

    JOIN (SELECT subreddit, author, COUNT(1) as cnt 
         FROM(TABLE_QUERY([fh-bigquery:reddit_comments],
     'table_id CONTAINS "2017_" AND length(table_id) >= 5'))
         GROUP BY subreddit, author HAVING cnt > 5) t2

    ON t1.author=t2.author
    WHERE t1.subreddit!=t2.subreddit
    GROUP BY t1.subreddit, t2.subreddit

谢谢你的帮助!

4

2 回答 2

0

您的 select 语句SELECT t1.subreddit, t2.subreddit, SUM(1) as NumOverlaps在输出中引入了三个字段-其中前两个将具有相同的名称-subreddit因此是错误消息Ambiguous column name subreddit.

要解决歧义,只需使用下面示例中的别名
SELECT t1.subreddit as t1_subreddit, t2.subreddit as t2_subreddit, SUM(1) as NumOverlaps

就这么简单!因此,假设这是您查询中的唯一问题 - 它现在应该可以工作了!

于 2018-03-22T00:43:37.913 回答
0

你得到的错误一定是暂时的原因(可能是 BigQuery 缓存问题),因为我成功地运行了相同的查询,允许大结果,启用展平结果并指定目标表。但是,结果并不正确,因为列出了所有子版块。原因一定是使用了连接 2 个相同表的 Join 子句(这也可能触发了不明确的列名错误),BigQuery 必须进行交叉连接,因此结果相乘。

我建议您使用目标公共数据集的结果创建一个表,如下所示:

SELECT subreddit, author, COUNT(1) as cnt FROM(TABLE_QUERY([fh-bigquery:reddit_comments], 'table_id CONTAINS "2017_" AND length(table_id) >= 5')) GROUP BY subreddit, author HAVING cnt > 5'

然后应用不同的查询,仅使用一个表(查询公共数据集的结果)来获得您想要的结果。建议优化您的查询并避免使用 SQL 反模式

于 2018-03-22T00:25:15.080 回答