云数据流到BigQuery - 来源太多了

时间:2015-01-05 08:41:15

标签: google-cloud-dataflow

我有一份工作,除了其他功能外,还会将从文件中读取的一些数据插入到BigQuery表中,以便以后进行人工分析。

失败并出现以下错误:

job error: Too many sources provided: 10001. Limit is 10000., error: Too many sources provided: 10001. Limit is 10000.

它被称为“来源”是什么?它是文件还是管道步骤?

谢谢, ģ

3 个答案:

答案 0 :(得分:2)

我猜测错误来自BigQuery,这意味着我们在创建输出表时尝试上传太多文件。

您是否可以提供有关错误/上下文的更多详细信息(如命令行输出的片段(如果使用BlockingDataflowPipelineRunner),以便我可以确认?jobId也会有帮助。

您的管道结构是否会导致大量输出文件?这可能是大量数据,也可能是精细分片的输入文件而没有后续的GroupByKey操作(这会让我们将数据重新分解成更大的部分)。

答案 1 :(得分:1)

In Google Cloud Dataflow BigQueryIO.Write occur Unknown Error (http code 500)中的注释缓解了这个问题:

  

Dataflow SDK for Java 1.x:作为一种变通方法,您可以在以下位置启用此实验: - examples = enable_custom_bigquery_sink

     

在Dataflow SDK for Java 2.x中,此行为是默认行为,无需进行任何实验。

     

请注意,在这两个版本中,如果您的作业失败,GCS中的临时文件可能会遗留下来。

答案 2 :(得分:0)

public static class ForceGroupBy <T> extends PTransform<PCollection<T>, PCollection<KV<T, Iterable<Void>>>> {
    private static final long serialVersionUID = 1L;
    @Override
    public PCollection<KV<T, Iterable<Void>>> apply(PCollection<T> input) {
        PCollection<KV<T,Void>> syntheticGroup = input.apply(
                ParDo.of(new  DoFn<T,KV<T,Void>>(){
                    private static final long serialVersionUID = 1L;
                    @Override
                    public void processElement(
                            DoFn<T, KV<T, Void>>.ProcessContext c)
                                    throws Exception {
                        c.output(KV.of(c.element(),(Void)null));

                    } }));
        return syntheticGroup.apply(GroupByKey.<T,Void>create());
    }
}