我有一份工作,除其他事项外还插入一些从文件到BigQuery资料表供以后人工分析读取数据。
它失败,出现以下错误:
job error: Too many sources provided: 10001. Limit is 10000., error: Too many sources provided: 10001. Limit is 10000.
这是什么称其为“源”? 它是一个文件或管道一步?
谢谢,G
我有一份工作,除其他事项外还插入一些从文件到BigQuery资料表供以后人工分析读取数据。
它失败,出现以下错误:
job error: Too many sources provided: 10001. Limit is 10000., error: Too many sources provided: 10001. Limit is 10000.
这是什么称其为“源”? 它是一个文件或管道一步?
谢谢,G
我猜的错误是从BigQuery的到来,意味着我们正在努力,当我们创建输出表上传文件太多。
你能提供的错误/上下文(如命令行输出的一个片段一些细节(如果使用的是BlockingDataflowPipelineRunner),所以我可以确认?一个也的jobId将是有益的。
是否有一些关于你的流水线结构会导致大量的输出文件? 这可能是某个大数据量或者是细碎片化输入文件,而不需要额外GroupByKey操作(这将让我们reshard数据分成大块)。
在该说明谷歌云数据流BigQueryIO.Write出现未知错误(HTTP代码500)可以减轻这个问题:
为Java 1.x的数据流SDK:--experiments = enable_custom_bigquery_sink:作为一种变通方法,您可以启用这个实验
在数据流SDK的Java版本是2.x,这种行为是默认的,没有实验是必要的。
请注意,在两个版本中,GCS临时文件可能,如果你的作业失败遗留下来的。
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());
}
}