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 ‘\t‘
stored as textfile

外部表

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

eg:

create external table if not exists student2(
id int, name string
)
row format delimited fields terminated by ‘\t‘
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 ‘\t‘;

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 ‘\t‘ 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 ‘\t‘ select * from student;

3.将查询的结果导出到hdfs上(没有local)

hive (default)> insert overwrite directory ‘/student2‘ row format delimited fields terminated by ‘\t‘select * from student;

hive shell 命令导出

基本语法:(hive -f/-e 执行语句或者脚本 > file)

[[email protected] 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

来自为知笔记(Wiz)

原文地址:https://www.cnblogs.com/changsheng1120/p/11719612.html

时间: 2024-10-30 02:43:48

hive开发规范的相关文章

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

首先,先明确,为什么Sqoop需要规范的脚本开发呢? 答:是因为,Sqoop import HDFS/Hive/HBase这些都是手动.但是在实际生产里,有时候,需要用脚本来完成. 比如,通过shell脚本来操作对Sqoop.Hive.HBase.MapReduce.HDFS.Spark.Storm等各种. Sqoop 脚本开发规范 目录规范 1.目录结构体系 /home/hadoop(开发用户)/app/djt(数据来源.业务)/sh/sqoop 示例:/home/hadoop/app/djt

谈谈Google与微信H5牛牛的Java开发规范

多年前,Google发布微信H5牛牛搭建平台(h5.fanshubbs.com)来定义Java编码时应遵循的微信牛牛Q_1687054422规范:今年年初阿里则发布阿里巴巴Java 开发手册,并随后迭代了多个版本,直至9月份又发布了微信H5牛牛.这两大互联网巨头的初衷,都是希望能够统一标准,使业界编码达到一致性,提升沟通和研发效率,这对于我们码农无疑是很赞的一笔福利呀.笔者将两份规范都通读了一遍,其中列举的不少细则跟平时的编码习惯基本是符合的,不过还是有不少新奇的收获,忍不住记录在此,供日后念念

web前端开发规范

本文原创,这里首先声明,转载注明本文出处,翻版必究! web前端开发规范的现实意义 1.提高团队的协作能力 2.提高代码的重复利用率 3.可以写出质量更高,效率更好的代码 4.为后期维护提供更好的支持 5.可读性高 一.命名规则 1.html命名规则: a.文件名称命名规则:统一使用小写英文字母.数字.下划线的组合,不得包含汉字空格和特殊字符 2.命名原则:方便理解.方便查找 b.索引文件命名原则:index.html.index.htm.index.asp.index.aspx.index.j

C#语言开发规范-ching版

学习C#之初,始终不知道怎么命名比较好,很多时候无从命名,终于有一天我整理了一份命名规范文档,自此我就是按照这个命名规范书写代码,整洁度无可言表,拙劣之处请大家斧正,愚某虚心接受,如有雷同,不胜荣幸 C#语言开发规范 作者ching 1.  命名规范 a) 类 [规则1-1]使用Pascal规则命名类名,即首字母要大写. eg: Class Test { ... } [规则1-2]使用能够反映类功能的名词或名词短语命名类. [规则1-3]不要使用“I”.“C”.“_”等特定含义前缀. [规则1-

Web前端开发规范文档(google规范)

(Xee:其实没什么规范约束,但是养成一种好习惯,何乐而不为?) 我推荐去看看google的开发规范,然后从他的当中去总结自己的开发规范. Google HTML/CSS代码风格指南 Google JavaScript 编码规范指南 ------------------------------------------------------------------------------------------------------------------------------- 绝大多数项

麦子新课上线之web前端开发规范

同学们,Web前端开发又有课程上线啦!对Web前端感兴趣的同学们,速来围观哦~~下面简单介绍一下课程. [学霸学新,课快人一步] 课程简介: Web前端开发规范,可以帮助同学们,了解web前端开发规范的意义,掌握前端开发中的开发规范,掌握web前端开发中的实用技巧.面对企业团队开发,可以很快融入团队合作中,高效率的完成团队给予的任务. 课程地址→http://www.maiziedu.com/course/web/621-8960/ 老师简介: 何虎:8年软件开发经验,擅长互联网应用程序开发,曾

shell开发规范

版本1.0版,参考网上的一些文章规整而来.后期打算继续修改.完成一篇适合自己的shell开发规范. 最新编辑时间:2017.6.25 一. 命名规范 1. 版本和运行参数 1) 脚本开始之前以注释形式说明版本号:(推荐)2) 如果调用其他工具,还需说明工具的版本号:(推荐)3) 为脚本添加必须的运行参数,类似于C程序的运行参数,可使用getopt的方式取得运行参数值,如基本的参数有:-v - 版本号:-h – 帮助信息:(推荐) 2. 变量命名 1) 变量命名要前后统一,建议使用全部大写字母,如

软甲开发规范

软件开发规范:获得本目录的绝对路径sys.payh.abspath(__file__)获得本级目录的父目录sys.payh.dirname(sys.payh.abspath(__file__)) 软件名 bin #可执行文件  start.py#调用core下面的main代码启动软件 core#主代码  main.py#调用数据库的配置文件存放处 conf#配置文件中可以导入数据库文件  setting.py db#数据库文件  db.json docs#软件文档  一些文档 lib#库文件,就

我的开发规范

转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6413978.html 每个开发人员在长久的开发生涯中,都会养成自己的一套开发风格,或者说,规范.之后在开发项目时都会下意识地遵循着心中的规范去设计.开发项目.这种开发风格随着经验和能力的增加会不断修改.演变,由幼稚走向成熟.我只是个刚开启开发之旅的小菜鸟,在此记录下我的开发规范,以便日后不断修正.进步. 1:项目架构与设计 分6层:View层编写前端页面,Control层处理view层请求(包括各servl