【问题标题】:How to create partitioned table from Google Bucket?如何从 Google Bucket 创建分区表?
【发布时间】:2018-08-09 20:52:43
【问题描述】:

每个周末我都会向 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'

我怎样才能做到这一点?

【问题讨论】:

  • 您确定可以在命令行中提供数据吗? “gs://mybucket/mouse_data/*”?该命令的用法是“bq mk table_name table_schema”。
  • 所以命令语法应该是:bq [--global_flags] [--command_flags] [args] eg: bq --project_id=... mk --table=... --time_partitioning_type=...

标签: command-line google-bigquery gsutil


【解决方案1】:

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

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*

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2013-01-12
  • 2018-02-27
  • 2015-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多