2016-02-15 7 views
6

誤って私のBigQueryテーブルスキーマに間違った列を追加しました。BigQuery - スキーマから未使用の列を削除します

  • が悪い行を削除「を選択し実行することで(値を持つ行が間違った列が含まれています):

    代わりに、完全なテーブル(行の百万)リロードの次が可能であれば、私が知りたいのですが* "何らかのフィルタを使ってテーブルをクエリし、結果を同じテーブルに保存する。

  • (今)未使用の欄を削除してください。

この機能はサポートされていますか? おそらく、「結果をテーブルに保存」機能に「コンパクトスキーマ」オプションを付けることができます。

答えて

0

結果を表に保存してください。興味のある選択した列で大きなテーブルを試してください。それを小さくするために制限を適用することができます。あなたのテーブルには、レコード/繰り返しタイプフィールドで構成されていない場合は

+0

スキーマを小さくする(テーブルサイズではない)にはどのような制限がありますか? – Lior

+0

限界はそれをテストするのに役立ちます。保持する列を選択して一覧表示することができます。 – Pentium10

3

- あなたの簡単なオプションは次のとおりです。

  1. が新しい一時テーブル

    に不正なレコードをフィルタリングしながら、有効な列を選択し、元の<リストを選択します<フィルタは、ここで悪いエントリを削除するYourTable
    から列>
    >

    一時テーブルに上記の書き込み - すべてが期待通りになりますので、場合場合YourTable_Backup

  2. YourTable
  3. コピーYourTable_Temp
  4. YourTableにチェックを削除 - - YourTable_Temp

  5. は、「壊れた」テーブルのバックアップコピーを作成し得ますテンポラリテーブルとバックアップテーブルを削除する

注意:上記#1のコストは、質問の最初の箇条書きのアクションとまったく同じです。あなたは出力にあなたはまだ計画の上で実行することができますが、#1で、あなたが適切なスキーマを持っているいくつかのBigQuery User-Defined Functionsを使用する必要があります
- アクションの残りの部分(コピー)は、繰り返し/レコードフィールドを持っている場合場合は無料

です例については以下を参照することができます - もちろんこれは、いくつかの余分なDEVが必要になります - しかし、あなたは危機的な状況にある場合 - これはあなたのため

Create a table with Record type column
create a table with a column type RECORD

を動作するはずです、私は願って、いくつかのポイントGoogleのBigQueryのチームの意志で必要なときにあなたのようなケースをサポートしますパルテートして繰り返し/レコードデータを出力しますが、これは私が見つけた最良の回避策です - 少なくとも自分のために -

+0

私は多くの繰り返し/レコードフィールドを持っています。そのため、新しいテーブルに保存するときに正確なスキーマを維持するために、「select *」を使用し、「結果を平坦化」しないでください。 – Lior

+0

私の答えは、繰り返し/レコードのものに関連して追加されました。それが役に立つと思うが、それを実践する上で助けが必要な場合は、関連するすべての詳細とともに別の質問を投稿してください。私はそこで援助してくれることを嬉しく思っています。 –

0

上記の最初の返信の5ステップはうまくいくはずです。詳細については、ポイント1でallowLargeResults:trueとflattenSchema:falseを指定する必要があります。allowLargeResultsパラメータをtrueに設定すると、クエリ結果は128MBより大きくなります。パラメータflattenSchema:falseを設定すると、結果の繰り返しフィールドの平坦化が停止します。

追加として、照会結果は、writeDispositionパラメーターをwriteDisposition:WRITE_TRUNCATEに設定して初期テーブルに書き込むことができます。

関連する問題