Beam.BigQueryIO:numFileShards是什么?

问题描述 投票:0回答:1

当我想将未绑定的输入从Kafka加载到BigQuery时,我遇到了.withMethod()选项。通过使用Method.FILE_LOAD,我还必须指定触发频率以及非零numFileShards。

我的问题是:

  1. 文件分片的数量控制了多少?什么是extactly用于?根据我的观察,它绝对不是我的GCS临时位置生成的临时文件的nubmer,对我来说是可见的。但是我想知道我应该选择在这里设置什么号码?
  2. 根据我引用的源代码,默认值应该是1000,但实际上它是0,所以当我没有明确地设置它时我得到了一个异常,当我将它设置为1时,异常消失了,但是,我不明白它是什么,我在设置什么,哈哈
/**Control how many file shards are written when using BigQuery load jobs. 
 Applicable only when also setting {@link/#withTriggeringFrequency}.
 The default value is 1000.*/

@Experimental
public Write<T> withNumFileShards(int numFileShards) {
  checkArgument(numFileShards > 0, "numFileShards must be > 0, but was: %s", numFileShards);
  return toBuilder().setNumFileShards(numFileShards).build();
}
  1. 有没有办法可以按记录计数而不是时间持续时间指定批量大小?

我没有设置NumFileShards时得到的异常:

Exception in thread "main" java.lang.IllegalArgumentException
    at com.google.common.base.Preconditions.checkArgument(Preconditions.java:108)
    at org.apache.beam.sdk.io.gcp.bigquery.BatchLoads.expandTriggered(BatchLoads.java:212)
    at org.apache.beam.sdk.io.gcp.bigquery.BatchLoads.expand(BatchLoads.java:557)
    at org.apache.beam.sdk.io.gcp.bigquery.BatchLoads.expand(BatchLoads.java:79)
    at org.apache.beam.sdk.Pipeline.applyInternal(Pipeline.java:537)
    at org.apache.beam.sdk.Pipeline.applyTransform(Pipeline.java:471)
    at org.apache.beam.sdk.values.PCollection.apply(PCollection.java:325)
    at org.apache.beam.sdk.io.gcp.bigquery.BigQueryIO$Write.expandTyped(BigQueryIO.java:1656)
    at org.apache.beam.sdk.io.gcp.bigquery.BigQueryIO$Write.expand(BigQueryIO.java:1602)
    at org.apache.beam.sdk.io.gcp.bigquery.BigQueryIO$Write.expand(BigQueryIO.java:1068)
    at org.apache.beam.sdk.Pipeline.applyInternal(Pipeline.java:537)
    at org.apache.beam.sdk.Pipeline.applyTransform(Pipeline.java:488)
    at org.apache.beam.sdk.values.PCollection.apply(PCollection.java:338)
    at come.geotab.bigdata.streaming.mapenrichedgps.MainApplication.main(MainApplication.java:119)
google-cloud-dataflow apache-beam
1个回答
1
投票

将数据写入BigQuery可以以不同的方式工作。 FILE_LOAD意味着Beam会将您的窗口化PCollection写入Avro文件,然后它将触发BigQuery作业以导入这些文件的内容。

文件分片的数量控制将PCollection写入的文件数量,从而控制BQ导入作业的并行度。

希望有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.