【BigQuery】スキーマ定義の変更をミスったのでリカバリしたときのメモ

imu
·

基本的には以下を見れば分かるのですが、BQに慣れていないと難しかったのでメモ書き。

失敗したこと

  • bqコマンドでスキーマ定義をエクスポートする

  • ローカルでスキーマ定義を変更する(構造体にプロパティを追加

  • bqコマンドでローカルのスキーマ定義を反映する

  • 動作確認していて気付いたミス

    • 追加したプロパティのデータ型が間違っていた(INTEGERではなくFLOATだった...)

リカバリ方法

列のデータ型を変更する

やることはSELECTした結果を既存のテーブルに上書きすることで、データ型の変更ができるというもの。

ただし、データ数が少ない場合は有効だと思うけど、大量データがある場合は他の案を検討したほうが良さそう。

  • SELECT id, date,

    ARRAY(SELECT AS STRUCT

    -- d.value はINTEGER型だけどCASTすることでその型になる(できる型とそうでない型があるので公式ドキュメントみてね)

    d.id, d.name, d.key, CAST(d.value AS FLOAT64) as max_date_diff

    FROM UNNEST(ary_structs) AS d

    ) AS ary_structs,

    FROM `dataset.table_name`;

まずは上書きせずにSELECTして結果を確認しましょう。

問題なければ、コンソール画面上部にある[展開] ->[クエリの設定] を選ぶ。

設定すると、BQのコンソール上に「宛先テーブル: dataset」「テーブルを上書きする」が出ている。この状態でコンスタント上にある「実行」を押す。

あとはスキーマ定義でデータ型が変わっていればOK!

一番はスキーマ定義を間違えないことだけどね!

@imu
a software engineer who plays games, goes camping, reads books, and sometimes talks about work.