BigQueryテーブルスキーマに誤って間違った列を追加しました。
テーブル全体(数百万行)をリロードする代わりに、次のことが可能かどうかを知りたいです。
この機能(または同様の機能)はサポートされていますか?おそらく、「結果をテーブルに保存する」機能には「コンパクトスキーマ」オプションがあります。
テーブルがレコード/繰り返しタイプのフィールドで構成されていない場合、簡単なオプションは次のとおりです。
不良レコードを新しい一時テーブルに除外しながら、有効な列を選択します
SELECT <元の列のリスト>
YourTableから
WHERE <ここで不正なエントリを削除するためのフィルタ>
上記を一時テーブルに書き込みます-YourTable_Temp
「壊れた」テーブルのバックアップコピーを作成します-YourTable_Backup
YourTable
を削除しますYourTable_Temp
からYourTable
注意:上記の#1のコストは、質問の最初の箇条書きのアクションとまったく同じです。残りのアクション(コピー)は無料です
フィールドを繰り返し/記録している場合-上記の計画を実行することはできますが、#1ではいくつかを使用する必要があります BigQueryユーザー定義関数 出力に適切なスキーマを含める
以下の例をご覧ください-もちろん、これには追加の開発が必要になります-しかし、危機的な状況にある場合は、これでうまくいくはずです
レコードタイプ列を持つテーブルを作成します
列タイプがRECORDのテーブルを作成する
ある時点で、Google BigQueryチームが、繰り返し/記録データを操作および出力する必要がある場合に、あなたのようなケースに対してより良いサポートを追加することを願っていますが、今のところ、これは私が見つけた最善の回避策です-少なくとも私にとっては
結果をテーブルに保存するのがあなたのやり方です。興味のある列を選択して大きなテーブルを試してみてください。制限を適用して小さくすることができます。
以下はそれを行うためのコードです。 cが削除したい列だとしましょう。
CREATE OR REPLACE TABLE transactions.test_table AS
SELECT * EXCEPT (c) FROM transactions.test_table;
または2番目の方法で、私のお気に入りは以下の手順に従うことです。