【问题标题】:most reliable format for large bigquery load jobs大型 bigquery 加载作业的最可靠格式
【发布时间】:2019-04-04 16:15:21
【问题描述】:

我有一个 100 GB 的表,我正在尝试将其加载到 google bigquery 中。它在 GCS 上存储为一个 100GB 的 avro 文件。

目前我的bq load 作业失败,并显示无用的错误消息:

UDF worker timed out during execution.; Unexpected abort triggered for
worker avro-worker-156907: request_timeout

我正在考虑尝试不同的格式。我了解 bigquery 支持多种格式(AVRO、JSON、CSV、Parquet 等),原则上可以加载任何这些格式的大型数据集。

但是,我想知道这里是否有人在加载到 bigquery 时可能对这些格式中的哪一种在实践中最可靠/最不容易出现怪癖有经验?

【问题讨论】:

  • 请澄清——“100 GB 表”是指您有一个 100 GB Avro 文件吗?加载较小的文件可能会更好,例如每 1 GB 大小,尽管 BIgQuery 确实并行读取大型 Avro 文件。
  • 是的,我有一个 100 GB 的 avro 文件。在原始问题中得到澄清。
  • 是否可以选择将这个巨大的文件分解成大量的小文件?
  • @hkanjih 是的,我现在正在尝试这个。我很惊讶文档没有提到这种方法。

标签: google-bigquery


【解决方案1】:

我可能会按照以下步骤解决:

  1. 创建大量 csv 格式的小文件
  2. 将文件发送到 GCS

将文件复制到 GCS 的命令:

gsutil -m cp <local folder>/* gs:<bucket name>

gsutil -m 选项执行并行 (多线程/多处理)

之后,我将使用 Cloud Dataflow 默认模板GCS 迁移到 BQlink。 (请记住,使用默认模板不需要代码)

这里是调用数据流link 的示例:

gcloud dataflow jobs run JOB_NAME \
    --gcs-location gs://dataflow-templates/latest/GCS_Text_to_BigQuery \
    --parameters \
javascriptTextTransformFunctionName=YOUR_JAVASCRIPT_FUNCTION,\
JSONPath=PATH_TO_BIGQUERY_SCHEMA_JSON,\
javascriptTextTransformGcsPath=PATH_TO_JAVASCRIPT_UDF_FILE,\
inputFilePattern=PATH_TO_YOUR_TEXT_DATA,\
outputTable=BIGQUERY_TABLE,\
bigQueryLoadingTemporaryDirectory=PATH_TO_TEMP_DIR_ON_GCS

【讨论】:

  • 嗯,既然简单的bq load 就足够了,为什么还要使用数据流作业?
  • 处理时间,我猜那个进程超过100 GB 使用单个进程BQ Load 我会花很长时间。但它可能会起作用:-)
  • 来自 GCS 的 Bigquery 加载作业是并行执行的,所以我也不明白为什么需要数据流作业。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多