《《《《《《《 大棒槌QAQ 》》》》》》》
- YDB多值列介绍
在一个列里可以存储多个值。比如,可以将一个人 的多个标签值 存储在一个记录里面,一个人的每天的行为数据 放在一个记录里面。
- 适用场景
有一个表存储学生的一些特征数据例如,姓名、年龄、体重、身高等。
如下图所示
- 多值列类型
多值列所有数据类型均为按列存储
- 多值列支持的数据格式
①支持以空格分割的数据
例如:11 22 33 44
②支持指定的json数据
例如:[“1111”,”22222”,”33333”,”44444”]
③支持以特殊字符分割的数据
例如:ab#cd#ef#gg (以’#’号分割)
1b2b3 (以小写字母’b’分割)
1.1P1.2P1.3 (以大写字母’P’分割)
50^Y30^Y40 (以不可见字符’\u0019’分割)
a&b (以’&’号分割)
c%d (以’%’号分割)
22:33:44 (以英文’:’号分割)
- 多值列注意点
①多值列,返回的值的无序,并且是排重的。
②如果传递的是空值,会当做null处理。
③默认传递的数值是按照空格分割的,若以其他字符分割需特殊处理。
④以特殊字符分割的数值需要将特殊字符进行url转码。
以下是一些特殊字符的转码表:
- -
多值列使用例
数据样例:字段间以’\t’分割,^Y为不可见字符’\u009’
1 Gb#QPt 105b82 10.50P8.20 105^Y82 Gb&QPt Gb QPt [“105”,”82”]
①创建多值列类型表
create ydbtable mvdtest(id int,
one y_string_idm,
two y_tlong_idm,
three y_tdouble_idm,
four y_tlong_idm,
five y_string_idm,
six y_string_idm,
seven y_string_idm
)
②向多值列表中导入数据
sh ydbimport.sh -local -ov -t mvdtest -p one -tp txt -f /root/testdata/shtest/mvd.txt -sp '\t' -fl id,one,two,three,four,five,six,seven -mvsplit one %23 utf-8 -mvsplit two b utf-8 -mvsplit three P utf-8 -mvsplit four %19 utf-8 -mvsplit five %26 utf-8
③查询语句
select * from mvdtest where ydbpartition='one' limit 10;
④单列group by
select two,count(*) from mvdtest where ydbpartition='one' group by two limit 10;
⑤普通列与多值列group by
select id,two,count(*) from mvdtest where ydbpartition='one' group by id, two limit 10;
⑥双列多值列group by
select one,two,count(*) from mvdtest where ydbpartition='one' group by one, two limit 10;
好了大概就这么多了,有不理解或者有觉得不妥当的地方。欢迎联系延云进行交流。
更多的用法,感兴趣的童鞋可以去延云官网了解一下
延云YDB咨询电话:400-188-4800
延云官方QQ技术交流群:521648211