BigQuery本身是一個半結構化的數據庫,至于半結構化這個東西,簡單理解就是mysql中的一列變成了一個json。
就向下面這張圖一樣,圖里只有兩行數據,但是每行中又由相同的行構成。

它的結構也是提前定好的,是不能插入不存在的字段的,但repeated字段是可以重復的。
所以可以看到命令的參數名稱實際是作為event_params.key這個字段中的值存在的,
而這個參數本身的值是event_params.value中的四個列
[string_value,int_value,float_value,double_value]中的某一個值。
因此,你可以無限添加命令字而無需修改表結構。
半結構化的表比結構化的更靈活,而又因為是有結構的, 所以可以用sql高效的來查詢。
它的好處是可以在一張表里存不同的結構,
比如典型的命令表,每個命令的參數個數和類型都是不一樣的,
然而uid,server這些又是相同的。
repeated就可以讓他們存在一張表里,而不是每個命令都建一張表。
缺點是涉及到動態(tài)repeated字段的查詢很麻煩,需要用到unnest去解開。

待續(xù)。。。