【问题标题】:Big Query: Ambiguous column name大查询:不明确的列名
【发布时间】:2018-08-13 03:31:24
【问题描述】:

好的,我是 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

感谢您的帮助!

【问题讨论】:

  • 我不认为这个查询会产生那个错误。
  • 但这就是它告诉我的,我直接从查询中复制了代码。它允许我运行查询,但在 1 分钟后停止并给我这个错误。
  • 您能否提供工作 ID - 我无法重现该查询的错误。
  • Job ID: reddit-analysis-of-subreddits:US.bquijob_50eb6a1e_161f63505d6 我认为这是要保存的地方
  • 更新:如果我为结果指定目标表,我会得到“错误:2.40 - 2.68:不明确的列名 subreddit。”。如果我没有指定目标表,它会运行大约一个小时,然后告诉我'响应太大而无法返回。考虑在您的作业配置中设置destinationTable 或(对于旧版SQL 查询)将allowLargeResults 设置为true。想法?

标签: sql google-bigquery reddit legacy-sql


【解决方案1】:

您遇到的错误一定是暂时的原因(可能是 BigQuery 缓存问题),因为我在允许大型结果、启用展平结果并指定目标表的情况下成功运行了相同的查询。 但是,结果并不正确,因为列出了所有子版块。原因一定是使用了 Join 子句,该子句连接了 2 个相同的表(这也可能触发了不明确的列名错误),并且 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'

然后应用不同的查询以仅使用一张表(查询公共数据集的结果)获得您想要的结果。 建议optimize 您的查询和avoid SQL anti-patterns

【讨论】:

    【解决方案2】:

    您的选择语句 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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-18
      • 2021-03-05
      • 1970-01-01
      相关资源
      最近更新 更多