Google bigquery 数据流-对BigQuery的窗口写入?

Google bigquery 数据流-对BigQuery的窗口写入?,google-bigquery,google-cloud-dataflow,dataflow,Google Bigquery,Google Cloud Dataflow,Dataflow,数据流-是否存在对BigQuery的窗口写入?我正在尝试运行一个数据流作业,它读取5亿行文件,然后写入BigQuery。 当我运行时,它并没有超过1500万,所以看看是否有任何类型的窗口写入BigQuery会有所帮助。在运行时,我遇到了许多GC分配失败,但我发现这些都是正常的。我在运行时保留了默认的diskSize配置。请帮忙。如果有任何窗口写入BigQuery的示例,请提供 至于转换,它只是字符串的一部分,然后插入到BigQuery中 此外,下面的示例是否在保持从PubSub进行流式处理时一直

数据流-是否存在对BigQuery的窗口写入?我正在尝试运行一个数据流作业,它读取5亿行文件,然后写入BigQuery。 当我运行时,它并没有超过1500万,所以看看是否有任何类型的窗口写入BigQuery会有所帮助。在运行时,我遇到了许多GC分配失败,但我发现这些都是正常的。我在运行时保留了默认的diskSize配置。请帮忙。如果有任何窗口写入BigQuery的示例,请提供

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

此外,下面的示例是否在保持从PubSub进行流式处理时一直写入BigQuery?

下面是我的样本

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());
            }
        }
}
Pipeline-Pipeline=Pipeline.create(选项);
PCollection textData=pipeline.apply(“读取文本数据”,
text io.read().from(options.getInputFilePattern());
PCollection tr=textData.apply(ParDo.of(new formattemendersfn());
tr.apply(BigQueryIO.writeTableRows().withoutValidation().WithoutCustomGCStemplocation(options.getBigQueryLoadingTemporaryDirectory())
.withSchema(FormatMembersFn.getSchema())
//.withCreateDisposition(CreateDisposition.CREATE_,如果需要)
.withWriteDisposition(WriteDisposition.WRITE_APPEND)
.to(options.getSchemaDetails());
静态类FormattersFn扩展了DoFn{
@过程元素
公共void processElement(ProcessContext c){
试一试{
if(StringUtils.isNotEmpty(c.element())){
String[]fields=c.element().split(“\\^”,15);
//info(“Fields:{}”,Fields[2]);
TableRow row=新建TableRow().set(“修改日期”,字段[0])
.set(“名称”,字段[1])
.set(“地址”,字段[2]);
c、 输出(行);
}
}捕获(例外e){
error(“error:{}”,e.getMessage());
}
}
}

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

500M对于数据流来说应该很容易。你能确认你是从地面军事系统读到的吗?有多少文件?您是否在15M处遇到错误?在对每个元素作为DoFn的一部分所做的日志记录进行注释后,错误得到解决。真棒。你能为后代提供你自己的答案吗?确实,过度登录数据流可能是一个问题。这不仅是因为它耗尽了引导磁盘,还增加了Dataflow的日志代理的CPU和内存消耗。请随意接受你自己的答案。