Google cloud dataflow BigQueryIO:numFileShards是做什么用的?

Google cloud dataflow BigQueryIO:numFileShards是做什么用的?,google-cloud-dataflow,apache-beam,Google Cloud Dataflow,Apache Beam,当我想将未绑定的输入从Kafka加载到BigQuery时,我遇到了.withMethod()选项。通过使用Method.FILE_LOAD,我还必须指定触发频率以及非零numFileShards 我的问题是: 文件碎片的数量控制什么?它的实际用途是什么?据我观察,它绝对不是在我的地面军事系统临时位置生成的临时文件的数量,对我来说是可见的。但我想知道我应该选择在这里设置什么数字 根据我下面引用的源代码,默认值应该是1000,但实际上它是0,所以当我没有显式地设置它时,我得到了一个异常,当我将它设置

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

我的问题是

  • 文件碎片的数量控制什么?它的实际用途是什么?据我观察,它绝对不是在我的地面军事系统临时位置生成的临时文件的数量,对我来说是可见的。但我想知道我应该选择在这里设置什么数字
  • 根据我下面引用的源代码,默认值应该是1000,但实际上它是0,所以当我没有显式地设置它时,我得到了一个异常,当我将它设置为1时,异常消失了,但再次,我不明白它是什么,我设置的是什么,哈哈

  • 将数据写入BigQuery可以以不同的方式工作<代码>文件加载意味着Beam将把窗口化的
    PCollection
    写入Avro文件,然后触发BigQuery作业以导入这些文件的内容

    文件碎片的数量控制
    PCollection
    将写入多少文件,从而控制BQ导入作业的并行性


    希望有帮助

    我猜到了这个意思,但是当我把它设为1时,我在临时位置得到了3个文件——这引起了我的困惑。此外,触发频率决定将触发多少加载作业,我认为不能加载不完整的文件,因此从这个意义上说,我无法让我控制那里的文件数。你确定这3个文件不是来自不同的作业触发时间吗?我认为纽姆哈德应该控制每个触发器的碎片数“每个触发器的碎片数”对我来说是有意义的。我会看一看,只是为了完成。
    /**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();
    }
    
    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)