数据流-窗口式写入BigQuery吗?

时间:2018-09-29 14:36:51

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

数据流-是否有窗口写入BigQuery?我正在尝试运行一个Dataflow作业,该作业读取5亿行文件,然后写入BigQuery。 当我运行时,它的运行时间不超过1500万,因此查看是否有任何Windowing写入BigQuery会有所帮助。在运行时,我遇到了很多GC分配失败,但是我发现这是正常的。我保留了运行时配置的默认diskSize。请帮忙。如果有任何向BigQuery进行窗口写入的示例,请提供。

对于转换,它只是字符串的一部分,然后插入到BigQuery中。

此外,下面的示例在继续从PubSub流式传输时是否仍在继续写入BigQuery? https://github.com/GoogleCloudPlatform/DataflowTemplates/blob/master/src/main/java/com/google/cloud/teleport/templates/PubSubToBigQuery.java

我的下面的样品

Pipeline pipeline = Pipeline.create(options);
        PCollection<String> textData = pipeline.apply("Read Text Data",
                TextIO.read().from(options.getInputFilePattern()));
        PCollection<TableRow> tr = textData.apply(ParDo.of(new FormatRemindersFn()));

        tr.apply(BigQueryIO.writeTableRows().withoutValidation()              .withCustomGcsTempLocation(options.getBigQueryLoadingTemporaryDirectory())
                .withSchema(FormatRemindersFn.getSchema())
                //  .withCreateDisposition(CreateDisposition.CREATE_IF_NEEDED)
                .withWriteDisposition(WriteDisposition.WRITE_APPEND)
                .to(options.getSchemaDetails()));

 static class FormatRemindersFn extends DoFn<String, TableRow> {
  @ProcessElement
        public void processElement(ProcessContext c) {
            try {
                if (StringUtils.isNotEmpty(c.element())) {
                    String[] fields = c.element().split("\\^",15);

                  //  logger.info("Fields :{}", fields[2]);
                    TableRow row = new TableRow().set("MODIFIED_DATE", fields[0])
                            .set("NAME", fields[1])
                            .set("ADDRESS", fields[2]);

                    c.output(row);
                }
            } catch (Exception e) {
                logger.error("Error: {}", e.getMessage());
            }
        }
}

1 个答案:

答案 0 :(得分:1)

在注释了作为每个元素的DoFn一部分完成的日志记录后,错误得到解决。处理那么多元素时,不应记录每个元素。