从15,000个文件创建表的最有效方法(从存储到BQ)

时间:2018-12-15 09:33:25

标签: python google-cloud-platform google-bigquery google-cloud-storage

我尝试使用Google BQ Api和Google Storage API(我在其中存储所有文件)只是循环遍历所有文件,并在每次迭代期间将新行追加到表中,但是达到了追加到表的配额限制。

最有效的方法是什么?我考虑过为每个文件创建单独的表,而不是在BQ中将它们合并并另存为新表,但是我认为查询中的通配符表数量可能会有限制。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我简而言之建议使用BQ load file mechanism from GCS。这应该是未压缩的CSV,JSON,Avro或其他支持文件格式,最大单个文件大小为5TB。您最多可以上传15TB的加载作业,这意味着最多可以上传三个5兆兆位文件。

Google云端存储支持一个漂亮的功能,称为“ compose”:它可以让您最多由32个源Blob组成Blob。您可以从命令行执行以下操作:

gsutil compose \
  gs://${BUCKET}/somedir/csv/train* \
  gs://${BUCKET}/somedir/csv/full_training_data.csv

请注意,现在只能使用32个文件,因此,如果要从那15k文件中创建更大但更少的文件,则需要进行迭代。

请注意,每个表每天有1000个加载作业限制,您可以创建多个表然后合并它们。每个项目还有50k个加载作业限制。

每个作业操作(查询或加载)最多可影响2,000个分区。分区表每天最多只能进行5,000个分区修改。更多限制here