如何从Google Bucket创建分区表?

时间:2018-03-01 17:38:02

标签: command-line google-bigquery gsutil

每个周末我都会向google bucket添加一些文件,然后从命令行运行一些内容,用新数据“更新”表格。

通过“更新”我的意思是我删除了表格,然后使用bucket中的所有文件重新制作它,包括新文件。

我通过使用pythonWindows命令行中执行以下命令来完成所有操作:

bq mk --table --project_id=hippo_fence-5412 mouse_data.partition_test gs://mybucket/mouse_data/* measurement_date:TIMESTAMP,symbol:STRING,height:FLOAT,weight:FLOAT,age:FLOAT,response_time:FLOAT

这个表变得越来越大(> 200 GB),实验室使用分区表会便宜得多。

我尝试过以几种方式对表进行分区,包括official docs推荐的内容,但我无法使其正常工作。

我尝试的最新命令只是插入--time_partitioning_type=DAY,如:

bq mk --table --project_id=hippo_fence-5412 --time_partitioning_type=DAY mouse_data.partition_test gs://mybucket/mouse_data/* measurement_date:TIMESTAMP,symbol:STRING,height:FLOAT,weight:FLOAT,age:FLOAT,response_time:FLOAT

但这不起作用,给我错误:

FATAL Flags parsing error: Unknown command line flag 'time_partitioning_type'

我该如何做到这一点?

1 个答案:

答案 0 :(得分:0)

对于旧数据,可能的解决方案是创建一个空的分区表,然后在所需的日分区中导入每个存储桶文件。不幸的是,当我测试它时,它不适用于通配符。

<强> 1。创建分区表

bq mk --table --time_partitioning_type=DAY [MY_PROJECT]:[MY_DATASET].[PROD_TABLE] measurement_date:TIMESTAMP,symbol:STRING,height:FLOAT,weight:FLOAT,age:FLOAT,response_time:FLOAT

<强> 2。导入所需partition day中的每个文件。以下是2018年2月22日文件的示例。

bq load [MY_PROJECT]:[MY_DATASET].[PROD_TABLE]$20180222 gs://MY-BUCKET/my_file.csv

第3。通常处理当前上传,它们将在上传分区当天自动计算。

bq load [MY_PROJECT]:[MY_DATASET].[PROD_TABLE] gs://MY-BUCKET/files*