Google bigquery BigQuery手动加载,但不通过JavaSDK加载
我有一个本地运行的数据流管道。目标是使用TEXTIO读取JSON文件,创建会话并将其加载到BigQuery中。给定这种结构,我必须在GCS中创建一个临时目录,然后使用它将其加载到BigQuery中。以前我有一个数据模式错误,无法加载数据,请参阅。这个问题已经解决 所以现在,当我在本地运行管道时,它以将一个临时JSON换行符分隔的文件转储到GCS中结束。然后SDK给了我以下信息:Google bigquery BigQuery手动加载,但不通过JavaSDK加载,google-bigquery,google-cloud-storage,google-cloud-dataflow,Google Bigquery,Google Cloud Storage,Google Cloud Dataflow,我有一个本地运行的数据流管道。目标是使用TEXTIO读取JSON文件,创建会话并将其加载到BigQuery中。给定这种结构,我必须在GCS中创建一个临时目录,然后使用它将其加载到BigQuery中。以前我有一个数据模式错误,无法加载数据,请参阅。这个问题已经解决 所以现在,当我在本地运行管道时,它以将一个临时JSON换行符分隔的文件转储到GCS中结束。然后SDK给了我以下信息: Starting BigQuery load job beam_job_xxxx_00001-1: try 1/3 I
Starting BigQuery load job beam_job_xxxx_00001-1: try 1/3
INFO [main] (BigQueryIO.java:2191) - BigQuery load job failed: beam_job_xxxx_00001-1
...
Exception in thread "main" com.google.cloud.dataflow.sdk.Pipeline$PipelineExecutionException: java.lang.RuntimeException: Failed to create the load job beam_job_xxxx_00001, reached max retries: 3
at com.google.cloud.dataflow.sdk.Pipeline.run(Pipeline.java:187)
at pedesys.Dataflow.main(Dataflow.java:148)
Caused by: java.lang.RuntimeException: Failed to create the load job beam_job_xxxx_00001, reached max retries: 3
at com.google.cloud.dataflow.sdk.io.BigQueryIO$Write$WriteTables.load(BigQueryIO.java:2198)
at com.google.cloud.dataflow.sdk.io.BigQueryIO$Write$WriteTables.processElement(BigQueryIO.java:2146)
这些错误不是很具有描述性,数据仍然没有加载到BigQuery中。令人费解的是,如果我转到BigQueryUI并从GCS加载SDK的数据流管道手动转储的同一个临时文件,在同一个表中,它工作得很好
相关代码部分如下所示:
PipelineOptions options = PipelineOptionsFactory.create();
options.as(BigQueryOptions.class)
.setTempLocation("gs://test/temp");
Pipeline p = Pipeline.create(options)
...
...
session_windowed_items.apply(ParDo.of(new FormatAsTableRowFn()))
.apply(BigQueryIO.Write
.named("loadJob")
.to("myproject:db.table")
.withSchema(schema)
.withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_IF_NEEDED)
.withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_APPEND)
);
SDK正在接受错误/异常,并且没有将其报告给用户。这很可能是一个模式问题。要获取正在发生的实际错误,您需要通过以下方式获取作业详细信息:
bq show-j作业梁uu作业uu 00001-1
@jkff提出了一个问题来改进错误报告。SDK正在接受错误/异常,并且没有向用户报告它。这很可能是一个模式问题。要获取正在发生的实际错误,您需要通过以下方式获取作业详细信息:
bq show-j作业梁uu作业uu 00001-1
@jkff提出了一个改进错误报告的问题。首先要做的是找出错误的实际原因。获取BigQuery加载作业id(job beam_job_00001-1)并从命令行(
bq show-j job beam_job_00001-1
)获取详细信息,或者使用页面底部的“try it”通过浏览器获取详细信息()。然后你会知道更多的细节。我提交了改进错误报告的文件。谢谢@jkff这会非常有帮助,并且会首先阻止这一切:)@GrahamPolley非常感谢你提供的这些信息。我从表格中调试了它,不过学到了两件事。由于BigQueryUI中有一个“作业历史记录”部分,我认为这是一个详尽的列表,因为我的SDK作业没有在那里列出,所以我没有寻找另一个作业获取者,将作业获取者链接到UI作业历史记录也会很好。@plumSemPy-好消息!好的,我现在添加一个答案,这样其他人就知道如果遇到相同的问题该怎么办。首先要做的是找出错误的实际原因。获取BigQuery加载作业id(job beam_job_00001-1)并从命令行(bq show-j job beam_job_00001-1
)获取详细信息,或者使用页面底部的“try it”通过浏览器获取详细信息()。然后你会知道更多的细节。我提交了改进错误报告的文件。谢谢@jkff这会非常有帮助,并且会首先阻止这一切:)@GrahamPolley非常感谢你提供的这些信息。我从表格中调试了它,不过学到了两件事。由于BigQueryUI中有一个“作业历史记录”部分,我认为这是一个详尽的列表,因为我的SDK作业没有在那里列出,所以我没有寻找另一个作业获取者,将作业获取者链接到UI作业历史记录也会很好。@plumSemPy-好消息!好的,我现在添加一个答案,这样其他人知道如果遇到相同的问题该怎么办。