BigQuery 加载作业不会插入所有数据

Posted

技术标签:

【中文标题】BigQuery 加载作业不会插入所有数据【英文标题】:BigQuery load job does not insert all data 【发布时间】:2019-04-18 17:16:55 【问题描述】:

我有大约 20 万个 CSV(都具有相同的架构)。我为他们编写了一个云函数以将它们插入 BigQuery,这样只要我将 CSV 复制到存储桶,就会执行该函数并将数据加载到 BigQuery 数据集

我基本上使用了与文档中相同的代码。

dataset_id = 'my_dataset'  # replace with your dataset ID
table_id = 'my_table'  # replace with your table ID
table_ref = bigquery_client.dataset(dataset_id).table(table_id)
table = bigquery_client.get_table(table_ref)  # API request 

def bigquery_csv(data, context):

  job_config = bigquery.LoadJobConfig()
  job_config.write_disposition = bigquery.WriteDisposition.WRITE_APPEND
  job_config.skip_leading_rows = 1
  # The source format defaults to CSV, so the line below is optional.
  job_config.source_format = bigquery.SourceFormat.CSV

  uri = 'gs:///'.format(data['bucket'], data['name'])
  errors = bigquery_client.load_table_from_uri(uri,
                                    table_ref,
                                    job_config=job_config)  # API request

  logging.info(errors)
  #print('Starting job '.format(load_job.job_id))

  # load_job.result()  # Waits for table load to complete.
  logging.info('Job finished.')

  destination_table = bigquery_client.get_table(table_ref)
  logging.info('Loaded  rows.'.format(destination_table.num_rows))

但是,当我将所有 CSV 复制到存储桶(大约 43 TB)时,并非所有数据都添加到 BigQuery 中,只插入了大约 500 GB。

我不知道出了什么问题。复制作业完成后,Stackdriver Logging 中不会显示任何插入作业,也不会运行任何函数。

【问题讨论】:

【参考方案1】:

但是,当我将所有 CSV 复制到存储桶(大约 43 TB)时,并非所有数据都添加到 BigQuery,并且只插入了大约 500 GB。

您正在达到此 link 中定义的 BigQuery 负载限制

你应该把你的文件拆分成更小的文件,然后上传就可以了

【讨论】:

我假设因为大约有 200k 个文件,所以会触发 200k 个函数。因为会触发 200k 个不同的函数,所以它们将被视为单独的加载作业。 43 TB 是所有 CSV 的总大小。否则,每个 CSV 文件大约为 300 MB。 更正这也是我提供的链接中定义的限制。希望您有办法限制负载,如果没有,您可以就该主题提出另一个问题。如果您可以接受并投票赞成我的回答,请立即申请。最好的。 @PranayNanda,感谢您接受我的回答,正如您所知,对 SO 进行投票也很重要。感谢您是否也能做到这一点,Best。 由于您要加载大量数据,因此配额是问题的最可能原因。我想补充一点,如果您没有达到“最大文件大小”配额,您可能会达到“行和单元格大小限制”或其他限制。在任何情况下,您都可以使用 BigQuery 作业 ID 在您的日志中搜索它,以确定该作业是否未能加载数据。

以上是关于BigQuery 加载作业不会插入所有数据的主要内容,如果未能解决你的问题,请参考以下文章

使用 POST 请求和 Java 客户端库加载到 BigQuery 的任何示例?

加载作业尝试使用 java 将 json 插入 BigQuery 表时解析错误

BigQuery 插入作业而不是流式传输

查找要插入 BigQuery 的列名

BigQuery 加载作业 [无效] 遇到太多错误

BigQuery 无法插入作业。工作流失败