将已分区(火花)的实木复合地板加载到bigquery表中

时间:2019-06-17 22:12:45

标签: apache-spark google-bigquery parquet

我将数据从spark写入到gcs中的镶木地板文件中,并在日期列上进行了分区。 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为null。

3 个答案:

答案 0 :(得分:1)

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

  1. 将数据加载到暂存表中,并使用额外的步骤将数据传递给最终表,并添加包含路径的列。

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

答案 1 :(得分:1)

我假设它们是蜂巢分区,因为它们看起来像这样,但是如果我错了,请纠正我。试试这个:-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 应该可以。

答案 2 :(得分:-1)

对于该问题,解决方案非常简单,只需在行的末尾添加*.parquet

bq --location=US load --source_format=PARQUET 'workspace:marcin_test.dataset_table' "gs://mybucket/dataset/fileDate=2019-06-17/*.parquet"
bq load \
--source_format=PARQUET \
dataset.table \
"gs://mybucket/00/*.parquet","gs://mybucket/01/*.parquet"

https://cloud.google.com/bigquery/docs/loading-data-cloud-storage-parquet

当对镶木地板数据进行分区时,问题就会出现,那时候使用bg加载数据流或使用数据流可能是一个不错的选择。