Beam.BigQueryIO: numFileShards 有什么用?

Beam.BigQueryIO: What is numFileShards for?

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

我的问题是:

  1. 文件分片数控制什么?它到底是做什么用的?根据我的观察,这绝对不是在我的 GCS 临时位置上生成并且对我可见的临时文件的数量。但是我想知道我应该在这里设置什么数字?
  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)

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

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

希望对您有所帮助!