【问题标题】:BigQuery faster way to insert million of rowsBigQuery 更快地插入数百万行的方法
【发布时间】:2016-05-25 12:54:41
【问题描述】:

我正在使用 bq 命令行并尝试每天用一张表插入大量 json 文件。

我的做法:

  1. 列出所有要推送的文件(日期名为 YYYMMDDHHMM.meta1.meta2.json)
  2. 在同一天文件中连接 => YYYMMDD.ndjson
  3. 拆分 YYYMMDD.ndjson 文件(每个 500 行文件)YYYMMDD.ndjson_splittedij

遍历 YYYMMDD.ndjson_splittedij 并运行

bq  insert --template_suffix=20160331 --dataset_id=MYDATASET TEMPLATE YYYMMDD.ndjson_splittedij

这种方法有效。我只是想知道是否可以改进它。

【问题讨论】:

    标签: google-bigquery


    【解决方案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 帮助加载”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-27
    • 1970-01-01
    • 2021-01-05
    相关资源
    最近更新 更多