2

我正在尝试使用 StreaminginsertAll方法在 BigQuery 中插入 38000 条记录。

但首先我收到错误:

Insert operation not performed 
com.google.cloud.bigquery.BigQueryException: Read timed out 

然后将超时时间增加为:

RetrySettings retrySetting = RetrySettings.newBuilder().setTotalTimeout(Duration.ofMinutes(90))
  .build();
BigQueryOptions bigqueryOptions = BigQueryOptions.newBuilder()
  .setRetrySettings(retrySetting).build();
BigQuery bigquery = bigqueryOptions.getDefaultInstance().getService();

...我收到另一个错误:

Insert operation not performed 
com.google.cloud.bigquery.BigQueryException: Connection reset

请帮忙,如何在 BigQuery 中插入所有记录?

4

2 回答 2

1

也许你正在达到极限

每个请求的最大行数:每个请求 10,000 行

建议最多 500 行。批处理可以在一定程度上提高性能和吞吐量,但代价是每个请求的延迟。每个请求的行数太少以及每个请求的开销都会导致摄取效率低下。每个请求的行数过多,吞吐量可能会下降。

建议每个请求最多 500 行,但使用代表性数据(模式和数据大小)进行试验将帮助您确定理想的批量大小。

尝试将数据分成块。

于 2021-02-18T14:14:07.087 回答
-1

确定您可以在其上创建不同 Custer 数据的文件的最佳方法。一旦您根据已识别的字段(例如 id、日期等)识别了不同的集群,然后尝试单独加载每个集群数据。前提是每个集群数据小于最大限制 (10K)。您还需要确保同时加载每 n 个集群数据。

于 2021-02-18T14:44:09.263 回答