我大约有20万个CSV(全部具有相同的架构)。我为他们编写了一个Cloud Function,将其插入到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中没有显示插入作业,并且没有任何功能在运行。
答案 0 :(得分:0)
但是,当我将所有CSV复制到存储桶(大约43 TB)时,并不是所有数据都被添加到BigQuery中,而仅插入了500 GB。
您正在达到此link
中定义的BigQuery负载限制您应该将文件拆分为较小的文件,然后上传就可以了