25045


Input Dataを、col1でGROUP BYした結果を元に、col2をRepeated FieldにしてExport
Dataとして出力する方法が知りたい

# Input Data

[code]

    col1,col2
    "a",1
    "a",2
    "b",1
    
[/code]

# Export Data

[code]

    col1,col2_array
    "a",1,2
    "b",1
    
[/code]


CC BY-SA 3.0
2016-05-20T13:23:10.727
25044
2016-05-20T13:23:25.587
4361
question
google-bigquery
GROUP BYした結果をRepeated Fieldにする


# SQL

GROUP_CONCATで結合した後に、SPLITで再分割する  
GROUP_CONCATは文字列にしか使えないけど、数値の場合はSTRING()で変換すればOK

[code]

    SELECT
        col1,
        SPLIT(GROUP_CONCAT(STRING(col2), ","), ",") AS col2_array
    FROM
        [sample.groupconcat]
    GROUP BY
        col1
    
[/code]

col2の値をUNIQUEにしたい場合はUNIQUE()を追加すればOK

[code]

    SELECT
        col1,
        SPLIT(GROUP_CONCAT(STRING(UNIQUE(col2)), ","), ",") AS col2_array
    FROM
        [sample.groupconcat]
    GROUP BY
        col1
    
[/code]

ただ、QueryのResponseは通常FLATTENされるため、Repeated Filedとして維持したい場合は、Query実行時のFlatten
Resultsを外してやる必要があります。

[![BQ](https://i.stack.imgur.com/aScN7.png)](https://i.stack.imgur.com/aScN7.png)

bq queryの場合はこんな感じ

[code]

    bq query --flatten_results=false --allow_large_results=true --destination_table=cp300demo1:worktable.test 'SELECT col1, SPLIT(GROUP_CONCAT(STRING(UNIQUE(col2)), ","), ",") AS col2_array FROM [sample.groupconcat] GROUP BY col1'
    
[/code]


CC BY-SA 3.0
2016-05-20T13:23:25.587
25045
2016-05-20T13:23:25.587
4361
25044
answer