小编Ami*_*mit的帖子

BigQuery 用于记录具有不同属性的不同类型的事件

我想从我的客户端组件记录事件并在谷歌的 BigQuery 中分析它们。我的问题是事件有几种不同的类型(将来可能会添加更多类型) - 每个事件类型都有不同数量和类型的属性。

例如:

{“事件”:“操作”,
    “属性”:{“ts”:1384441115,
          “distinct_id”:“5EB54670”,
          “action_type”:“暂停”,
          “时间”:“5”}}

{“事件”:“操作”,
    “属性”:{“ts”:1384441115,
          “distinct_id”:“5EB54670”,
          “action_type”:“恢复”,
          “时间”:“15”}}

{“事件”:“节”,
    “属性”:{“ts”:1384441115,
          “distinct_id”:“5EB54670”,
          “section_name”:“结束”,
          “dl_speed”:“0.5 Mbit / s”,
          “时间” :“25”}}

我的问题是 - 如何处理表格数据库中的这种多样性?我选择 BigQuery 的原因是它能够处理大数据计算和对我记录的事件进行分析,但要做到这一点,我需要找出记录这些事件的最佳实践。

我考虑了 2 个选项:
1. 有一个大表,其中包含每个事件类型的每个属性的列 - 在这种情况下,每一行都将包含空字段。
2.为每种事件类型都有一个单独的表 - 这会引发两个问题 - 未来的事件将需要新表,甚至最糟糕的是 - 我失去了对所有事件执行计算的能力(因为所有事件共享一些属性,如 ts、distinct_id 和时间)

我很确定我不会用我的用例发明轮子,所以我很想听听你们的最佳实践。谢谢!

阿米特

logging google-bigquery

5
推荐指数
1
解决办法
645
查看次数

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

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

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

我的问题:

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

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

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

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

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

阿米特

dynamic google-bigquery

5
推荐指数
1
解决办法
1679
查看次数

标签 统计

google-bigquery ×2

dynamic ×1

logging ×1