我是柱状数据库概念和BigQuery的新手。我注意到,出于性能和成本效率的考虑,建议不仅在逻辑上 - 而且在时间上 - 跨表分割数据。
例如 - 虽然我需要一个表来存储我的日志(1个逻辑表称为“日志”),但实际上认为为不同时期创建一个单独的表是一种好习惯,例如“logs_2012”,“logs_2013” “等等......甚至”logs_2013_01“,”logs_2013_02“等......
我的问题:
1)它实际上是最佳做法吗?
2)最好划线 - 年度表?月表?每日一桌?你明白了......
3)在通过查询检索数据方面 - 最好的方法是什么?我应该使用UNION选项动态构造我的查询吗?如果我将所有日志都放在一个表中 - 我自然会使用where子句来获取所需时间范围的数据,但是将数据分布在多个表中会使它变得奇怪。我来自关系数据库的世界(如果到目前为止还不明显),我正试图尽可能顺利地实现飞跃......
4)使用分布式方法(不同时期的不同表)仍然提出以下问题:在查询数据本身之前 - 我希望能够确定特定的日志类型 - 可用的是什么查询范围。例如 - 对于特定的机器,我想首先向我的用户提供其可用日志的相关范围,并让他们选择该范围内的特定时期以获得洞察力。问题是 - 当我的数据分布在多个表(每个表中有一段时间)时,如何构建这样的查询,我不知道哪些表可用?当我不知道哪些表存在时,如何构造查询?当这个表实际上不存在或者事件最糟糕时,我可能会尝试访问表“logs_2012_12” - 我不知道哪些表是相关的并且可用于我的查询。
希望我的问题有意义......
阿米特
答案 0 :(得分:7)
表格命名
对于每日表格,建议的表格名称模式是表格的特定名称+“20131225”中的日期。例如,“logs20131225”或“logs_20131225”。
理想聚合:日,月,年?
此问题的答案取决于您的数据和查询。
<强>联盟强>
随意做工会。
表格发现
答案 1 :(得分:3)
2016年新答案:分区
现在,您可以在一个表中包含所有内容,并且BigQuery将仅分析所需日期中包含的数据 - 如果您设置了新的分区表:
https://cloud.google.com/bigquery/docs/creating-partitioned-tables