3.2 复杂数据类型

参考地址:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types#LanguageManualTypes-Overview

Hive 有 4 中复杂类型.

  1. arrays: ARRAY<data_type> 数组是一组具有相同类型和名称的变量的集合。这些变量称为数组的元素,每个数组元素都有一个编号,编号从零开始。例如,数组值为[‘John’, ‘Doe’],那么第2个元素可以通过数组名[1]进行引用。

  2. maps: MAP<primitive_type, data_type> MAP 是一组键-值对元组集合,使用数组表示法可以访问数据。例如,如果某个列的数据类型是MAP,其中键->值对是’first’->’John’和’last’->’Doe’,那么可以通过字段名[‘last’]获取最后一个元素

  3. structs: STRUCT<col_name : data_type [COMMENT col_comment], ...> 和c语言中的struct类似,都可以通过“点”符号访问元素内容。例如,如果某个列的数据类型是 STRUCT{first STRING, last STRING},那么第1个元素可以通过: 字段.first来引用。

  4. union: UNIONTYPE<data_type, data_type, ...> 联合型. 这种类型到目前支持还不完全. 建议不要使用.

复杂类型允许任意深层次的嵌套.

实例操作:

步骤1: 数据分析

假设有一行这样的数据:

songsong,bingbing_lili,xiao song:18_xiaoxiao song:19,hui long guan_beijing

他表示的含义可以用下面的json来表示

{
  "name": "songsong",
  "friends": [   // 这个用数组来表示
    "bingbing",
    "lili"
  ],
  "children": {  // 用键值对map来表示
    "xiao song": 18,
    "xiaoxiao song": 19
  },
  "address": {  // 用 struct 来表示
    "street": "hui long guan",
    "city": "beijing"
  }
}

从这个 json, 我们很容分析出来 将来要建设的表只需要 4 个字段就可以: name, friends, children , address

步骤2: 准备 2 条数据

songsong,bingbing_lili,xiao song:18_xiaoxiao song:19,hui long guan_beijing
yangyang,caicai_susu,xiao yang:18_xiaoxiao yang:19,chao yang_beijing

把数据存入到一个文件中.

步骤3: 建表

根据前面的分析建表.

create table person(
    name string,
    friends array<string>,
    children map<string, int>,
    address struct<street : string, city : string>
)
row format delimited 
fields terminated by ','
collection items terminated by '_'
map keys terminated by ':'
lines terminated by '\n';
  1. row format delimited fields terminated by ',' : 每行中列与列的分隔符是,

  2. collection items terminated by '_': arraysturct的分隔符是_

  3. map keys terminated by ':' , map 键值对的分隔符是 :

  4. lines terminated by '\n', 行分隔符是 \n

表创建成功:

查看表结构:

步骤4: 把文件内容插入到表中

load data local inpath '/opt/module/datas/persons.txt' into table person;

步骤5: 根据需要执行一些查询

Copyright © 尚硅谷大数据 2019 all right reserved,powered by Gitbook
该文件最后修订时间: 2018-12-07 20:11:57

results matching ""

    No results matching ""