【问题标题】:BigQuery remove duplicate column names when joining on FULL JOIN + USINGBigQuery 在加入 FULL JOIN + USING 时删除重复的列名
【发布时间】:2019-11-08 20:21:53
【问题描述】:

我有两个 BigQuery 表,它们的列名完全相同,需要连接在一起,同时保留正确的统计信息名称。在我的实际示例中,我的表名为offensivedefensive,它们包含球队的进攻和防守篮球统计数据。两个表中的列名是:

team, game, fga, fgm, ast, blk, stk

我想加入teamgame 列上的列。我找到了the following example,它看起来非常适合我的用例,但是我不喜欢的一件事是该示例没有删除重复的连接列(示例中的公司、供应商、交易)。加入后,我不想在我的表中出现teamgame 中的两个。我试过了:

SELECT offensive, defensive EXCEPT (team, game)
FROM offensive FULL JOIN defensive
USING (team, game)

...并且收到以下Syntax error: Unexpected keyword EXCEPT at [40:39] 错误。有关如何删除重复的连接列的任何想法都会有所帮助。

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    以下是 BigQuery 标准 SQL

    #standardSQL
    SELECT team, game, 
      (SELECT AS STRUCT offensive.*  EXCEPT (team, game)) AS offensive,
      (SELECT AS STRUCT defensive.*  EXCEPT (team, game)) AS defensive
    FROM offensive FULL JOIN defensive
    USING (team, game)
    

    这将导致以下架构

    team game offensive.fga offensive.fgm offensive.ast offensive.blk offensive.stk defensive.fga defensive.fgm defensive.ast defensive.blk defensive.stk    
    

    类似

    [
      {
        "team": "1",
        "game": "1",
        "offensive": {
          "fga": "1",
          "fgm": "2",
          "ast": "3",
          "blk": "4",
          "stk": "5"
        },
        "defensive": {
          "fga": "21",
          "fgm": "22",
          "ast": "23",
          "blk": "24",
          "stk": "25"
        }
      }
    ]
    

    【讨论】:

    • 这非常有用,谢谢。如果我可能会问,AS STRUCT 函数在这里做了什么使这个操作工作而我没有?
    • 同时,AS STRUCT 将输出列列表“组合”成一个结构列 (RECORD)
    • 当然可以。老实说,BQ 的支持有时太好了,因为我什至还没来得及接受它就得到了答案,然后我不记得再回来了。
    猜你喜欢
    • 1970-01-01
    • 2020-03-31
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    • 2017-05-29
    • 1970-01-01
    • 2016-02-28
    • 1970-01-01
    相关资源
    最近更新 更多