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 更快地插入数百万行的方法的主要内容,如果未能解决你的问题,请参考以下文章

具有数百万行的 Django 表

如何使用 pandas 或 python 将具有数百万行的表从 PostgreSQL 复制到 Amazon Redshift

mysql中数百万行的基于键的分区

在 Python 中合并具有数百万行的两个表

数百万行的数据库设计

如何在 SQL Server 中更新具有数百万行的大表?