BigQuery本身是一个半结构化的数据库,至于半结构化这个东西,简单理解就是mysql中的一列变成了一个json。
就向下面这张图一样,图里只有两行数据,但是每行中又由相同的行构成。

它的结构也是提前定好的,是不能插入不存在的字段的,但repeated字段是可以重复的。
所以可以看到命令的参数名称实际是作为event_params.key这个字段中的值存在的,
而这个参数本身的值是event_params.value中的四个列
[string_value,int_value,float_value,double_value]中的某一个值。
因此,你可以无限添加命令字而无需修改表结构。
半结构化的表比结构化的更灵活,而又因为是有结构的, 所以可以用sql高效的来查询。
它的好处是可以在一张表里存不同的结构,
比如典型的命令表,每个命令的参数个数和类型都是不一样的,
然而uid,server这些又是相同的。
repeated就可以让他们存在一张表里,而不是每个命令都建一张表。
缺点是涉及到动态repeated字段的查询很麻烦,需要用到unnest去解开。

待续。。。
网友评论