0

私は彼らのpython SDKを使用してビームパイプラインを試作されていると、この使用してうまく出力に私の最後のpcollectionをBigQuerySinkを使用することができました:apache_beam Python SDK 0.6.0 BigQuerySinkはテーブルパーティションをサポートしていますか?

 beam.io.Write(beam.io.BigQuerySink('dataset.table', 
           self.get_schema(), 
     create_disposition=beam.io.BigQueryDisposition.CREATE_IF_NEEDED,            
    write_disposition=beam.io.BigQueryDisposition.WRITE_TRUNCATE)) 

は、このようなパーティションを含めるようにテーブルを変更:dataset.table$20170517を400、 「メッセージ」:「分割されていないテーブルからパーティション情報を読み取ることができません:DirectRunner


「コード」と、このパイプラインを実行しようとすると、次のエラーがトリガー


私はここで見つかった例を学んだが、パーティションBigQueryのテーブルにどのようにビームシンクデータパーティションの使用の痕跡 https://github.com/apache/beam/tree/master/sdks/python/apache_beam/examples

は認められませんか?

+0

コードを見ると、実際にはテーブルパーティションがサポートされているようです。 (https://github.com/apache/beam/blob/release-0.6.0/sdks/python/apache_beam/io/gcp/bigquery.py#L268)。あなたのテーブルは適切に分割されていますか? DirectRunnerがこの操作をサポートしているかどうかを確認しています。 – Pablo

+0

テーブルは実際にパーティション化されていますか? –

+0

@pablo @Graham Polley:はい、テーブルが分割されています。 { "タイプ": "DAY" パイプラインを実行し、パーティションを指定せずにデータをロードした後、パーティション情報が削除されます。 BigQuerySinkがパーティションをテーブルから削除しているかのようです。 –

答えて

1

apache_beam Python SDKは、BigQuerySink用のパーティションデコレータを受け入れます。使用可能なwrite_dispositionを試してみると、より多くの情報が得られます。

  • WRITE_TRUNCATEはテーブルパーティションに書き込みません。テーブル名に$ YYYYmmddパーティションを使用すると、このエラーが発生します。これは実際にパーティションデコレータを受け入れるGoogle Python SDKの動作とは異なります。

    Table IDs must be alphanumeric (plus underscores) and 
    must be at most 1024 characters long. 
    
  • WRITE_EMPTYはパーティションデコレータを受け入れます。
  • WRITE_APPENDはパーティションデコレータを受け入れます。
+0

https://issues.apache.org/jira/browse/BEAM-2332がこれを追跡しています。 –

関連する問題