Hive数据仓库(建表·分区·分桶)基础
Posted 大古就是迪迦
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive数据仓库(建表·分区·分桶)基础相关的知识,希望对你有一定的参考价值。
数据准备阶段 在/root/hadoop/data目录下准备测试数据文件phones.dat;数据文件中写入如下测试数据并保存。 1 iPhone_12 64 黑 4350 2 iPhone_12 64 白 4400 3 iPhone_12 64 绿 4350 4 iPhone_12 64 红 4150 5 iPhone_12 64 蓝 4150 6 iPhone_12 64 紫 4250 7 iPhone_12 128 黑 4740 8 iPhone_12 128 白 4730 9 iPhone_12 128 绿 4680 10 iPhone_12 128 红 4720 11 iPhone_12 128 蓝 4725 12 iPhone_12 128 紫 4620 13 iPhone_12P 128 黑 6570 14 iPhone_12P 128 白 7030 15 iPhone_12P 128 金 6950 16 iPhone_12P 128 蓝 6550 17 iPhone_12P 256 黑 7200 18 iPhone_12P 256 白 7360 19 iPhone_12P 256 金 7300 20 iPhone_12P 256 蓝 7060 21 iPhone_12PMAX 128 黑 7780 22 iPhone_12PMAX 128 白 7770 23 iPhone_12PMAX 128 金 7670 24 iPhone_12PMAX 128 蓝 7650 25 iPhone_12PMAX 256 黑 8550 26 iPhone_12PMAX 256 白 8230 27 iPhone_12PMAX 256 金 8200 28 iPhone_12PMAX 256 蓝 7950 29 iPhone_13 128 黑 5470 30 iPhone_13 128 白 5560 31 iPhone_13 128 粉 5650 32 iPhone_13 128 红 5430 33 iPhone_13 128 蓝 5460 34 iPhone_13 256 黑 6150 35 iPhone_13 256 白 6210 36 iPhone_13 256 粉 6300 37 iPhone_13 256 红 6080 38 iPhone_13 256 蓝 6150 39 iPhone_13 512 黑 7250 40 iPhone_13 512 白 7250 41 iPhone_13 512 粉 7450 42 iPhone_13 512 红 7250 43 iPhone_13 512 蓝 7250 44 iPhone_13P 128 黑 7660 45 iPhone_13P 128 白 7820 46 iPhone_13P 128 金 7650 47 iPhone_13P 128 蓝 7610 48 iPhone_13P 256 黑 8540 49 iPhone_13P 256 白 8630 50 iPhone_13P 256 金 8400 51 iPhone_13P 256 蓝 8510 52 iPhone_13P 512 黑 10000 53 iPhone_13P 512 白 10000 54 iPhone_13P 512 金 9950 55 iPhone_13P 512 蓝 9950 56 iPhone_13P 1t 黑 11600 57 iPhone_13P 1t 白 11600 58 iPhone_13P 1t 金 11550 59 iPhone_13P 1t 蓝 11600 60 iPhone_13PMAX 128 黑 8510 61 iPhone_13PMAX 128 白 8510 62 iPhone_13PMAX 128 金 8480 63 iPhone_13PMAX 128 蓝 8510 64 iPhone_13PMAX 256 黑 9320 65 iPhone_13PMAX 256 白 9300 66 iPhone_13PMAX 256 金 9220 67 iPhone_13PMAX 256 蓝 9310 68 iPhone_13PMAX 512 黑 11000 69 iPhone_13PMAX 512 白 11000 70 iPhone_13PMAX 512 金 10950 71 iPhone_13PMAX 512 蓝 11050 72 iPhone_13PMAX 1t 黑 12600 73 iPhone_13PMAX 1t 白 12600 74 iPhone_13PMAX 1t 金 12550 75 iPhone_13PMAX 1t 蓝 12600 一.普通外部表的创建及数据加载 1.创建一个外部表,命名为phones_1 表中添加如下字段: id(int)phone_name(string)phone_memSize(string) phone_color(string) phone_price(int);自定义更改默认分隔符:将字段间分隔符改为空格即可。 先进入自己的练习数据库,本人就先用上课时用过的wuruan2001数据库。create external table phones_1(
id int,
phone_name string,
phone_memSize string,
phone_color string,
phone_price int
)
row format delimited
fields terminated by " ";
2.将数据加载至该表。load data local inpath '/root/hadoop/data/phones.dat' into table phones_1;
3.用select查询一下数据,确认数据是否成功加载;
select * from phones_1;
4.查看当前表结构详细信息,获取加载数据的hive存储路径。
desc formatted phones_1;
5..依据该路径,查看加载数据集
dfs -ls /root/hive/warehouse/wuruan2001.db/phones_1;
二.分区表的创建、数据加载、增加分区、删除分区以及更改分区路径。
1.创建一个内部表,命名为phones_2;表中添加如下字段: id(int) phone_name(string) phone_memSize(string) phone_color(string) phone_price(int) 指定报价日期作为分区字段依据;自定义更改默认分隔符:将字段间分隔符改为空格即可。create table if not exists phones_2(
id int,
phone_name string,
phone_memSize string,
phone_color string,
phone_price int)
partitioned by (dt string)
row format delimited
fields terminated by " ";
2.加载数据。 加载数据时进行分区:以日期为2022-09-01为1号分区;2022-09-02为2号分区...以此类推,创建4个分区。load data local inpath '/root/hadoop/data/phones.dat' into table phones_2 partition(dt="2022-09-01");
load data local inpath '/root/hadoop/data/phones.dat' into table phones_2 partition(dt="2022-09-02");
load data local inpath '/root/hadoop/data/phones.dat' into table phones_2 partition(dt="2022-09-03");
load data local inpath '/root/hadoop/data/phones.dat' into table phones_2 partition(dt="2022-09-04");
3.依据查询到的数据存储路径依次查看表下所有分区数据。
desc formatted phones_2;
dfs -ls /root/hive/warehouse/wuruan2001.db/phones_2;
dfs -ls /root/hive/warehouse/wuruan2001.db/phones_2/dt=2022-09-01;
dfs -ls /root/hive/warehouse/wuruan2001.db/phones_2/dt=2022-09-02;
dfs -ls /root/hive/warehouse/wuruan2001.db/phones_2/dt=2022-09-03;
dfs -ls /root/hive/warehouse/wuruan2001.db/phones_2/dt=2022-09-04;
4.在不加载数据的情况下再增加两个分区,分区依据:以日期自定义。(本人暂定为2022-09-05和2022-09-06)
5.修改分区2022-09-01的hdfs的存储路径。
alter table phones_2 partition(dt='2022-09-01') set location '/root/hive/warehouse/phones_2/dt=2022-09-05';
6.删除分区2022-09-02。
alter table phones_2 drop partition(dt='2022-09-02');
三.分桶表的创建、加载数据、名称查询、以及桶数据查询
1.创建一个分桶表,命名为phone3_cur;表中添加如下字段: id(int) phone_name(string) phone_memSize(string) phone_color(string) phone_price(int);指定以id字段为分桶依据创建5个桶;自定义更改默认分隔符:将字段间分隔符改为空格即可。create table phone3_cur (
id int,
phone_name string,
phone_memSize string,
phone_color string,
phone_price int)
clustered by (id) into 5 buckets
row format delimited
fields terminated by " ";
2.创建一个普通表,命名为phone3_common;表中添加如下字段: id(int) phone_name(string) phone_memSize(string) phone_color(string) phone_price(int);自定义更改默认分隔符:将字段间分隔符改 为空格即可。create table if not exists phone3_common(
id int,
phone_name string,
phone_memSize string,
phone_color string,
phone_price int)
row format delimited
fields terminated by " ";
3.普通表phone3_common内加载数据集。load data local inpath '/root/hadoop/data/phones.dat' into table phone3_common;
4.给分桶表phone3_cur加载数据。(分桶表的数据要从普通表加载所有我们开始时创建了一个普通表) insert into table phone3_cur select * from phone3_common; 5.查询其每一个分桶表的名称。dfs -ls /root/hive/warehouse/wuruan2001.db/phone3_cur;
6.查询其每一个分桶表的名称查看分桶表源数据。
dfs -cat /root/hive/warehouse/wuruan2001.db/phone3_cur/000000_0;
dfs -cat /root/hive/warehouse/wuruan2001.db/phone3_cur/000001_0;
dfs -cat /root/hive/warehouse/wuruan2001.db/phone3_cur/000002_0;
dfs -cat /root/hive/warehouse/wuruan2001.db/phone3_cur/000003_0;
dfs -cat /root/hive/warehouse/wuruan2001.db/phone3_cur/000004_0;
7.分别再创建3个不同的分桶表,分别命名为phone3_cur2、phone3_cur3、phone3_cur4字段添加规则相同,但设置不同的分桶字段依据: phone3_cur2分桶表指定以价格字段为分桶依据创建5个分桶; phone3_cur3分桶表指定以手机颜色字段为分桶依据创建5个分桶; phone3_cur4分桶表指定以手机型号名称字段为分桶依据创建5个分桶;create table phone3_cur2 (
id int,
phone_name string,
phone_memSize string,
phone_color string,
phone_price int)
clustered by (phone_price) into 5 buckets
row format delimited
fields terminated by " ";
create table phone3_cur3 (
id int,
phone_name string,
phone_memSize string,
phone_color string,
phone_price int)
clustered by (phone_color) into 5 buckets
row format delimited
fields terminated by " ";
create table phone3_cur4 (
id int,
phone_name string,
phone_memSize string,
phone_color string,
phone_price int)
clustered by (phone_name) into 5 buckets
row format delimited
fields terminated by " ";
8.为这三个分桶表加载数据集。(由于hive数据加载比较慢,这里就用phone3_cur分桶表举例举例)
insert into table phone3_cur3 select * from phone3_common;
9.查询其每一个分桶表的名称。(这里用phone3_cur3举例)
dfs -ls /root/hive/warehouse/wuruan2001.db/phone3_cur3;
10.并依次查看分桶表源数据。(这里用phone3_cur4举例)
dfs -cat /root/hive/warehouse/wuruan2001.db/phone3_cur4/000000_0;
dfs -cat /root/hive/warehouse/wuruan2001.db/phone3_cur4/000001_0;
dfs -cat /root/hive/warehouse/wuruan2001.db/phone3_cur4/000002_0;
dfs -cat /root/hive/warehouse/wuruan2001.db/phone3_cur4/000003_0;
dfs -cat /root/hive/warehouse/wuruan2001.db/phone3_cur4/000004_0;
在校学生,根据平时课程学习随便瞎写,若对阁下有用给个好评么么哒,不喜勿喷!!!
以上是关于Hive数据仓库(建表·分区·分桶)基础的主要内容,如果未能解决你的问题,请参考以下文章