が発生しました。Google BigQueryにはMarch 23, 2016 announcedが追加されました。「BigQuery APIまたはコマンドラインツールでの連合データソースとしての読み込み操作のAvroソース形式のサポートの追加」これはhereと表示されています "これはAvro形式のサポートのベータ版です。この機能はSLAまたは非推奨ポリシーの対象ではなく、後方互換性のない変更を受ける可能性があります。しかし、私はその機能が動作すると期待しています。AvroファイルをBigQueryにロードする際に内部エラー
Avroフォーマットの読み込み方法に関するコード例はどこにも見つかりませんでした。私はどのようにしてbq
-toolを使ってロードするのかの例は見つけられませんでした。
私の実際的な問題です。 Avro形式のBigQueryにデータを読み込むことができませんでした。
bq
-toolを使用すると、次のようなことが起こります。データセット、テーブル名とバケット名は難読化されています:
$ bq extract --destination_format=AVRO dataset.events_avro_test gs://BUCKET/events_bq_tool.avro Waiting on bqjob_r62088699049ce969_0000015432b7627a_1 ... (36s) Current status: DONE $ bq load --source_format=AVRO dataset.events_avro_test gs://BUCKET/events_bq_tool.avro Waiting on bqjob_r6cefe75ece6073a1_0000015432b83516_1 ... (2s) Current status: DONE BigQuery error in load operation: Error processing job 'dataset:bqjob_r6cefe75ece6073a1_0000015432b83516_1': An internal error occurred and the request could not be completed.
基本的に、私はテーブルから抽出し、内部エラーの原因と同じテーブルに挿入しています。
さらに、私は同じ結果(内部エラー)で同じ(テーブルXから抽出してテーブルXにロードする)Javaプログラムを持っています。しかし、私は、上記で問題をできるだけ明確に説明していると思います。そのため、私はここでコードを共有していません。 Javaでは、空のテーブルから抽出して挿入すると、挿入ジョブは失敗しません。
私の質問は、私はBigQueryのAPIは内部エラーで失敗することはありませんだと思う
- です。なぜ私のテストでそれが起こっているのですか?
- 抽出されたAvroファイルは挿入ジョブと互換性がありますか?
- 挿入ジョブのAvroスキーマがどのようなものなのか、少なくとも私は何も見つけられませんでした。ドキュメントは作成できますか?これまでのところ、私は
REQUIRED
フィールドを使用していないのヒントに基づいて内部エラーを与えないアブロ負荷の仕事を得ることができた:
は、2016年4月25日に更新しました。ただし、null以外の値をロードすることはできませんでした。
がこのアブロ・スキーマを考えてみましょう:{ "type": "record", "name": "root", "fields": [ { "name": "x", "type": "string" } ] }
BigQueryのテーブルが1列、NULLABLE
あるx
を持っています。私は(私は1と2を試してみた)行(x
は、例えば1
である)Nを挿入した場合
、私はBigQueryの中でN行を得たが、x
は常に値null
を持ちます。
X
がREQUIRED
になるようにテーブルを変更すると、内部エラーが発生します。
要約:BigQueryにはバグがあります:Avroフォーマットを使用した挿入ジョブ_は、宛先テーブルが存在する場合には機能しません。ただし、内部エラーが発生します。回避策は、createDisposition 'CREATE_IF_NEEDED'を使用し、そこにテーブルを持たないことです。私はこの仕事を確認した。 – codeholic