【问题标题】:BigQuery how to automatically handle "duplicate column names" on left joinBigQuery如何在左连接上自动处理“重复的列名”
【发布时间】:2019-10-28 23:26:16
【问题描述】:

我正在处理一个表数据集,该数据集 (a) 通常需要将表连接在一起,但 (b) 也经常有重复的列名。每当我按照以下方式编写查询时:

SELECT 
  t1.*, t2.*
FROM t1 
LEFT JOIN t2 ON t1.this_id = t2.matching_id

...我收到错误 Duplicate column names in the result are not supported. Found duplicate(s): this_col, that_col, another_col, more_cols, dupe_col, get_the_idea_col

我了解使用 BigQuery,在选择表时最好避免使用 *,但是我的数据表不是太大 + 我的 bigquery 预算很高,对所有列进行这些连接有助于数据探索.

BigQuery 是否可以在这些情况下自动处理/重命名列(例如,在列前加上表名),而不是不允许一起查询?

谢谢!

【问题讨论】:

    标签: sql google-bigquery


    【解决方案1】:

    最简单的方法是选择记录而不是列:

    SELECT t1, t2
    FROM t1 LEFT JOIN
         t2
         ON t1.this_id = t2.matching_id;
    

    这几乎就是我为即席查询所做的工作。

    如果您希望将结果作为列而不是记录(它们在结果中看起来没有太大差异),您可以使用EXCEPT

    SELECT t1.* EXCEPT (duplicate_column_name),
           t2.* EXCEPT (duplicate_column_name),
           t1.duplicate_column_name as t1_duplicate_column_name,
           t2.duplicate_column_name as t2_duplicate_column_name
    FROM t1 LEFT JOIN
         t2
         ON t1.this_id = t2.matching_id;
    

    【讨论】:

      【解决方案2】:

      BigQuery 是否可以在这些情况下自动处理/重命名列(例如,在列前加上表名),而不是不允许一起查询?

      BigQuery Legacy SQL 可以做到这一点 - 除非您处理数据类型或使用标准 sql 特有的某些函数/特性,否则它可以方便地进行数据探索

      那么下面

      #legacySQL
      SELECT t1.*, t2.*
      FROM table1 AS t1 
      LEFT JOIN table2 AS t2 
      ON t1.this_id = t2.matching_id   
      

      将生成输出,其中所有列名都将带有各自的别名前缀,例如 t1_this_idt2_matching_id

      【讨论】:

        猜你喜欢
        • 2021-10-25
        • 2016-04-16
        • 2022-12-31
        • 1970-01-01
        • 2017-11-06
        • 2019-03-15
        • 1970-01-01
        • 2021-09-25
        • 1970-01-01
        相关资源
        最近更新 更多