首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于记录具有不同属性的不同类型的事件的BigQuery

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

Stack Overflow用户
提问于 2013-12-11 13:46:35
回答 1查看 464关注 0票数 5

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

例如:

{事件:“行动”,

    “属性”:{“ts”:1384441115,

Distinct_id:“5EB54670”,

“action_type”:“          ”,

          “time”:“5”}

{事件:“行动”,

    “属性”:{“ts”:1384441115,

Distinct_id:“5EB54670”,

Action_type          :“简历”,

          “time”:“15”}

{“事件”:“部分”,

    “属性”:{“ts”:1384441115,

Distinct_id:“5EB54670”,

“section_name”:“          ”,

Dl_speed          :“0.5Mbit/s”,

          “time”:“25”}

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

我想了两个选择:

  1. 拥有一个大型表,该表为每个事件类型的每个属性都有列--在本例中,每行将包含空字段。
  2. 对于每种事件类型都有一个单独的表--这引发了两个问题--未来的事件将需要新的表,甚至是最糟糕的--我不具备对所有事件执行计算的能力(因为所有事件共享一些属性,如ts、distinct_id和time)。

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

阿米特

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-11 16:24:42

你有很多选择:

  1. 使用宽架构。您可以为每种属性类型都有一列。可以使用tables.update()方法将列添加到表中。虽然拥有大量空列似乎效率低下,但这实际上是存储和查询数据的最有效方法。 Null值不需要任何代价来存储(例如,如果您有一个有一百万行的表,而一个列只有10行有一个值,而其余的是null,那么您只需要为存储这10个值收取费用)。更好的是,null值也不需要任何查询费用。拥有一个宽的表模式将意味着您的查询成本更低,因为您不会读取每个查询上的所有属性,只会读取您所关心的列。
  2. 将属性作为键值对存储在重复字段中。在这种情况下,你可能需要一个我们还没有记录的关键字--省略.如果。这是一种非常干净的方法,您最终会得到如下所示的查询 从properties.value中选择my_table省略属性如果properties.name <> "dl_speed“ 当然,在这种情况下,有些查询可能会变得非常尴尬。
  3. 将属性存储在JSON字段中,并提取查询中所需的字段名。我们最近增加了几个功能,这将使这一简单和有效,但他们还没有完全达到生产。我将努力记住,当这些问题出现时,我会更新这个答案,希望是在今天,但12月份的发布计划可能是不可预测的。
  4. 我建议不要另设一张桌子。虽然这是关系数据库世界中常见的处理方法,但是在BigQuery中这是不太有效的。我们通常建议你去美化你的数据。
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20520842

复制
相关文章

相似问题

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