query template
#standardSQL
-- outline
select
meta
table wild card
viewが含まれるとエラーになる
select
_table_suffix as table_suffix_ymd
, count(1) as record_count
from dataset.table_*
group by 1
#standardSQL
-- table record counts (日付テーブル用、じゃなくても集計対象にはなる)
select
_table_suffix as table_suffix
, regexp_extract(_table_suffix, '(.*)_\\d{8}') as table_name
, regexp_extract(_table_suffix, '.*_(\\d{8})') as ymd
, count(1) as record_count
from
`for_wild_card.*`
group by 1,2,3
timestamp
#standardSQL
select
-- not date_add
timestamp_add(timestamp('yyyy-mm-dd'), interval n part)
, format_timestamp("%F %X", timestamp('yyyy-mm-dd hh:mm:ss'))
array
unnest
#standardSQL
-- five record
with t as (
-- [1,3,5]
select 1 as id, generate_array(1, 5, 2) as ary union all
select 2 as id, [6,7] as ary
)
select
t.id
, ary2
from t
cross join unnest(t.ary) as ary2
aggregation
#standardSQL
-- length, records value to array, concat arrays
with t as (
select 1 as id, 1 as v, [1, 2, 3] as ary union all
select 2 as id, 2 as v, [1, 2, 3] as ary union all
select 2 as id, 2 as v, [1, 2] as ary union all
select 2 as id, 3 as v, [4] as ary
)
select
id
, sum(array_length(ary)) as total_length
, array_agg(v order by v desc) as v_ary
, array_agg(distinct v order by v) as v_uniq_ary
, array_concat_agg(ary) as concat_ary
from t
group by id
json(struct, int64, array)
#standardSQL
-- nested struct, int64
create temporary function to_struct(json_str string)
returns struct<
key int64
, nested struct<key2 string>
>
language js as """
return JSON.parse(json_str)
"""
;
with t as (
-- 2^63 -1
-- 9223372036854775807
-- 9223372036854776000 <- JSON.parsed (over 64bit)
-- 2^62-1, js number is double
-- 4611686018427387903
-- 4611686018427387904 <- JSON.parsed (not equal)
select '{"key": 4611686018427387903, "nested": {"key2": "string_value"}}' as json_str
)
select
json_str
, cast(json_extract(json_str, '$.key') as int64) as json_value
, json_extract(json_str, '$.nested.key2') as json_quoted_value
, json_extract_scalar(json_str, '$.nested.key2') as json_scalar_value
, to_struct(json_str) as bq_struct
from t
#standardSQL
-- array of struct
create temporary function to_ary(json_str string)
returns array<struct<
key int64
>>
language js as """
return JSON.parse(json_str)
"""
;
with t as (
select '[{"key": 1}, {"key": 2}]' as json_str
)
select
json_str
, to_ary(json_str) as bq_ary
from t
create table using bq query
cat .sql | bq -q --apilog=apilog.log query \
--destination_table=dataset.table \
--allow_large_results \
--use_legacy_sql=false \
--replace=true