2016-09-09 1 views
1

既存のテーブルのフィールドのいくつかが次のような点を除いて、クエリの結果と同じスキーマを持つ既存のテーブルにクエリの結果を追加しようとしています。必須。私はそれがすべてで同じ名前と型を持つ新しいテーブルにクエリの結果を書き込むときBigQueryが必要なフィールドを持つテーブルにクエリの結果を追加します。

Invalid schema update. Field user has changed mode from REQUIRED to NULLABLE 

この

は私がしようとすると、クエリを実行し、必要なすべてのフィールドのエラーですただし、すべてのフィールドのモードはNULLABLE(1つの繰り返しフィールドを除く)です。私は運がないすべての必要なフィールドのために AND user IS NOT NULLを使ってみました。私はまた、クエリの結果を別のテーブルに保存してからそのスキーマを変更しようとしましたが、BQでは必要なフィールドをテーブル上で遡及的に設定することはできません。

答えて

0

NULLABLEをREQUIREDにフリップするようにクエリ結果のスキーマを変更することはできません。したがって、必要なのは、REQUIRED列をNULLABLEに変換するためにテーブルのスキーマを変更することです(注:後で逆の操作を行うことができます)。

+1

必要なフィールドを持つテーブルのクエリでテーブルに追加するため、その基本的に不可能...監督のビットのように思われる:このように。 私がこの作業を行う唯一の方法は、データをCSVとしてGCSにエクスポートし、ロードジョブを実行することです。 –

+0

クエリがREQUIREDフィールドを生成する場合がありますが、一般的な場合は可能でない場合があります。 REQUIREDは良いよりも害が多いようですので、スキーマをすべてのフィールドでNULLABLEに変更するだけです。 –

+0

私のテーブルはすでに生成され、REQUIREDフィールドに書き込まれているので、私は実際に既存のテーブルを切り替えることはできません。 –

4

必須フィールドは標準SQLでサポートされなくなりました。標準SQL(レガシーSQLではなく)を使用している場合は、change all your REQUIRED fields to NULLABLEをお勧めします。

編集(2011年10月23日):REQUIRED fields in Standard SQLのサポートが追加されたようです。

+0

そのページでそれはどこですか? – Sai

+0

要は、必須フィールドのサポートを追加したようです:https://cloud.google.com/bigquery/docs/schemas#field_modes –

0

FWIW、スキーマを使用してテーブルを作成し、同じスキーマを指定してクエリを実行すると機能することがわかりました。

bq mk --schema=myschema.json me.newstuff && 
bq query --format=none --allow_large_results \ 
    --destination_table=me.newstuff \ 
    --destination_schema=myschema.json \ 
    --use_legacy_sql=false \ 
    " 
    SELECT * FROM me.oldstuff 
    WHERE data_to_keep is > 0 
" 
関連する問題