首页 > 解决方案 > 加载 Parquet 文件时,Google BigQuery 失败并显示“查询执行期间超出资源:UDF 内存不足”

问题描述

我们使用 BigQuery Java API 从本地数据源上传数据,如此处所述。上传包含 18 列(16 个字符串、1 个 float64、1 个时间戳)和 13 个 Mio 行(例如 17GB 数据)的 Parquet 文件时,上传失败,并出现以下异常:

查询执行期间资源超出:UDF 内存不足。;未能读取 Parquet 文件。如果文件包含太大的行,或者为查询列加载的页面的总大小太大,则可能会发生这种情况。

但是,当使用 CSV(17.5GB 数据)上传相同的数据时,上传成功。我的问题是:

谢谢托拜厄斯

标签: google-bigquery

解决方案


Parquet 是列式数据格式,这意味着加载数据需要读取所有列。在parquet中,列分为页面。BigQuery 在从内存中读取数据时,会将每列的整个未压缩页面保留在内存中。如果输入文件包含太多列,BigQuery 工作人员可能会遇到Out of Memory错误。

即使没有像其他格式那样强制执行精确的限制,建议记录应该在 50 Mb 的范围内,加载更大的记录可能会导致resourcesExceeded错误。

考虑到上述考虑,最好澄清以下几点:

  1. Parquet 文件中的最大行数是多少?
  2. 每列的最大页面大小是多少?

可以通过公开工具检索此信息。

如果您考虑增加查询的分配内存,则需要阅读Bigquery slots


推荐阅读