基本的には以下を見れば分かるのですが、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!
一番はスキーマ定義を間違えないことだけどね!