Google BigQuery_データセット内のテーブル一覧取得
背景
業務でBigQueryを使うことが多いのだが、その中で「テーブル名の一覧」と「最終更新日時」を知りたいことが多々ある。
テーブル名一覧の取得は言わずもがな頻発する。
最終更新日が気になるケースとしては、具体的にはTableau Cloudにパブリッシュデータソースを作り、BQ内のviewと接続する。Tableau Cloudでデータソースの自動更新をバッチ処理設定しておくケースが該当する。
稀にデータ更新は成功したのに中身のデータが最新の状態になっていないことがあり、BQテーブルの更新タイミングとデータソースの更新タイミングが合致していないことが疑われる。テーブルの更新タイミングを一つずつBQコンソールから確認するのは手間なので、一括で取得したくなるわけだ。
クエリで取得してみる
具体的には以下のクエリを使う。ポイントはアンダーバーが前後に2つずつあること、そしてTABLESは全て大文字なことである。
SELECT *
FROM project.dataset.__TABLES__
ORDER BY table_id
結果は以下のようになる。実際には縦にずらっと並んで出てくる。
これだけでも十分便利なのだが、日時が日付形式で出てこないのでちょっと不満。
日時に変換
テーブル作成日時と最終更新日時の項目は、整数かつ桁数が多い。これはUNIX TIMEと考えるのが妥当だろう。
そしてUNIX TIMEには秒単位とミリ秒単位がある。数えてみると13桁。うん、ミリ秒だ。
てなわけで軽くググって日付変換のCAST文を発見。適用してみる。
SELECT
table_id
,CAST(FORMAT_TIMESTAMP('%Y-%m-%d %H:%M:%S', TIMESTAMP(creation_time), 'Asia/Tokyo') as DATETIME) AS created_at
,CAST(FORMAT_TIMESTAMP('%Y-%m-%d %H:%M:%S', TIMESTAMP(last_modified_time), 'Asia/Tokyo') as DATETIME) AS last_modified_at
,row_count
FROM project.dataset.__TABLES__
ORDER BY table_id
少々長いが、要はタイムスタンプを頑張ってJSTで日時に変換しているだけである。結果は以下のようになる。
これで大分見やすくなった。
(おわり)
この記事が気に入ったらサポートをしてみませんか?