HIVE的建表和一点点知识 | 青训营笔记

61 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第11天

Hive

可以将结构化数据映射成一张数据表,并提供类SQL的查询功能,本质是将SQL语句转化成MapReduce程序;

Hive元数据默认存储在derby数据库,不支持多客户端访问,所以将元数据存储在MySQL,支持多客户端访问。

以下均为个人总结,如果不正确之处,劳请指正,共同进步!!

与数据库比较

  • 类似的查询语句;
  • 数据存储在HDFS;
  • 数据更新不建议改写;
  • 执行延迟较高,需要将hql转换为Map Reduce跑job;
  • 数据规模很大;

建表

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name / *创建[外部]表* / 
[(col_name data_type [COMMENT col_comment], ...)]
[COMMENT table_comment]
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] / *分区* / 
[CLUSTERED BY (col_name, col_name, ...) / *分桶表* / [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS] / *桶内排序* / 
[ROW FORMAT row_format] / *格式化表* / 
[STORED AS file_format] / *指定存储文件类型* / 
[LOCATION hdfs_path] / *指定表在HDFS的路径* / 
[TBLPROPERTIES (property_name=property_value, ...)] / ** / 
[AS select_statement] / *根据查询结果创建表* / 
 / *格式化表种类* / 
DELIMITED 
[FIELDS TERMINATED BY char]  / *指定分隔符* / 
[COLLECTION ITEMS TERMINATED BY char]
[MAP KEYS TERMINATED BY char]
[LINES TERMINATED BY char]
|
SERDE serde_name
[WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)]

内部(管理)表和外部表external

元数据:指向原始数据的路径;原始数据:数据的存储位置

内部表外部表
创建移动原始数据路径记录到元数据
删除元 / 原始数据都删只删除元数据

四个By

  • Order By:全局排序,只有一个Reducer;
  • Sort By:分区内有序;
  • Distrbute By:根据指定字段进行分区,将数据划分到不同reduce中,结合sort by使用,distrbute by 在前(例如按学院编号分区,学生学号排序);
  • Cluster By:当Distribute by和Sorts by字段相同时,可以使用Cluster by方式,只能升序;

常用函数

  • nvl(val,def_val):返回非空值否则null;
  • coalesce(v1,v2,...):返回第一个非空值否则null;
  • CASE WHEN THEN ELSE END :多分支;
  • grouping_set:多维分析;
  • cast(col as type):格式转换;