溫馨提示:如果使用電腦查看圖片不清晰,可以使用手機打開文章單擊文中的圖片放大查看高清原圖。

Fayson的github: https://github.com/fayson/cdhproject

提示:代碼塊部分可以左右滑動查看噢

1.文檔編寫目的

在前面的文章Fayson介紹了《Hive創建外部表CSV數據中列含有逗號問題處理》。本篇文章Fayson主要介紹在Hive中使用Map類型存儲數據。

內容概述

1.環境準備

2.創建Hive表及測試

3.總結

  • 測試環境

1.CM和CDH版本為5.15

2.環境準備

準備測試數據,文本數據內容如下:

0098.HK,104,2018-10-21T22:20:00.105Z,name:fayson|sex:男|age:180098.HK,104,2018-10-21T22:20:00.105Z,name:fayson1|sex:男|age:190098.HK,104,2018-10-21T22:20:00.105Z,name:fayson2|sex:男|age:200098.HK,104,2018-10-21T22:20:00.105Z,name:fayson3|sex:男|age:210098.HK,104,2018-10-21T22:20:00.105Z,name:fayson4|sex:男|age:22

將準備好的測試數據保存到test.csv文件中,並上傳至HDFS的/mdtick/hk/csv目錄下。

[root@cdh03 ~]# cat test.csv[root@cdh03 ~]# hadoop fs -put test.csv /mdtick/hk/csv/[root@cdh03 ~]# hadoop fs -ls /mdtick/hk/csv/[root@cdh03 ~]# hadoop fs -cat /mdtick/hk/csv/test.csv

(可左右滑動)

3.創建Hive表

1.使用如下SQL語句創建一個包含Map類型的表

CREATE EXTERNAL TABLE csvtable2( symbol string, tickSequence string, timeStamp string, tickdata MAP<String, string>)ROW FORMAT DELIMITED FIELDS TERMINATED BY ","COLLECTION ITEMS TERMINATED BY "|"MAP KEYS TERMINATED BY ":"STORED AS TEXTFILE LOCATION "/mdtick/hk/csv";

(可左右滑動)

如上SQL建表語句中需要注意的是,Map類型裡面定義了Key和Value的數據類型。Map類型中定義的欄位與示例數據中的「name:fayson|sex:男|age:18」,該數據以k-v方式存儲。Collection items terminated by 「|」,表示Map中每個kv直接以」|」分割,MAP KEYS TERMINATED BY ":",表示kv之間數據以「:」分割。

2.使用Hue在Hive中創建測試表

3.使用SQL命令查看csvtable2表數據

4.使用SQL語句查看Map中數據

select symbol,ticksequence,tickdata["name"], tickdata["sex"], tickdata["age"] from csvtable2;

(可左右滑動)

4.總結

1.在Hive表中定義Map類型數據,Map只能以K-V的方式定義一批數據的數據類型,與Struct相比對每個欄位的類型定義沒有那麼靈活。

2.使用SQL語句查詢Map中數據時需要指定查詢欄位的key。

3.同樣Map也是支持嵌套數據格式Map<String,<Struct>>等。


推薦閱讀:
相关文章