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
のテーブルを作成しようと、それは$
は、テーブル名の内部で使用することはできません文句を言います。
「$ $」は私の質問の本質であるパーティションデコレータを表します。通常、テーブルをあらかじめ作成しておけば、その看板を使って自分のパーティションを指定できますが、まだ作成されていないテーブルには使用できません。 – Ali