BigQuery

BQ に JSON 配列入れれない件

[{"num":1,"text":"hoge"},{"num":2,"text":"fuga"}] みたいなファイルは bq load でエラーになる。 トップレベルがオブジェクトでなければダメなようだ。 やり方は2つあって、 {"row":...} みたいにラップしてオブジェクト化する方法 {"row":[{"num":1,"tex…

BQ の日付パーティションを月単位でフィルタしたい時

ts_column という TIMESTAMP 型のカラムでパーティショニングされたテーブルがあるとして、 WHERE FORMAT_TIMESTAMP('%Y-%m', ts_column, 'Asia/Tokyo') = '2023-05' これだと全件読みに行っちゃうようだが、 WHERE TIMESTAMP_TRUNC(ts_column, MONTH,'Asia/…

今日のBQ謎仕様 : require_partition_filter = true なテーブル同士をJOINしつつフルスキャンしたい時

パーティショニングしていて、require_partition_filter = true のテーブル同士をJOINする場合を考える。 そのようなテーブルをフルスキャンする場合、 WHERE partitioning_field IS NOT NULL ってやるが、これは JOIN するテーブルが一つまでだと動くが、2…

ruby の google-cloud-bigquery は ALTER TABLE SET OPTIONS に対応してない?

Google::Cloud::Bigquery.new.query( <<~QUERY ALTER TABLE dataset.table SET OPTIONS (expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 1 DAY)) QUERY ) このコード、動かないっぽい... Library/Ruby/Gems/2.6.0/gems/google-cloud-big…

ruby スクリプトから BigQuery の external table (google sheet) を SELECT できなくてハマった

Mac で自分の個人アカウントを使って ruby スクリプトの動作確認をしようとしたのだが、BigQuery の external table (google sheet) を SELECT するところで PERMISSION_DENIED が出て一晩ハマった。 「個人アカウントを使って」というのは gcloud auth appl…

BQ で最新日付のパーティションを select したい

データベースのスナップショットを日次バッチでBQに load している。 x日の朝に、その時点のスナップショットをx-1日のパーティションに入れている。 というケースで、その時点でBQに入っている最新のスナップショットを select したい。 そして、最新のスナ…

BQ: scripting を使ったクエリは view にできなかった...

「日付がもっとも新しいパーティションに対してクエリをかけたい」というケースがあった。 DECLARE pdate DATE; SET pdate = ( SELECT MAX(_PARTITIONDATE) FROM `some_dataset.partitioned_table` ); SELECT * FROM `some_dataset.partitioned_table` WHERE…

BigQuery の unnest の使い方メモ

Array型のカラムを含むテーブルに対するクエリ。 inner join query WITH sample AS ( select '1' as col1, ['a', 'b'] as col2 UNION ALL select '2' as col1, [] as col2 ) select * from sample, UNNEST (col2) as col2_unnest result Row col1 col2 col2_…