1.常用语法
hive官网:https://dlcdn.apache.org/hive/
hive --service version 查看hive版本
启停止metastore服务
nohup hive --service metastore 2>&1 //开启通过服务链接hive 数据源 。 jdbc
nohup hive --service hiveserver2 2>&1 //开启通过客户端链接 & nohup
1)直接连接:直接去mysql中连接metastore库;
2)通过服务连:hive有2种服务分别是metastore和hiveserver2,hive通过metastore服务去连接mysql中的元数据。
http://localhost:10002
启停止yarn历史服务
hadoop下 ( win cd D:\1.tools\hadoop-3.1.3\bin mapred.cmd historyserver )
mapred --daemon start historyserver 。 启动历史服务 。 yarn
查看执行任务历史 登陆登录 http://localhost:19888/jobhistory/
mapred --daemon stop historyserver 。 停止历史服务 yarn
hive连接直接输入hive
退出 quit;
beeline连接
beeline
!connect jdbc:hive2://192.168.31.174:10000
然后根据提示,依次输入mysql用户名、密码,即可进入beeline连接,如下图所示。即可使用hive命令操作数据。
show databases;
use hivetest;
show tables;
select * from person;
!quit
dbeaver连接
2.hive sql语法
基本语法:
动态分区
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nostrick;
查看hive表对应的hdfs文件路径
show create table xxx.xxx;
看LOCATION字段
1.///创建sql
show databases; //显示所有数据库
CREATE database hivetest; //创建数据库hivetest
use hivetest; //使用hivetest数据库
show tables; --显示表
show partitions table_name; --显示表名为table_name的表的所有分区
//创建表
例子:
创建简单表
CREATE TABLE person(name STRING,age INT);
详情
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
[(col_name data_type [COMMENT col_comment], …)]
[COMMENT table_comment]
[PARTITIONED BY (col_name data_type [COMMENT col_comment], …)]
[CLUSTERED BY (col_name, col_name, …)
[SORTED BY (col_name [ASC|DESC], …)] INTO num_buckets BUCKETS]
[ROW FORMAT row_format]
[STORED AS file_format]
[LOCATION hdfs_path]
CREATE TABLE 创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常;用户可以用 IF NOT EXIST 选项来忽略这个异常
EXTERNAL 关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION)
LIKE 允许用户复制现有的表结构,但是不复制数据
COMMENT可以为表与字段增加描述
ROW FORMAT 设置行数据分割格式
STORED AS
如果文件数据是纯文本,可以使用 STORED AS TEXTFILE。
如果数据需要压缩,使用 STORED AS SEQUENCE 。
创建外部表:
CREATE EXTERNAL TABLE page_view(viewTime INT, userid BIGINT,
page_url STRING, referrer_url STRING,
ip STRING COMMENT ‘IP Address of the User’,
country STRING COMMENT ‘country of origination’)
COMMENT ‘这里写表的描述信息’
ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\054’
STORED AS TEXTFILE
LOCATION ‘<hdfs_location>’;
创建分区表:
CREATE TABLE par_table(viewTime INT, userid BIGINT,
page_url STRING, referrer_url STRING,
ip STRING COMMENT ‘IP Address of the User’)
COMMENT ‘This is the page view table’
PARTITIONED BY(date STRING, pos STRING)
ROW FORMAT DELIMITED ‘\t’
FIELDS TERMINATED BY ‘\n’
STORED AS SEQUENCEFILE;
创建分桶表:
CREATE TABLE par_table(viewTime INT, userid BIGINT,
page_url STRING, referrer_url STRING,
ip STRING COMMENT ‘IP Address of the User’)
COMMENT ‘This is the page view table’
PARTITIONED BY(date STRING, pos STRING)
CLUSTERED BY(userid) SORTED BY(viewTime) INTO 32 BUCKETS
ROW FORMAT DELIMITED ‘\t’
FIELDS TERMINATED BY ‘\n’
STORED AS SEQUENCEFILE;
创建带索引字段的表:
CREATE TABLE invites (foo INT, bar STRING) PARTITIONED BY (dindex STRING);
复制一个空表:
CREATE TABLE empty_key_value_store
LIKE key_value_store;
查看表结构:
desc psn;
2.///插入sql
向数据表内加载文件:
LOAD DATA [LOCAL] INPATH ‘filepath’ [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 …)]
–load操作只是单纯的复制/移动操作,将数据文件移动到Hive表对应的位置。
–加载本地
LOAD DATA LOCAL INPATH ‘./examples/files/kv1.txt’ OVERWRITE INTO TABLE pokes;
–加载HDFS数据,同时给定分区信息
LOAD DATA INPATH ‘/user/myname/kv2.txt’ OVERWRITE INTO TABLE invites PARTITION (ds=‘2008-08-15’);
将查询结果插入到Hive表:
INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 …)] select_statement1 FROM from_statement;
–多插入模式:
FROM from_statement
INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 …)] select_statement1
[INSERT OVERWRITE TABLE tablename2 [PARTITION …] select_statement2] …
–自动分区模式
INSERT OVERWRITE TABLE tablename PARTITION (partcol1[=val1], partcol2[=val2] …) select_statement FROM from_statement;
将查询结果插入到HDFS文件系统中:
INSERT OVERWRITE [LOCAL] DIRECTORY directory1 SELECT … FROM …
FROM from_statement
INSERT OVERWRITE [LOCAL] DIRECTORY directory1 select_statement1
[INSERT OVERWRITE [LOCAL] DIRECTORY directory2 select_statement2]
INSERT INTO
INSERT INTO TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 …)] select_statement1 FROM from_statement;
insert overwrite和insert into的区别:
insert overwrite 会覆盖已经存在的数据,假如原始表使用overwrite 上述的数据,先现将原始表的数据remove,再插入新数据。
insert into 只是简单的插入,不考虑原始表的数据,直接追加到表中。最后表的数据是原始数据和新插入数据。
3.///删除sql
4.///查询sql
1.增加rownumber列
select
ROW_NUMBER ()over( order by name ) ,name ,bd_date
from t --此时这两个union后有id的会在前面。
参考 https://blog.csdn.net/cclovezbf/article/details/121339104
2.
其他操作参考:参考中的语法
向hive表中添加一条数据参考https://www.csdn.net/tags/MtTaEgwsNTY1ODgtYmxvZwO0O0OO0O0O.html
参考:https://blog.csdn.net/qq_30982323/article/details/80938368
https://blog.csdn.net/technologist_28/article/details/122046568
https://blog.csdn.net/qq_41187116/article/details/125814536
语法 https://www.cnblogs.com/starzy/p/11441131.html
常用函数: date_diff(current_date,date2) . //时间差date_diff(date1,date2) date1,date2时间差
date_add(current_date,1) . //今天+1
date_sub(current_date,1) . //今天-1
from_unixtime(datatime, ‘yyyy-MM-dd’)
Grouping Sets 用法 。 https://blog.csdn.net/qq_35488412/article/details/109370741
2.Java操作hive
1.Java实现hive增删改查
详情见项目hadooptest . hive/crud/HIVEController.java
参考:https://www.codenong.com/cs106065536/
2.自定义函数UDF
详情见项目hadooptest . hive/udf/TestUDF.java
public class StudyUdf extends UDF {
private String str = new String();
public String evaluate(String str){
if (str == null){
return null;
}
return str+"hello";
}
public static void main( String[] args ) {
StudyUdf str = new StudyUdf();
String evaluate = str.evaluate("0000");
System.out.println(evaluate);
}
}
打包步骤
编译选择
idea ->Project Structure->Artifacts->jar-From modules with dependencies
选择主函数为刚才写的UDF类路径
起名udf.jar等等
编译
Build->Build Artifacts->刚才设置的jar包udf.jar->Build
Java打包参考:https://blog.csdn.net/ZZQHELLO2018/article/details/124431906
在Hive中创建这个UDF
CREATE FUNCTION udf_1 AS ‘com.udf.Strip’ using jar ‘hdfs:///udf/work.jar’
udf_1为给函数起的名字 using jar后面是jar在hdfs中的位置
调用自己写的UDF 。 例如下
hive> select udf_1(“opp”);
OK
opphello
参考:https://blog.csdn.net/chw65897/article/details/115648224
3.命令行执行hive
-e执行sql
[linux01@test hive
]
b
i
n
/
h
i
v
e
−
e
"
s
e
l
e
c
t
∗
f
r
o
m
t
a
b
0
1
;
"
1
−
f
执行脚本中
s
q
l
语句编写
s
q
l
脚本
[
l
i
n
u
x
01
@
t
e
s
t
h
i
v
e
] bin/hive -e "select * from tab_01;" 1 -f执行脚本中sql语句 编写sql脚本 [linux01@test hive
]bin/hive−e"select∗fromtab01;"1−f执行脚本中sql语句编写sql脚本[linux01@testhive] touch /data/test/hive-f-test.sql
//storage parquet
hadoop 练习项目:https://github.com/QingYang12/hadooptest