提取 BigQuery 分区表

问题描述 投票:0回答:3

有没有一种方法可以通过一个命令提取完整的 BigQuery 分区表,以便将每个分区的数据提取到格式为 part_col=date_yyyy-mm-dd 的单独文件夹中

既然Bigquery分区表可以从hive类型的分区目录中读取文件,有没有办法以类似的方式提取数据。我可以单独提取每个分区,但是当我提取很多分区时,这非常麻烦

google-bigquery
3个回答
8
投票

您可以通过编程来完成此操作。例如,您可以使用分区装饰器导出分区数据,例如table$20190801。然后在 bq extract 命令上,您可以使用 URI Patterns (查看工人模式的示例)来获取 GCS 对象。

由于所有对象都位于同一个存储桶中,因此文件夹只是分层幻觉,因此您也可以在文件夹上指定 URI 模式,但不能在存储桶上指定 URI 模式。

因此,您可以编写一个脚本,在其中循环 DATE 值,例如:

bq extract 
--destination_format [CSV, NEWLINE_DELIMITED_JSON, AVRO] 
--compression [GZIP, AVRO supports DEFLATE and SNAPPY] 
--field_delimiter [DELIMITER] 
--print_header [true, false] 
[PROJECT_ID]:[DATASET].[TABLE]$[DATE]
gs://[BUCKET]/part_col=[DATE]/[FILENAME]-*.[csv, json, avro]

仅使用 bq 命令无法自动完成此操作。为此,最好按照 Felipe 的建议“提出功能请求”。


0
投票
test_dataset

将项目设置为

gcloud init

bq extract --destination_format=CSV 'test_partitiontime$20210716' gs://testbucket/20210716/test*.csv

这将在 

20210716

内创建一个名为

testbucket
的文件夹,并在其中写入文件。
    


0
投票

#!/bin/bash input_start=2018-1-1 input_end=2018-3-1 project=myproject dataset=mydataset table=table_of_stuff startdate=$(date -I -d "$input_start") || exit -1 enddate=$(date -I -d "$input_end") || exit -1 d="$startdate" while [[ "$d" < "$enddate" ]]; do year_val=$(date --date="$d" +%Y) mon_val=$(date --date="$d" +%m) day_val=$(date --date="$d" +%d) echo bq extract --location=US --destination_format PARQUET --compression SNAPPY $project:$dataset.$table\$$year_val$mon_val$day_val gs://your_bucket/table_archive/$year_val/$dataset/$table/date_col=$year_val$mon_val$day_val/*.parquet d=$(date -I -d "$d + 1 day") done

	
© www.soinside.com 2019 - 2024. All rights reserved.