google-bigquery - 以编程方式创建日期分区表

标签 google-bigquery google-cloud-dataflow apache-beam-io

有没有办法使用 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 表,并提示 $ 不能在表名中使用.

最佳答案

目前看来这是不可能的。

官方 BEAM JIRA 问题列表中有一个对此的请求:BEAM-2390an official pull request ,看来这很快就会成为可能!

关于google-bigquery - 以编程方式创建日期分区表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44389862/

相关文章:

mysql - 如何在大查询中过滤日期

google-cloud-dataflow - 没有接收器的流式数据流管道

google-bigquery - HTTP 请求期间 Google Dataflow 和 Bigquery 传输错误

google-cloud-platform - 如何在 Java 的数据流作业中指定将在每个数据流 VM worker 上执行的启动脚本

python-2.7 - 输出类型中beam.ParDo和beam.Map之间的区别?

java - 在 Apache Beam 上确认 Google Pub/Sub 消息

python - 从 Google BigQuery 中过滤掉或替换非英文字符

google-bigquery - 从选择语句中获取大查询表架构

带有重复变量的sql pivot

java - 使用 Apache Beam 将插入流式传输到 BigQuery 时如何指定 insertId