【问题标题】:Creating table with repeated field manually手动创建具有重复字段的表
【发布时间】:2017-06-26 10:26:10
【问题描述】:

我想在 BigQuery(旧版)中按以下格式创建表:

-- +---------+---------+
-- | Var1    | Var2    +
-- +---------+---------+
-- | x       | 1       +
-- |         | 2       +
-- |         | 3       +
-- | y       | 1       +
-- +---------+---------+

下面的代码可以逐行手动创建表格。我正在寻找指定值 1,2,3 属于 var1 等中的 x 的代码。

SELECT SPLIT(Var1x) AS Var1 
FROM (SELECT 'x,y' AS Var1x)

如果有一种方法可以将列转换为一个重复的字段,也可能会有所帮助。像你有 y 列和 x1 - x5 列,我们可以将它们转换为一个 x 重复列。有什么想法吗?

【问题讨论】:

  • 您有问题吗?
  • 问题是是否有办法做到这一点...我的代码示例可以逐行手动创建一个表,但我不知道如何指定 var2 是重复列和值 1-2-3 属于 var1 x。

标签: sql r google-bigquery


【解决方案1】:
#legacySQL
SELECT 
  Var1, NEST(Var2) AS Var2
FROM 
  (SELECT 'x' AS Var1, 1 AS Var2),
  (SELECT 'x' AS Var1, 2 AS Var2),
  (SELECT 'x' AS Var1, 3 AS Var2),
  (SELECT 'y' AS Var1, 1 AS Var2)
GROUP BY Var1

请注意 - 为了保留此结构 - 您需要在 Web UI 中选择 destination table 并选中 allow large result 并取消选中 flatten results - 否则 BigQuery Legacy SQL 会自动扁平化大多数外部查询输出

另一种验证方式是计算行数(应该是两行而不是四行)

#legacySQL
SELECT COUNT(1) FROM (
  SELECT 
    Var1, NEST(Var2) AS Var2
  FROM 
    (SELECT 'x' AS Var1, 1 AS Var2),
    (SELECT 'x' AS Var1, 2 AS Var2),
    (SELECT 'x' AS Var1, 3 AS Var2),
    (SELECT 'y' AS Var1, 1 AS Var2)
  GROUP BY Var1
)  

虽然上面确实回答了您最初的问题 - 我强烈建议使用标准 SQL - 请参阅下面的相应版本:

#standardSQL
SELECT 'x' as Var1, [1,2,3] as Var2 UNION ALL
SELECT 'y', [1]  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 2022-08-03
    • 1970-01-01
    • 2018-08-22
    相关资源
    最近更新 更多