BigqueryIO无法写入日期分区表

时间:2016-12-22 05:12:32

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

我按照以下post中的说明写入BigQuery中的日期分区表。我使用序列化函数使用$语法将窗口映射到分区位置,我收到以下错误:

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;
      }
    }));

1 个答案:

答案 0 :(得分:2)

确保您尝试访问的表已存在。你不能在其中创建一个包含“$”的表,并且你正在使用“create if needed”,这样你的代码除了试图写入之外可能最终会创建表。