按日期细分表的BigQuery最佳实践

Ami*_*mit 5 dynamic google-bigquery

我是柱状DB概念和BigQuery的新手.我注意到,出于性能和成本效率的考虑,建议不仅在逻辑上 - 而且在时间上 - 跨表分割数据.

例如 - 虽然我需要一个表来存储我的日志(1个逻辑表称为"日志"),但实际上认为在不同时期有一个单独的表是一个好习惯,例如"logs_2012","logs_2013"​​等......甚至"logs_2013_01","logs_2013_02"等......

我的问题:

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

2)最好划线 - 年度表?月表?每日一桌?你明白了......

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

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

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

阿米特

Fel*_*ffa 7

表命名

对于每日表格,建议的表格名称模式是表格的特定名称+"20131225"中的日期.例如,"logs20131225"或"logs_20131225".

理想的聚合:日,月,年?

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

  • 您通常会查询一到两天的数据吗?然后有每日表格,而且您的成本会低得多,因为您只查询所需的数据.
  • 您通常会查询所有数据吗?然后将所有数据放在一个表中.随着查询表的数量的增长,在一个查询中包含许多表可能会变慢.
  • 如果有疑问,两个都做!您可以拥有每日,每月,每年的表格.对于较小的存储成本,在执行仅针对目标数据的查询时可以节省很多.

工会

随意做工会.

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

表发现

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