【问题标题】:How can I get comma delimited values into new row in BigQuery? [duplicate]如何将逗号分隔的值放入 BigQuery 的新行中? [复制]
【发布时间】:2022-01-01 03:51:16
【问题描述】:

我已使用 SyncWith 插件将我的 BigQuery 数据库导入电子表格。在我的列中,我有一个 CSV,我想将这些值放入新行中。

这就是我所拥有的

model alarm
X 1,34,60,1000
Y 2,4,5,900,1000
Z 1

这就是我需要的

model alarm
X 1
X 34
X 60
X 1000
Y 2
Y 4
Y 5
Y 900
Y 1000
Z 1

我找到了以下示例 here,但不幸的是,它对我不起作用,因为 BigQuery 无法识别“CROSS APPLY”。以下代码是否有 BigQuery 替代方案。

 SELECT A.[id],  
     Split.a.value('.', 'VARCHAR(100)') AS String  
 FROM  (SELECT [id],  
         CAST ('<M>' + REPLACE([string], ',', '</M><M>') + '</M>' AS XML) AS String  
     FROM  TableA) AS A CROSS APPLY String.nodes ('/M') AS Split(a);

【问题讨论】:

    标签: sql csv google-bigquery


    【解决方案1】:

    试试这个:

    with mytable as (
        select "X" as model, "1,34,60,1000" as alarm union all 
        select "Y", "2,4,5,900,1000" union all 
        select "Z", "1"
    )
    select model, newalarm
    from mytable, unnest(split(alarm)) as newalarm
    

    【讨论】:

    • 感谢您的回答,但不幸的是这不是我想要的。在这里,我必须专门选择警报。我给出的例子只是为了让我的问题变得简单。理论上,我最多可以收到 1000 个警报,而且每次警报都可能不同。
    • 没有特定的警报选择。只有这部分是答案:select model, newalarm from mytable, unnest(split(alarm)) as newalarm。以上只是用测试数据填充mytable
    • 抱歉,我会试一试。如何更改它以使用多个列?现在我只有警报。假设我添加了一个带有alarmActive 的新列,它也是逗号分隔
    • 多个逗号分隔的列更复杂,值得单独提问。确保也提供示例输入数据和预期结果。
    猜你喜欢
    • 2018-02-10
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-04
    相关资源
    最近更新 更多