maxcompute 2.0复杂数据类型之struct
1. 含義
類似于Java中的類的概念。包含很多類的屬性。
2. 場景
什么樣的數(shù)據(jù),適合使用struct類型來存儲呢?這里列舉了幾個我在開發(fā)中實際用到的場景。
2.1 多個具有相同前綴的字段
其實struct完全可以拆成多個字段。但是對于比較寬的表而言,會有如下特征:
(1)字段數(shù)很多,幾百個甚至更多;
(2)相近含義的字段,會放到相鄰的位置或者使用相同的前綴,以便查找;
對于這種字段,可以考慮放到一個struct里,減少表的字段數(shù),更加方便查找。但是數(shù)據(jù)字典的維護,依然是比較麻煩的問題。
2.2 對象列表
對象有多種固定的屬性,簡單的key-value格式無法滿足,可以使用array嵌套struct的方式定義。減少了維護數(shù)據(jù)字典的工作量。
3. 玩轉(zhuǎn)struct
3.1 構(gòu)造struct
3.1.1 struct
SELECT STRUCT(4,'趙六','男') AS c;| {"col1":4,"col2":"趙六","col3":"男"} |
在沒有指定struct內(nèi)具體字段名的時候,默認(rèn)為col1、col2、col3、……。所以取值的時候也是這樣取,如下:
SELECT STRUCT(4,'趙六','男').col3 AS c;| 男 |
3.1.2 named_struct
SELECT NAMED_STRUCT('id',3,'name','王五','gender','男') AS c;| {"id":3,"name":"王五","gender":"男"} |
指定了struct內(nèi)具體字段名,則named_struct的參數(shù)數(shù)量必須為偶數(shù),分別是key1、value1、key2、value2、key3、value3、……。所以取值的時候也是這樣取,如下:
SELECT NAMED_STRUCT('id',3,'name','王五','gender','男').gender AS c;| 男 |
3.2 橫縱雙向展開struct數(shù)組
例如現(xiàn)在有這樣一張表:
| [{id:1, name:張三, gender:男}, {id:3, name:王五, gender:男}, {id:2, name:李四, gender:男}] |
現(xiàn)在想橫向、縱向都展開,成多行多列格式,那么就這樣做:
SELECT INLINE(c) FROM `test_table`;| 1 | 張三 | 男 |
| 3 | 王五 | 男 |
| 2 | 李四 | 男 |
但是這種做法自由度太低,所以很少會使用到。
4. 常見用法
總結(jié)
以上是生活随笔為你收集整理的maxcompute 2.0复杂数据类型之struct的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【NET CORE微服务一条龙应用】第三
- 下一篇: React Native组件开发指南