【发布时间】:2018-10-15 18:14:53
【问题描述】:
我试图用 gcs 上的 parquet 文件创建一个大查询外部表。它显示错误的格式错误。
但是使用相同的文件来创建本机表可以正常工作。为什么它必须是本机表。
如果使用原生表,如何将更多数据导入该表?我不想在每次获得新数据时删除和创建表。
任何帮助将不胜感激。
【问题讨论】:
标签: google-bigquery google-cloud-storage parquet
我试图用 gcs 上的 parquet 文件创建一个大查询外部表。它显示错误的格式错误。
但是使用相同的文件来创建本机表可以正常工作。为什么它必须是本机表。
如果使用原生表,如何将更多数据导入该表?我不想在每次获得新数据时删除和创建表。
任何帮助将不胜感激。
【问题讨论】:
标签: google-bigquery google-cloud-storage parquet
现在似乎支持此功能,at least in beta。据我所知,这只适用于 us-central1。
Simply select 'External Table' and set 'Parquet' as your file type
【讨论】:
当前的 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>"
【讨论】:
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
Parquet 目前不是supported data format for federated tables。只要追加(而不是覆盖)当前内容,就可以将更多数据重复加载到同一个表中。
【讨论】: