1.创建内部表和外部表。
内部表和外部表的区别是,内部表在删除表后,会对表存储所在的数据目录也做删除操作,外部表删除后则不会删除数据所在的目录。
外部表语法:
drop table if exists t_abc_dept;
create external table t_abc_dept
(
dept_id int comment '机构id ',
dept_code string comment '机构代码 ',
dept_name string comment '机构名称 ',
load_tm string comment '加载时间 '
)comment '机构表'
row format delimited fields terminated by '\001'
location '/dm/fin_abc/bsl/t_abc_dept';
内部表语法:
drop table if exists t_abc_dept;
create table t_abc_dept
(
dept_id int comment '机构id ',
dept_code string comment '机构代码 ',
dept_name string comment '机构名称 ',
load_tm string comment '加载时间 '
)comment '机构表'
row format delimited fields terminated by '\001'
location '/dm/fin_abc/bsl/t_abc_dept';
他们之间的区别是外部表多了external关健字。一般我们在生产上对需要落地存储数据的都创建为外部表,只有中间的计算过程才用内部表。这样的好处是哪天不小心把结果表删除了,也不用太担心,因为数据还在,我们只要重新创建表定义,把位置引用到之前的位置location '/dm/fin_abc/bsl/t_abc_dept'就好了。
2.分区表。
在关系库中分区表是为了把数据量太多了分到多个区进行管理或查询,在HIVE中除了有这个作用,另一个作用是为了数据的方便重算,比如有个表要删除某一天的数据,目前HIVE不支持删除操作,只有覆盖操作,所以我们就得把表建成按日的分区表,重算某天的数据,我们只需要重写某天的分区就行了。语法如下:
drop table if exists t_abc_order;
create table t_abc_order
(
order_id int comment '订单id ',
prod_code string comment '产品代码 ',
load_tm string comment '加载时间 '
)comment '订单表'
PARTITIONED BY (hq_month_code string)
row format delimited fields terminated by '\001'
location '/dm/fin_abc/bsl/t_abc_order';
3.数据类型
数据类型 | 样例 |
string | 'abc' |
int | 123 |
double | 123.4 |
date | 2019/8/10 |
array | ['apple','orange','mango'] |
map | '数学':80,'语文':89,'英语':95 |
以上是比较常用的数据类型,在我们工作中,基本用到这些类型就可以了,其他的大家可以用到的时候再搜索下。
4.窗口函数
目前hive的版本支持的窗口函数都比较多,与oracle支持的一样。SUM(), MIN(),MAX(),AVG(),ROW_NUMBER(), RANK(), DENSE_RANK(),LAG, LEAD, FIRST_VALUE, LAST_VALUE, GROUPING SET, CUBE, ROLL UP。做数据处理和分析都够用了。
更多技术文章请关注公众号BLT328(长按后点识别图中二维码):