更新时间:2024-12-13 GMT+08:00
分享

复杂类型

ARRAY

数组。

示例:ARRAY[1, 2, 3]。

--创建ARRAY类型表
create table array_tb(col1 ARRAY<STRING>);

--插入一条ARRAY类型数据
insert into array_tb values(ARRAY['HetuEngine','Hive','Mppdb']);

--查询数据
select * from array_tb; --    [HetuEngine, Hive, Mppdb]

MAP

键值对数据类型。

示例:MAP(ARRAY['foo', 'bar']、ARRAY[1, 2])。

--创建Map类型表
create table map_tb(col1 MAP<STRING,INT>);

--插入一条Map类型数据
insert into map_tb values(MAP(ARRAY['foo','bar'],ARRAY[1,2]));

--查询数据
select * from map_tb; --   {bar=2, foo=1} 

ROW

ROW的字段可是任意所支持的数据类型,也支持各字段数据类型不同的混合方式。

--创建ROW表
create table row_tb (id int,col1 row(a int,b varchar));

--插入ROW类型数据
insert into row_tb values (1,ROW(1,'HetuEngine'));

--查询数据
select * from row_tb; 
 id |     col1     
----|--------------z
  1 | {a=1, b=HetuEngine} 

--字段是支持命名的,默认情况下,Row的字段是未命名的
select  row(1,2e0),CAST(ROW(1, 2e0) AS ROW(x BIGINT, y DOUBLE));
           _col0          |    _col1     
------------------------|--------------
 {1, 2.0} | {x=1, y=2.0} 
(1 row) 

--命名后的字段,可以通过域操作符"."访问
select col1.b from row_tb; -- HetuEngine

--命名和未命名的字段,都可以通过位置索引来访问,位置索引从1开始,且必须是一个常量
select col1[1] from row_tb;   -- 1

IPADDRESS

IP地址,可以表征IPv4或者IPv6地址。但在系统内,该类型是一个统一的IPv6地址。

对于IPv4的支持,是通过将IPv4映射到IPv6的取值范围(RFC 4291#section-2.5.5.2)来实现的。当创建一个IPv4时,会被映射到IPv6。当格式化时,如果数据是IPv4又会被重新映射为IPv4。 其他的地址则会按照RFC 5952所定义的规范格式来进行格式化。

示例:

select IPADDRESS '10.0.0.1', IPADDRESS '2001:db8::1';
  _col0   |    _col1
----------|-------------
 10.0.0.1 | 2001:db8::1
(1 row)

UUID

标准UUID (Universally Unique IDentifier),也被称为GUID (Globally Unique IDentifier)。

遵从RFC 4122标准所定义的格式。

示例:

select UUID '12151fd2-7586-11e9-8f9e-2a86e4085a59';
                _col0
--------------------------------------
 12151fd2-7586-11e9-8f9e-2a86e4085a59
(1 row)

HYPERLOGLOG

基数统计。

用HyperLogLog来近似计算唯一数的计数值,其代价要远远小于用count来计算。

参见HyperLogLog函数函数。

  • HyperLogLog

    A HyperLogLog sketch可以用来高效的计算distinct()的近似值。

    它以一个稀疏的表征开始,然后变成一个密集的表征,此时效率将变得更高。

  • P4HyperLogLog

    类似于A HyperLogLog sketch,但是它以一个密集的表征开始。

QDIGEST

分位数(Quantile),亦称分位点,是指将一个随机变量的概率分布范围分为几个等份的数值点,常用的有中位数(即二分位数)、四分位数、百分位数等。quantile digest是一个分位数的集合,当需要查询的数据落在某个分位数附近时,就可以用这个分位数做为要查询数据的近似值。它的精度可以调节,但更高精度的结果会带来空间的昂贵开销。

STRUCT

底层用ROW实现,参照ROW

示例:

-- 创建struct 表
create table struct_tab (id int,col1 struct<col2: integer, col3: string>);

--插入 struct 类型数据
 insert into struct_tab VALUES(1, struct<2, 'HetuEngine'>);

--查询数据
select * from struct_tab; 
 id |        col1         
----|---------------------
  1 | {col2=2, col3=HetuEngine} 

相关文档