将分区(火花)镶木地板加载到 bigquery 表

Posted

技术标签:

【中文标题】将分区(火花)镶木地板加载到 bigquery 表【英文标题】:Load partitioned (spark) parquet to a bigquery table 【发布时间】:2019-06-17 22:12:45 【问题描述】:

我将数据从 spark 写入 gcs 中的 parquet 文件,并在日期列上分区。 gcs 中的数据如下所示:

gs://mybucket/dataset/fileDate=2019-06-17/000.parquet
gs://mybucket/dataset/fileDate=2019-06-17/001.parquet

我想将此加载到 bigquery,以便从路径填充结果(分区)表中的列 fileDate。我该怎么做?

到目前为止,我尝试的是创建表并将数据加载到其中

bq --location=US load --source_format=PARQUET 'workspace:marcin_test.dataset_table' 'gs://mybucket/dataset/fileDate=2019-06-17/*'

这适用于加载数据,但 fileDate 为空。

【问题讨论】:

【参考方案1】:

我假设它们是 hive 分区的,因为它们看起来像这样,但如果我错了,请纠正我。试试这个:- bq load --source_format=PARQUET --autodetect --hive_partitioning_mode=AUTO --hive_partitioning_source_uri_prefix=gs://mybucket/dataset/ project-id:dataset_name.table_name gs://mybucket/dataset/fileDate=2019-06-17/*.parquet

参考:https://cloud.google.com/bigquery/docs/hive-partitioned-loads-gcs 它应该可以工作。

【讨论】:

欢迎来到 SO!请相应地格式化您的答案中的代码。 谢谢。看起来这个功能很新。 从我在这里看到的分区被添加到最终表中,但在创建的表上没有发生实际的分区【参考方案2】:

加载数据时没有内置功能可以完成此操作。可能的解决方法是:

    将数据加载到临时表并使用额外的步骤将数据传递到最终表,添加包含路径的列。

    执行一些 ETL 过程(例如使用 Dataprep 或 Dataflow),而不是使用 bq 工具加载数据。

【讨论】:

以上是关于将分区(火花)镶木地板加载到 bigquery 表的主要内容,如果未能解决你的问题,请参考以下文章

从多个火花工人以镶木地板格式保存

BigQuery 加载镶木地板错误 - Parquet 中的字段 INT32 与架构中的 double 类型不兼容

从具有时间戳的镶木地板蜂巢表中读取火花

覆盖和附加到镶木地板有啥区别

如何从配置单元表插入分区表(作为镶木地板)?

将火花数据帧写入镶木地板格式时出现内存不足错误