hive开发规范

Posted changsheng1120

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hive开发规范相关的知识,希望对你有一定的参考价值。

hive常用交互命令

“-e”

不进入hive的交互窗口执行sql语句。

eg: bin/hive -e "show tables;"

“-f”

执行脚本中sql语句

eg: bin/hive -f "/home/user/hive/tmp/hivef.sql";

"!quit"

退出hive交互窗口

"help"

在hive窗口获取帮助

“dfs -ls /;”

在hive cli命令窗口中查看hdfs文件系统

hive的数据类型

基本类型

hive数据类型 java数据类型 长度 例子
tinyint byte 1byte有符号整数 20
smalint short 2byte有符号整数 20
int int 4byte有符号整数 20
bigint long 8byte有符号整数 20
boolean boolean 布尔类型,true或者false true false
float float 单精度浮点数 3.14159
double double 双精度浮点数 3.14159
string string 字符系列。可以指定字符集。可以使用单引号或者双引号。 ‘now is the time’ “for all good men”
timestamp 时间类型
binary 字节数组

集合类型

数据类型 描述 语法示例
struct 和c语言中的struct类似,都可以通过“点”符号访问元素内容。例如,如果某个列的数据类型是struct{first string, last string},那么第1个元素可以通过字段.first来引用。 struct() 例如struct
map map是一组键-值对元组集合,使用数组表示法可以访问数据。例如,如果某个列的数据类型是map,其中键->值对是’first’->’john’和’last’->’doe’,那么可以通过字段名[‘last’]获取最后一个元素 map() 例如map
array 数组是一组具有相同类型和名称的变量的集合。这些变量称为数组的元素,每个数组元素都有一个编号,编号从零开始。例如,数组值为[‘john’, ‘doe’],那么第2个元素可以通过数组名[1]进行引用。 array() 例如array

DDL

创建数据库

create database bmsoft;

查询数据库

过滤显示查询的数据库

show databases like ‘db_hive*‘;

显示数据库信息

desc database bmsoft;

显示数据库详细信息,extended

esc database extended db_hive;

修改数据库

用户可以使用alter database命令为某个数据库的dbproperties设置键-值对属性值,来描述这个数据库的属性信息。数据库的其他元数据信息都是不可更改的,包括数据库名和数据库所在的目录位置。

hive (default)> alter database db_hive set dbproperties(‘createtime‘=‘20190828‘);

在hive中查看修改结果

hive> desc database extended db_hive;

删除数据库

删除空数据库

drop database db_hive2;

删除非空数据库

drop database db_hive;

创建表

查看表格式化数据

desc formatted dept;

内部表

hive默认情况下会将这些表的数据存储在由配置项hive.metastore.warehouse.dir决定。 当我们删除一个管理表时,hive也会删除这个表中数据。

eg:

create table if not exists student2(
id int, name string
)
row format delimited fields terminated by ‘	‘
stored as textfile

外部表

因为表是外部表,所以hive并非认为其完全拥有这份数据。删除该表并不会删除掉这份数据,不过描述表的元数据信息会被删除掉。

eg:

create external table if not exists student2(
id int, name string
)
row format delimited fields terminated by ‘	‘
stored as textfile

删除外部表后,外部表删除后,hdfs中的数据还在,但是metadata中的元数据已被删除。

表的互相转换

内部表 --> 外部表

alter table student2 set tblproperties(‘external‘=‘true‘);

外部表 --> 内部表

alter table student2 set tblproperties(‘external‘=‘false‘);

注意:(‘external‘=‘true‘)和(‘external‘=‘false‘)为固定写法,区分大小写!

分区表

创建分区表语法

加载数据到分区表中

hive (default)> load data local inpath ‘/opt/module/datas/dept.txt‘ into table default.dept_partition partition(month=‘201709‘);

注意:分区表加载数据时,必须指定分区

增加分区

alter table dept_partition add partition(month=‘201706‘) ;

alter table dept_partition add partition(month=‘201705‘) partition(month=‘201704‘);

删除分区

alter table dept_partition drop partition (month=‘201704‘);

alter table dept_partition drop partition (month=‘201705‘), partition (month=‘201706‘);

删除表

drop table dept_partition;

修改表

更新列

alter table table_name change [column] col_old_name col_new_name column_type [comment col_comment] [first|after column_name]

修改表名

alter table old_table_name rename to new_table_name;

复制表结构

create table new_table_name like table_name;

DML

数据导入

向表中装载数据(load)

hive> load data [local] inpath ‘/opt/module/datas/student.txt‘ [overwrite] into table student [partition (partcol1=val1,…)];

(1)load data:表示加载数据

(2)local:表示从本地加载数据到hive表;否则从hdfs加载数据到hive表

(3)inpath:表示加载数据的路径

(4)overwrite:表示覆盖表中已有数据,否则表示追加

(5)into table:表示加载到哪张表

(6)student:表示具体的表

(7)partition:表示上传到指定分区

查询语句 插入(insert)

1.创建一张分区表

hive (default)> create table student(id int, name string) partitioned by (month string) row format delimited fields terminated by ‘ ‘;

2.基本插入数据

hive (default)> insert into table student partition(month=‘201908‘) values(1,‘wangwu‘),(2,’zhaoliu’);

3.基本模式插入(根据单张表查询结果)

hive (default)> insert overwrite table student partition(month=‘201907‘) select id, name from student where month=‘201908‘;

insert into:以追加数据的方式插入到表或分区,原有数据不会删除

insert overwrite:会覆盖表或分区中已存在的数据

4.多表(多分区)插入模式(根据多张表查询结果)

hive (default)> from student

insert into table student partition(month=‘201908‘)

select id, name where month=‘201908‘

insert into table student partition(month=‘201908‘)

select id, name where month=‘201907‘;

查询结果创建表加载数据(as select)

根据查询结果创建表(查询的结果会添加到新创建的表中)

create table if not exists student3 as select id, name from student;

建表时通过location指定加载数据路径

  1. 上传数据到hdfs上

hive (default)> dfs -mkdir /student;

hive (default)> dfs -put /opt/module/datas/student.txt /student;

  1. 创建表,并指定在hdfs上的位置

hive (default)> ``create external table if not exists student5(id int, name string)row format delimited fields terminated by ‘ ‘ location ‘/student;`

数据导出

insert导出

1.将查询的结果导出到本地
hive (default)> insert overwrite local directory ‘/export/student‘ select * from student;
2.将查询的结果格式化导出到本地
hive(default)>insert overwrite local directory ‘/export/student1‘
row format delimited fields terminated by ‘ ‘ select * from student;

3.将查询的结果导出到hdfs上(没有local)
hive (default)> insert overwrite directory ‘/student2‘ row format delimited fields terminated by ‘ ‘select * from student;

hive shell 命令导出

基本语法:(hive -f/-e 执行语句或者脚本 > file)
[atguigu@hadoop102 hive]$ ``bin/hive -e ‘select * from default.student;‘ >
/opt/module/datas/export/student4.txt;

export导出到hdfs上

(defahiveult)> export table default.student to
‘/user/hive/warehouse/export/student‘;
export和import主要用于两个hadoop平台集群之间hive表迁移。

sqoop导出

数据清除

truncate只能删除管理表,不能删除外部表中数据

hive (default)> truncate table student;

函数

系统内置函数

1.查看系统自带的函数
hive> show functions;
2.显示自带的函数的用法
hive> desc function upper;
3.详细显示自带的函数的用法
hive> desc function extended upper;

自定义函数

1)hive 自带了一些函数,比如:max/min等
2)根据用户自定义函数类别分为以下三种:
(1)udf
一进一出
(2)udaf
聚集函数,多进一出,类似于:count/max/min
(3)udtf
一进多出,如lateral view explore()

hive中执行命令

add jar /home/hive/jar/my_udf.jar;

create temporary function sys_date as com.taobao.hive.udf.UDFDateSysdate‘;

3)官方文档地址
https://cwiki.apache.org/confluence/display/hive/hiveplugins





以上是关于hive开发规范的主要内容,如果未能解决你的问题,请参考以下文章

php Yoast SEO规范输出的代码片段

Sqoop 脚本开发规范(实例手把手带你写sqoop export和sqoop import)

java 代码片段

MuleSoft 使用 RAML 片段将 RAML 规范导入 Anypoint Studio

规范化 Hive 中的横向爆炸

Hive开发要知道数据仓库的四个层次设计