drill支持的数据类型

支持的数据类型

drill具有多种类型的数据源的读写操作。

SQL Data TypeDescriptionExample
BIGINT8字节有符号整数,范围为-9,223,372,036,854,775,808至9,223,372,036,854,775,8079223372036854775807
BINARY可变长度字节字符串B @ e6d9eb7
BOOLEANTrue or falsetrue
DATE自公元前4713年以来采用YYYY-MM-DD格式的年,月和日2015-12-30
DECIMAL(p,s), or DEC(p,s), NUMERIC(p,s)*38位精度数字,精度为p,小数位数为sDECIMAL(6,2)为1234.56,小数点前4位和小数点后2位
FLOAT4字节浮点数0.456
DOUBLE, DOUBLE PRECISION8字节浮点数,可精确缩放0.456
INTEGER or INT4字节有符号整数,范围为-2,147,483,648到2,147,483,6472147483646
INTERVAL**一天时间或年月间隔‘1 10:20:30.123’ (day-time) or ‘1-2’ year to month (year-month)
SMALLINT***2字节有符号整数,范围为-32,768到32,76732000
TIME基于2001年1月1日之前或之后的24小时制时间,以小时,分钟,秒的格式显示:HH:mm:ss22:55:55.23
TIMESTAMPJDBC时间戳,以年,月,日,时,分,秒和可选的毫秒格式表示:yyyy-MM-dd HH:mm:ss.SSS2015-12-30 22:55:55.23
CHARACTER VARYING, CHARACTER, CHAR,**** or VARCHARUTF8编码的可变长度字符串。默认限制为1个字符。最大字符数限制为2147483647。CHAR(30)将数据转换为最多30个字符的字符串。

*从Drill 1.14开始,默认情况下启用DECIMAL数据类型。
**在内部,INTERVAL表示为INTERVALDAY或INTERVALYEAR。
***当前不支持SMALLINT。
**** Drill内部将CHAR数据类型表示为VARCHAR。

DECIMAL数据类型

从Drill 1.14开始,默认情况下启用DECIMAL数据类型支持。Drill使用vardecimal数据类型以压缩格式存储十进制和数字数据类型,以优化存储空间。vardecimal数据类型将十进制和数字值存储为可表示任何十进制精度的可变长度列。

在Drill中,SQL DECIMAL和NUMERIC数据类型映射到java.math.BigDecimal Java数据类型。

句法

DECIMAL数据类型接受数值,您可以为其定义精度和小数位数,如下所示:

column_name DECIMAL[(precision[,scale])]

精度是一个整数,指示该数字将包含多少个数字。比例尺是一个整数,表示小数点右边的位数。例如,数字2325.67的精度为6,小数位数为2。在查询中,DECIMAL(6,2)。

比例不能大于精度。如果未指定精度或小数位数,则默认精度为38,小数位数为0。

Decimal Data Type Storage Format Support

Drill可以从以下存储格式读取十进制数据类型,并将十进制数据类型写入以下存储格式:

  • parquet

Drill可以从以下存储格式读取十进制数据类型,但不能向其写入十进制数据类型:

  • hive
  • jdbc
  • avro

Decimal Type Options

您可以将SET命令与该planner.enable_decimal_data_type选项一起使用,以关闭和打开DECIMAL数据类型支持。如果禁用该planner.enable_decimal_data_type选项(将其设置为false),则Drill会将十进制文字视为DOUBLE。

复合类型

Drill支持以下复合类型:

  • Map
  • List
    map是一组名称/值对。map中的值可以是标量类型(例如字符串或整数),也可以是复杂类型(例如数组或其他映射)。数组是值的重复列表。数组中的值可以是标量类型,例如字符串或整数,或者数组可以是复杂类型,例如映射或另一个数组。

Drill在内部使用映射和数组数据类型来从数据源读取复杂和嵌套的数据结构。在此版本的Drill中,您无法在查询中按名称引用复合类型,但Drill支持来自数据源的数组值。例如,您可以使用index语法查询数据并获取数组元素的值:

a[1]

您可以使用点表示法来引用映射中键的值:

t.m.k

ANY Type

ANY类型是Drill的一项关键技术进步,使它能够解决较晚的键入问题。Drill在内部使用ANY类型,您可能会在DESCRIBE或其他命令的输出中看到对ANY的引用。您不能在此版本中将值强制转换为ANY类型。

使用ANY类型,解析器将解析某个值的类型的问题推迟到查询实际运行之前。到那时,Drill为每个记录批次提供了一个经验模式,可用于最终代码生成和优化。如果经验模式由于数据处理的更改而发生更改,则Drill会根据需要重新生成代码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值