【Hive】数据类型

1.基本类型

  整型:tinyint / samllint / int / bigint

  浮点型:float / double / Decimals

  布尔型:boolean

  字符串:string / varchar / char

  注意:默认情况下,整数型为INT型,当数字大于INT型的范围时,会自动解释执行为BIGINT,或者使用以下后缀进行说明。TINYINT - Y ,SMALLINT - S,BIGINT - L

       Decimal用于表示任意精度的小数类型,且支持科学计数法和非科学计数法。

     示例:CREATE TABLE foo (
          a DECIMAL, – Defaults to decimal(10,0)   //设置默认值
          b DECIMAL(9, 7)
        )

     Varchar类型使用长度说明符(介于1和65355之间)创建,它定义字符串中允许的最大字符数。

       Char字符类型与Varchar类似,但它们是固定长度的,意味着比指定长度值短的值用空格填充。

        vname varchar(20),cname char(20)    vname不够20字符不用空格填充,name用。

2.时间类型

  (1)Timestamps

  支持传统的UNIX时间戳和可选的纳秒精度。
  - 支持的转化:
  - 整数数字类型:以秒为单位解释为UNIX时间戳
  - 浮点数值类型:以秒为单位解释为UNIX时间戳,带小数精度
  - 字符串:符合JDBC java.sql.Timestamp格式“YYYY-MM-DD HH:MM:SS.fffffffff”(9位小数位精度)
  时间戳被解释为无时间的,并被存储为从Unix纪元的偏移量。 提供了用于转换到和从时区转换的便捷UDFs(to_utc_timestamp,from_utc_timestamp)。
  所有现有的日期时间UDFs(月,日,年,小时等)都使用TIMESTAMP数据类型。
  Text files中的时间戳必须使用格式yyyy-mm-dd hh:mm:ss [.f …]。 如果它们是另一种格式,请将它们声明为适当的类型(INT,FLOAT,STRING等),并使用UDF将它们转换为时间戳。
  在表级别上,可以通过向SerDe属性”timestamp.formats”(自版本1.2.0 with HIVE-9298)提供格式来支持备选时间戳格式。 例如,yyyy-MM-dd’T’HH:mm:ss.SSS,yyyy-MM-dd’T’HH:mm:ss。

  (2)Dates
  DATE值描述特定的年/月/日,格式为YYYY-MM-DD。 例如,DATE’2013-01-01’。 日期类型没有时间组件。 Date类型支持的值范围是0000-01-01到9999-12-31,这取决于Java Date类型的原始支持。
  Date types只能在Date, Timestamp, or String types之间转换。 

  (3)Intervals

   时间间隔。

3.复杂数据类型

  Array

  Map

  Struct

  示例

  

Array:

create table student(
  sid int,   sname string,   grade array<float>);   desc student; {1,Tom,[99,100,98]}

Map:

create table student2(
  sid int,   sname string,   grade map<string,float>);   desc student2; {1,Tom,<'math',100>}

Combine:

create table student3(
  sid int,   sname string,   grade array<map<string,float>>);   desc student3; {1,Tom,[<'math',100>,<'english',100>]}

Struct:

create table student4(
  sid int,   info struct<name:string,age:int,sex:string>)   desc student4; {1,{'Tom', 10, 'boy'}}
posted @ 2018-04-12 19:52  zzhangyuhang  阅读(779)  评论(0编辑  收藏  举报