概要
BigQueryでつまづきやすい、ARRAYやSTRUCT。これらのデータにアクセスする方法は比較的記事が散見されるもののテーブル作成やデータ挿入方法については以外と記事が少ないので、自分のためにもまとめておく。
テーブル作成(CREATE)
CREATE TABLE `test_dataset.test_table` --作成するテーブルを指定
(
t TIMESTAMP, --通常のカラム
a ARRAY<INT64>, --ARRAY型
s STRUCT<v1 INT64,v2 STRING>, --STRUCT型
key_value_array ARRAY<STRUCT<key STRING,int_value INT64, float_value FLOAT64, string_value STRING>> --ARRAY<STRUCT>型,
)
配列型は、ARRAY<変数型>
構造体型は、STRUCT<列1 変数型,列2 変数型,…>
構造体の配列型はそれらを組み合わせて ARRAY<STRUCT<列1 変数型,列2 変数型,…>>
と指定すれば良い。
テータ挿入(INSERT INTO)
INSERT INTO `test_dataset.test_table`
select
CURRENT_TIMESTAMP() as t,
[1,2,3,4] as a,
struct(123,'test') as s,
[struct('p1',123,CAST(null as FLOAT64),CAST(null as STRING)),struct('p2',CAST(null as INT64),11.1,'hoge')] as params,
配列型は [a,b,c,d]
のようにブラケット(大括弧)[]で囲む
構造体型は struct(a,b)
のようにstruct+カッコ()で囲む
構造体の配列型はそれらを組み合わせて [struct(a,b,c),struct(d,e,f),…]
のように記載すれば良い。
なお、構造体要素にnull値を投入する時はINT64型以外の場合はnull値自体の型をcastしないとエラーが出る点は要注意。