首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按日期划分表的BigQuery最佳实践

问按日期划分表的BigQuery最佳实践
EN

Stack Overflow用户
提问于 2013-12-12 12:48:21
回答 2查看 1.9K关注 0票数 5

我对柱状DB概念,尤其是BigQuery还很陌生。我注意到,出于性能和成本效益的考虑,建议不仅在逻辑上而且在时间上将数据拆分到表中。

例如,虽然我需要一个表来存储我的日志(称为“日志”的一个逻辑表),但实际上有一个不同时期的单独的表(如"logs_2012“、"logs_2013”等等)被认为是一种良好的实践.甚至"logs_2013_01","logs_2013_02“等等.

我的问题:

1)这实际上是最佳做法吗?

( 2)最好在哪里划定界线-年度表格?每月一张桌子?一张每日餐桌?你明白重点了..。

3)在通过查询检索数据方面,最好的方法是什么?我应该使用UNION选项动态地构造查询吗?如果我将所有日志都放在一个表中--我自然会使用where子句来获取所需时间范围内的数据,但是将数据分布在多个表上会使情况变得很奇怪。我来自关系数据库世界(如果到目前为止还不是很明显的话),我正试图尽可能顺利地实现这个飞跃.

4)使用分布式方法(不同时间段的不同表)仍然会引发以下问题:在查询数据本身之前--我希望能够确定特定的日志类型--查询的可用范围是多少。例如,对于一台特定的机器,我想首先向我的用户介绍他们可用日志的相关范围,并让他们在该范围内选择特定的时间段以获得洞察力。问题是,如果我的数据分布在多个表(每个表都有一段时间)上,而我不知道哪些表是可用的,那么如何构造这样的查询呢?当我不知道存在哪些表时,如何构造查询?当该表实际上不存在时,我可能尝试访问该表"logs_2012_12“,或者最糟糕的事件--我不知道哪些表与我的查询相关,哪些表可用。

希望我的问题有意义..。

阿米特

EN

回答 2

Stack Overflow用户

发布于 2013-12-12 18:14:25

表命名

对于每日表,建议的表名模式是表的特定名称+类似于“20131225”中的日期。例如,"logs20131225“或"logs_20131225”。

理想聚合:天、月、年?

这个问题的答案将取决于您的数据和查询。

  • 你通常会查询一两天的数据吗?然后有每日表,您的成本就会低得多,因为您只查询您需要的数据。
  • 你通常会查询所有的数据吗?然后将所有数据放在一个表中。在一个查询中拥有多个表会随着要查询的表数的增加而变慢。
  • 如果有疑问,两者都做!你可以有每天,每月,每年的表格。对于较小的存储成本,当执行只针对预期数据的查询时,可以节省很多。

工会

你可以自由地做工会。

  • 请记住,每个查询有1000个表的限制。这意味着如果您有每日表,您将无法查询3年的数据(3*365 > 1000)。
  • 请记住,BigQuery中的联合不使用UNION关键字,而是使用其他数据库用于联接的",“。BigQuery中的联接可以使用显式的SQL关键字JOIN来完成(或者为非常大的联接而加入每个连接)。

表发现

  • API:tables.list将通过API列出数据集中的所有表。
  • SQL:查询SQL中的表列表.继续关注。
票数 7
EN

Stack Overflow用户

发布于 2016-06-27 18:50:51

2016年新答案:分区

现在,您可以将所有内容都放在一个表中,如果您设置了新的分区表,BigQuery将只分析所需日期中包含的数据:

https://cloud.google.com/bigquery/docs/creating-partitioned-tables

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

https://stackoverflow.com/questions/20544040

复制
相关文章

相似问题

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