Hive常用操作

hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。

创建表

简单的建表

1
2
3
4
5
6
7
8
9
create table
spec_table_from_textfile(
id bigint,
table_code string,
table_name string,
table_common string,
column_code string,
column_name string,
column_common string)

从查询结果创建表

1
2
3
4
create table table2
as select phone_num,real_name,id_card,create_time
from table1
where info_from like '%18%'

克隆表

1
create table like tablename1
  • 此处是指克隆表结构,并不会克隆表数据。

创建从格式化文本文件导入的表

1
2
3
4
5
6
7
8
9
10
11
12
create table
spec_table_from_textfile(
id bigint,
table_code string,
table_name string,
table_common string,
column_code string,
column_name string,
column_common string)
row format delimited
fields terminated by ','
stored as textfile

创建 orc 表

1
2
3
4
5
6
7
8
9
10
11
create table
spec_table_orc(
id bigint,
table_code string,
table_name string,
table_common string,
column_code string,
column_name string,
column_common string)
clustered by (id) into 3 buckets
stored as orc TBLPROPERTIES ('transactional'='true')
  • ORC表支持行级delete、updata和insert等操作,但需要配置HIVE相关配置文件,具体操作点击链接

导入数据至表

Hive表接受批量插入,一般不支持逐条记录插入的insertSQL语句。

从查询数据导入

若目标表和数据源表的表结构一至:

1
insert into table xx select * from xx where xxx
  • 字段数据结构不一致Hive会尝试转换,转换不了的置NULL

导入时指定特殊值

1
2
3
4
5
6
7
8
9
10
11
insert into
spec_test(
id,
table_code,
table_name,
filed_code,
filed_name,
category
)
select *,'zx'
from spec_table2
  • 一种适用的场景是在表合并时,对目标表新增的字段指定来源。

选择字段导入

1
2
3
4
5
6
7
8
insert into table
table1(
wp_id,
wp_phone,
wp_email,
wp_sex,
wp_birthday)
select * from table2

从文本文件导入

如上一小节创建从格式化文本文件导入的表,对应的建表后可在hive-shell中指定文本文件路径导入,需要注意的是文本文件中字段和字段之间的分隔符必须和建表语句中指定的一至:

1
load data local inpath '/home/hive/zx/spec_table_from_textfile.txt' into table spec_table_from_textfile

查询表

与常见的SQL查询语句类似:

1
select * from spec_table where table_name like 'xx%' and table_name like '00%' limit 1000

修改表

修改名

1
alter table name old_name to new_name

增加字段

1
alter table spec_table2 add columns (category string);
  • 在尾部增加

修改表结构

1
2
3
4
5
6
7
8
alter table spec_table2
replace columns (
id bigint,
table_code string,
table_name string,
filed_code string,
filed_name string
);

注:这个语句只是修改表结构并不会对数据进行操作,如果表中已经存在数据,你删除一个字段后再恢复会发现数据还在,同样如果你改变字段顺序,会发现数据错位了。

删除表

1
drop table xx
坚持原创技术分享,您的支持将鼓励我继续创作!