将各种数据导入hive数据库

一、Hive数据的导入

## 1、先创建数据库  根mysql的操作差不多
create database law;

## 2、创建数据表
use law;
create table law(
字段,数据类型
)

## 3、格式化
row format delimited fields terminated by ',' stored as textfile;

## 4、加载数据     overwrite 是覆盖原有的数据
load data inpath 'hdfs://master:9000/hdfs/data/law_utf8.csv' overwrite into table raw;


load data [local] inpath 'filepath' [overwrite] into table table_name [partition(part1=val1,part2=val2)]
说明:

1、Load 

操作只是单纯的复制/移动操作,将数据文件移动到 Hive 表对应的位置

2、filepath:

相对路径,例如:project/data1 

绝对路径,例如:/user/hive/project/data1 

包含模式的完整 URI,如:hdfs://master:9000/user/hive/project/data1

3、local关键字

如果指定了local,load命令会去查找本地文件系统中的filepath。如果没有指定local关键字,则根据inpath中的url查找文件

4、overwrite 关键字

如果使用了overwrite关键字,则目标表(或者分区)中的内容会被删除,然后再将filepath指向的文件/目录中的内容添加到表/分区中。 

如果目标表(分区)已经有一个文件,并且文件名和 filepath 中的文件名冲突,那么现有的文件会被新文件所替代。

启动meta让ied可以连接

./hive --service metastore -p 9083 &

1、加载本地数据

# 创建表
create table tb_load1(id int,name string)
row format delimited fields terminated by ',';

# 加载本地数据
load data local inpath '/home/hadoop/load1.txt' into table tb_load1;

2、加载hdfs上的数据

load data inpath '/hive/test/load2.txt' into table tb_load1;
或者:
load data inpath 'hdfs:master:9000/hive/test/load2.txt' into table tb_load1;

## 从hdfs加载数据成功后,数据会删除。

3、加载数据到分区上

# 创建分区表
create table tb_load2(id int ,name string)
partitioned by (sex string)
row format delimited fields terminated by ',';

# 加载数据,数据本身要是分区的数据
load data inpath '/hive/test/load_part_male.txt' into table tb_load2 partition (sex='male');

load data inpath '/hive/test/load_part_female.txt' into table tb_load2 partition (sex='female');

Hive数据类型

1、数字类

类型

长度(字节)

备注

TINYINT

1

有符号整型

SMALLINT

2

有符号整型

INT

4

有符号整型

BIGINT

8

有符号整型

FLOAT

4

有符号单精度浮点数

DOUBLE

8

有符号双精度浮点数

DECIMAL

可带小数的精确数字字符串

2、日期类

类型

长度

备注

TIMESTAMP

--

时间戳,内容格式:yyyy-mm-dd hh:mm:ss[.f...]

DATE

--

日期,内容格式:YYYY­MM­DD

INTERVAL

--

--

3、字符串类

类型

长度

备注

string

--

字符串

VARCHAR

字符数范围1 - 65535

长度不定字符串

CHAR

最大的字符数:255

长度固定字符串

DML插入数据 insert

insert overwrite table 表名 接着跟一个查询语句     // 覆盖插入
insert into table 表名 跟查询语句    //  这个方式是追加插入数据

删除分区

alter table 表名 drop parttion (part_date<'20220309');   // part_date