2017-06-06 11 views
2

Apache Beam BigQueryIOを使用して日付パーティションテーブルを作成する方法はありますか?つまり、まだ作成されていないテーブルにパーティションデコレータを使用する方法はありますか?プログラムで日付パーティションテーブルを作成

最初にテーブルを作成してからコード内でパーティションデコレータを使用できますが、動的にフィールドのフィールドからTableDestinationを決定するため、これらのテーブルを事前に作成することはできません。

私のコードは次のようである。これにより

rows.apply("Write rows", 
    BigQueryIO.writeTableRows() 
     .to(new SerializableFunction<ValueInSingleWindow<TableRow>, TableDestination>() { 
      @Override 
      public TableDestination apply(ValueInSingleWindow<TableRow> value) { 
      TableRow t = value.getValue(); 

      String tableName = ... // get from the fields of table row 
      String partition = ... // get the date part that will be used for decorator 

      TableDestination td = new TableDestination(
         "project-id:dataset-id." + tableName + "$" + partition, ""); 
       return td; 
      } 
     }).withSchema(someSchema) 
     .withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_APPEND) 
    .withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_IF_NEEDED)); 

、それはproject-id:dataset-id.tableName$partitionのテーブルを作成しようと、それは$は、テーブル名の内部で使用することはできません文句を言います。

答えて

2

これは現在可能ではないようです。

BEAM JIRAの公式問題リストには、BEAM-2390an official pull requestのリクエストがありますので、すぐにこれが可能になるようです。

0

テーブルIDフォーマット:The ID of the table. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024 characters.BigQuery docを確認してください。

+0

「$ $」は私の質問の本質であるパー​​ティションデコレータを表します。通常、テーブルをあらかじめ作成しておけば、その看板を使って自分のパーティションを指定できますが、まだ作成されていないテーブルには使用できません。 – Ali

関連する問題