YDB多值列讲解

什么是YDB多值列?

      顾名思义,多值列就是在一个列中可以存储与该条件相关的多个关键值。比如:可以将一个人的多个标签值存储在一个记录里面,一个人每天的行为数据放在一个记录里面。


 举个例子说明多值列的应用场景

在数据库中,多值列可应用的场景非常多,如:

1.某网站用户登录日志中记录同一用户的不同登录时间。

2.某小说作家名下所有小说名称。

2.某中学学生的一些特征数据的表格,例如:姓名、年龄、体重、身高等。 如下图所示 :


多值列类型

多值列中所有数据类型均为按列存储。

 

多值列支持的数据格式

①支持以空格分割的数据 例如: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;