BigQuery 更快地插入数百万行的方法
Posted
技术标签:
【中文标题】BigQuery 更快地插入数百万行的方法【英文标题】:BigQuery faster way to insert million of rows 【发布时间】:2016-05-25 12:54:41 【问题描述】:我正在使用 bq 命令行并尝试每天用一张表插入大量 json 文件。
我的做法:
-
列出所有要推送的文件(日期名为 YYYMMDDHHMM.meta1.meta2.json)
在同一天文件中连接 => YYYMMDD.ndjson
拆分 YYYMMDD.ndjson 文件(每个 500 行文件)YYYMMDD.ndjson_splittedij
遍历 YYYMMDD.ndjson_splittedij 并运行
bq insert --template_suffix=20160331 --dataset_id=MYDATASET TEMPLATE YYYMMDD.ndjson_splittedij
这种方法有效。我只是想知道是否可以改进它。
【问题讨论】:
【参考方案1】:您再次混淆了流式插入和作业加载。 您不需要将每个文件拆分为 500 行(适用于流式插入)。
您可以插入非常大的文件,请参阅此处列出的命令行选项卡示例:https://cloud.google.com/bigquery/loading-data#loading_csv_files
你只需要运行:
bq load --source_format=NEWLINE_DELIMITED_JSON --schema=personsDataSchema.json mydataset.persons_data personsData.json
如果未压缩的 JSON 文件必须小于 5 TB,则压缩后的 JSON 文件必须小于 4 GB,因此文件越大越好。始终尝试使用 10 行示例文件,直到命令正常工作为止。
【讨论】:
我们每天必须有 1 张桌子 :)。加载作业的配额似乎是每天 1000 个。 是的,但想象一下 1000 * 5TB 意味着 5 PB。您是认真的想要在同一天获得这么多数据吗? 误会。每天,系统 L 在文件夹 B 中生成大约 30 000 个文件。从 B 中,脚本 S 在文件夹 D 中生成的文件与属于 B 的文件一样多。D 可能包含数百万个文件。目标是按天汇总文件,然后尽快将它们发送到 BQ。 Pentium10 的要点是,您可以通过使用“bq load”而不是“bq insert”来跳过第三步(分成 500 行的块)。 “bq load”命令批量加载大块数据,而“bq insert”用于实时摄取少量数据。 请注意,“bq load”也可以附加到表中(如果表已经存在,IIRC 默认情况下会这样做)。有关详细信息,请参阅“bq 帮助加载”。以上是关于BigQuery 更快地插入数百万行的方法的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 pandas 或 python 将具有数百万行的表从 PostgreSQL 复制到 Amazon Redshift