2016-12-22 12 views
0

Bigqueryの日付パーティションテーブルに書き込む場合は、postの指示に従っています。私は$構文を使用してパーティションの場所にウィンドウをマップするために、シリアライズ機能を使用していると私は次のエラーを取得:BigqueryIO日付パーティションテーブルに書き込むことができません

Invalid table ID \"table$19700822\". Table IDs must be alphanumeric (plus underscores) and must be at most 1024 characters long. 

私はここで何かをしないのですか?

編集追加コード:

p.apply(Window.<TableRow>into(FixedWindows.of(Duration.standardDays(1)))) 
    .apply(BigQueryIO.Write 
    .named("Write") 
    .withSchema(schema) 
    .withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_APPEND) 
    .withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_IF_NEEDED) 
    .to(new SerializableFunction<BoundedWindow, String>() { 
     public String apply(BoundedWindow window) { 
     String dayString = DateTimeFormat.forPattern("yyyyMMdd") 
      .withZone(DateTimeZone.UTC) 
      .print(((IntervalWindow) window).start()); 
     return "project_id:dataset.table$" + dayString; 
     } 
    })); 
+0

シリアライズ可能な関数の出力は実際には 'project-id:dataset.table $ YYYYMMDD'のように見えるので、私はそうは思わないでしょうか? – Narek

+0

あなたが使っているコードを教えてください。 – Sonya

+0

@Sonya私は使用しているコードを追加しました。 – Narek

答えて

2

がアクセスしようとしている表がすでに存在していることを確認してください。あなたは "$"でテーブルを作成することはできませんし、 "必要に応じて作成"を使用しているので、コードの書き出しに加えてテーブルの作成も終了する可能性があります。

+0

これは、 'DataflowPipelineRunner'を使ってこの問題を解決したようです。 – Narek

+0

@Narekデータフローパイプラインの日付パーティションを持つBQテーブルを作成できましたか?私はストリーミングパイプラインを持っていますが、私が考えている唯一の解決策は、日付がロールオーバーしたときにパイプラインを停止し、日付を更新したテーブル名で新しいストリーミングパイプラインを開始することです。 – PUG

+0

@PUG新しいバージョンの に 'Write.toTableReference'を試しましたか? https://beam.apache.org/documentation/sdks/javadoc/0.4.0/index.html?org/apache/beam/sdk/io/gcp/bigquery/class-use/BigQueryIO.Write.Bound.html – Narek

関連する問題