在 gcs 上使用 parquet 文件创建新的大查询外部表时。显示错误

Posted

技术标签:

【中文标题】在 gcs 上使用 parquet 文件创建新的大查询外部表时。显示错误【英文标题】:When creating a new big query external table with parquet files on gcs. Showing error 【发布时间】:2018-10-15 18:14:53 【问题描述】:

我试图用 gcs 上的 parquet 文件创建一个大查询外部表。它显示错误的格式错误。

但是使用相同的文件来创建本机表可以正常工作。为什么它必须是本机表。

如果使用原生表,如何将更多数据导入该表?我不想在每次获得新数据时删除和创建表。

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

现在似乎支持此功能,at least in beta。据我所知,这只适用于 us-central1。

Simply select 'External Table' and set 'Parquet' as your file type

【讨论】:

【参考方案2】:

当前的 google 文档可能有点难以理解。这是一个两步过程,首先创建定义文件并将其用作创建表的输入。

创建定义文件,如果您正在处理未分区的文件夹

 bq mkdef \
  --source_format=PARQUET \
  "<path/to/parquet/folder>/*.parquet" > "<definition/file/path>"

否则,如果您正在处理 hive 分区表

bq mkdef \
  --autodetect \
  --source_format=PARQUET \
  --hive_partitioning_mode=AUTO \
  --hive_partitioning_source_uri_prefix="<path/to/hive/table/folder>" \
  "<path/to/hive/table/folder>/*.parquet" > "<definition/file/path>"

注意:path/to/hive/table/folder 不应包含分区 文件夹

例如:如果您的表格以格式加载 gs://project-name/tablename/year=2009/part-000.parquet

bq mkdef \
      --autodetect \
      --source_format=PARQUET \
      --hive_partitioning_mode=AUTO \
      --hive_partitioning_source_uri_prefix="gs://project-name/tablename" \
      "gs://project-name/tablename/*.parquet" > "def_file_name"

最后,可以通过定义文件创建表

bq mk --external_table_definition="<definition/file/path>" "<project_id>:<dataset>.<table_name>"

【讨论】:

这是截至 2020 年 6 月的 cli 的正确答案。我被 bq 加载(创建本机表)卡住了。对于任何想要的人,这里是:bq load --source_format=PARQUET --autodetect --hive_partitioning_mode=AUTO --hive_partitioning_source_uri_prefix=gs://bucket/subdir/ project:dataset:table gs://bucket/subdir/*/file.parquet【参考方案3】:

Parquet 目前不是supported data format for federated tables。只要追加(而不是覆盖)当前内容,就可以将更多数据重复加载到同一个表中。

【讨论】:

以后会支持吗? 你可以file a feature request 看看团队怎么说。 您可以在此处加注星标并关注功能请求:issuetracker.google.com/issues/70116017

以上是关于在 gcs 上使用 parquet 文件创建新的大查询外部表时。显示错误的主要内容,如果未能解决你的问题,请参考以下文章

将 PubSub 流保存到 GCS 中的分区拼花文件

运行 BigQuery 查询并使用气流将数据写入 Parquet 中的云存储桶

为啥在索引 Parquet 文件上计算形状如此缓慢?

parquet(2)读写

无法在 python 中使用 gcs 进行身份验证

Bigquery 在文件大小为 8GB 的​​ GCS 中导出表,即使使用单个通配符 URI 将表导出到小于 1 gb 的文件块中