我在本地硬盘驱动器上有一个 8GB 大小的 1.04 亿行 CSV 文件。我需要将其作为表格直接上传到 BigQuery,或者通过 Google Cloud Storage + 然后在 BigQuery 中指向链接。实现此目的的最快方法是什么?在尝试了Web控制台上传和Google Cloud SDK之后,两者都非常慢(每隔几分钟就会以1%的速度移动(。
提前感谢!
所有 3 个现有答案都是正确的,但如果你的带宽很低,没有人会帮助你,你会受到物理限制。
我的建议是在发送文件之前将其压缩。文本文件具有高压缩率(高达 100 倍(,您可以将 gzip 文件直接摄取到 BigQuery 中,而无需解压缩它们
使用 gsutil 工具将比 Web 控制台更快、更容错(无论如何,Web 控制台可能会在完成之前超时(。您可以在此处找到详细说明(https://cloud.google.com/storage/docs/uploading-objects#gsutil(,但基本上,一旦您在计算机上安装了gcloud工具,您将运行:
gsutil cp [OBJECT_LOCATION] gs://[DESTINATION_BUCKET_NAME]/
从那里,您可以将文件上传到BigQuery(https://cloud.google.com/bigquery/docs/loading-data-cloud-storage-csv(,这一切都将在Google的网络上发生。
您将面临的瓶颈是初始上传期间的互联网上传速度。我们过去所做的绕过是启动一个计算盒,运行生成文件的任何进程,并将其输出到计算盒上。然后,我们使用内置的 gsutil 工具将文件上传到云存储。这样做的好处是完全在谷歌的网络上运行,而且速度非常快。
我会评论你看看这篇文章,其中有几点需要考虑。
基本上最好的选择是使用 gsutil 的并行上传功能上传您的对象,在本文中您可以找到以下命令:
gsutil -o GSUtil:parallel_composite_upload_threshold=150M cp ./localbigfile gs://your-bucket
此外,您还会找到一些改进上传的技巧,例如移动要上传的对象的块大小。
上传后,我会通过进一步查看此文档转到 dweling 为 Bigquery 部分提供的选项。
您是否考虑过使用 BigQuery 命令行工具,如下例所示?
bq load --autodetect --source-format=CSV PROJECT_ID:DATASET.TABLE ./path/to/local/file/data.csv
上面的命令将直接加载本地CSV文件数据的内容.csv到指定的表中,并自动检测架构。或者,有关如何通过解析其他标志来根据您的要求自定义加载作业的详细信息,请参阅此处 https://cloud.google.com/bigquery/docs/loading-data-local#bq