首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Google大查询拆分摄取时间分区表

Google大查询拆分摄取时间分区表
EN

Stack Overflow用户
提问于 2018-04-27 00:10:54
回答 2查看 937关注 0票数 0

我有一个摄入时间分区表,它变得有点大了。我希望按其中一列中的值进行分组,并使用该值将其拆分为多个表。在保留新的摄入时间分区表中的原始_PARTITIONTIME值的同时,是否有一种简单的方法来做到这一点?

同时,我也希望能得到一些相对简单/便宜的东西。我可以多次复制我的表,然后删除每个副本上除了一个值之外的所有数据,但是对于所有这些删除操作,我都会收取巨额费用。

而且,在我想要分割的列中有足够的唯一值,将"WHERE列= value“的查询结果保存到表中,因为每个值的代价都很高。我没有找到任何提到这种方法是否会保留分区的文档,所以即使它的成本不高,它也可能不起作用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-27 20:58:43

您所描述的需要有两个级别的分区的情况,目前还不支持。

您可以创建列分区表https://cloud.google.com/bigquery/docs/creating-column-partitions,并在此之后根据需要创建这个列值,用于在插入之前进行分区,但在本例中,您丢失了_PARTITIONTIME值。

基于更多的澄清--我也遇到了类似的问题--我的解决方案是编写读取源表的python应用程序(读取在这里很重要--而不是查询--因此它是免费的)--根据您的标准和流数据(简单,但不是免费)分割数据,或者生成json/csv文件并将其上传到目标表(这些文件也将是免费的,但这些操作的数量有一些限制)--如果您选择第二条路线,则需要更多的编码/异常处理。

您也可以通过DataFlow来完成它--它肯定比自定义解决方案更昂贵,但可能更健壮。

gcloud python库示例

代码语言:javascript
运行
复制
client = bigquery.Client(project="PROJECT_NAME")

t1 = client.get_table(source_table_ref)
target_schema = t1.schema[1:] #removing first column which is a key to split
ds_target = client.dataset(project=target_project, dataset_id=target_dataset)

rows_to_process_iter = client.list_rows( t1, start_index=start_index, max_results=max_results)
# convert to list
rows_to_process = list(rows_to_process_iter)
# doing something with records

# stream records to destination 
errors = client.create_rows(target_table, records_to_stream)
票数 1
EN

Stack Overflow用户

发布于 2018-09-17 23:43:16

BigQuery现在支持https://cloud.google.com/bigquery/docs/clustered-tables分区表,它允许您指定数据应该被分割的其他列。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50053516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档