1

我有一项工作,除其他外,还将它从文件中读取的一些数据插入到 BigQuery 表中,以便以后进行手动分析。

它失败并出现以下错误:

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

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

谢谢,G

4

3 回答 3

2

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

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

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

于 2015-01-05T17:50:34.493 回答
1

In Google Cloud Dataflow BigQueryIO.Write 中的注释发生未知错误(http 代码 500)缓解了此问题:

适用于 Java 1.x 的 Dataflow SDK:作为一种解决方法,您可以在以下位置启用此实验:--experiments=enable_custom_bigquery_sink

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

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

于 2017-04-20T17:18:38.033 回答
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());
    }
}
于 2016-06-13T18:51:40.560 回答