Hive常用语句

1Hive简介

Hive对我来说就是一个基于HDFS的数据仓库,它提供了一个种类SQL语言(和SQL标准基本一样又有一些特殊的地方不一样),能让不精通Java语言而熟悉SQL语言的工程师,快速的对HDFS或其他存储文件系统如Amazon,S3,上的数据进行数据分析,是Hadoop生态系统中非常重要的一个工具。对于大数据分析师而言,HiveQL则是必须要掌握的一个工具。

2.Hive常用语句

2.1菜鸟建表法

1.直接建表,指定分隔符,默认存储为text,也可以指定存储格式!

create table if not exists employees(
nam STRING,
salary FLOAT comment "income",
subordinates ARRAY<STRING>,
deductions MAP<STRING, FLOAT>,
address STRUCT<street:STRING, city:STRING, state:STRING,zip:INT>
)
row format delimited
fields terminated by ","
collection items terminated by "-"
map keys terminated by "_"
lines terminated by "\n"
stored as textfile;
--comment注释,collection items以"-"分割,即此建表语句中的ARRAY,map keys以"_"分割,行以"\n"分割,存储为text格式,也可以选则sequence
等,text是默认值。
--查看表结构:
hive> desc employees;
OK
nam string
salary float income
subordinates array<string>
deductions map<string,float>
address struct<street:string,city:string,state:string,zip:int>
Time taken: 0.153 seconds, Fetched: 5 row(s)

--也可以用desc extended employees;或者desc formatted employees;来显示更加详尽冗余的表信息。

2从查询语句建表

--原表
hive> select * from tb151;
OK
0    马文楷    29
1    王俊朋    28
2    李玉林    28
3    陈鹏辉    28
4    李春廷    28
5    白卫东    27--通过查询语句建表

create table tb151_sample as select * from tb151 tablesample(5 rows);

hive> select * from tb151_sample;
OK
0 马文楷 29
1 王俊朋 28
2 李玉林 28
3 陈鹏辉 28
4 李春廷 28

--注:tablesample是表抽样函数,5 rows代表抽取前5行,也可以是百分比(50 percent)或按照内存抽样(10M):

3根据已知表结构创建表

create table test_tb like tb151;
hive> desc tb151;
OK
id                      string
name                    string
age                     int
Time taken: 0.173 seconds, Fetched: 3 row(s)
hive> desc test_like;
OK
id                      string
name                    string
age                     int
Time taken: 0.164 seconds, Fetched: 3 row(s)

2.2菜鸟导入导出Hive数据的几种方法

1.装载数据

--1直接从本地导入表
load data local inpath "/path/to/data" overwrite into table tbname;
--注:local指定本地目录,不加的话默认是HDFS目录,overwrite关键字直接覆盖原表数据
--2将查询语句结果导入表
insert overwrite table tbname partition(partname="ptname")
select * from tbname2 where....;
--注:overwrite关键字会覆盖元数据,使用into则追加数据

2.导出数据

--1如果数据文件恰好是需要的格式则直接从HDFS目录下载即可
hadoop fs -get /path
--2通过查询语句
insert overwrite local directory "/path/to/data"
select ... from tbname where...;
--3通过shell命令行
/path/to/hive -e "select ...from tbname where...." >> /path/to/data.txt

2.3关于Join

一般情况下按一下规则进行join:

1.从左到右表由小到大

2或者显示的标记大表

select /*+STREAMTABLE(t)*/t.a,t1.b from t join t1 where……;
--注:t表示大表

3小表join大表可以使用mapjoin将小表放到内存中

select /*+MAPJOIN(d)*/s.ymd,s.tmd from s join d on s.ymd=d.ymd;
--注:d指的是小表

3.Hive集合之交并差

先看原始表:

hive> select * from tb151;
OK
0    马文楷    29
1    王俊朋    28
2    李玉林    28
3    陈鹏辉    28
4    李春廷    28
5    白卫东    27

1.Hive并集可以用union实现

hive> select age from tb151 union
    > select age from tb151;
Total MapReduce CPU Time Spent: 3 seconds 520 msec
OK
27
28
29
Time taken: 36.328 seconds, Fetched: 3 row(s)

2.Hive的union all则是合并两个集合不去重

> select age from tb151 union all
> select age from tb151;
Total MapReduce CPU Time Spent: 1 seconds 290 msec
OK
29
29
28
28
28
28
28
28
28
28
27
27
Time taken: 23.941 seconds, Fetched: 12 row(s)

3.Hive交集可以通过先A左关联B,然后得到的结果将右列不为NULL的元素去重即可

4差集左表A-右表B,先用Aleft joinB,然后得到的结果右列为NULL的左列元素去重即可

注:3,4可以先把做关联的结果存储为一个表,然后根据要求进行选择去重即可,咱们看一下关联结果就OK

hive> select * from tb151;
OK
0    马文楷    29
1    王俊朋    28
2    李玉林    28
3    陈鹏辉    28
4    李春廷    28
5    白卫东    27
Time taken: 0.141 seconds, Fetched: 6 row(s)
hive> select * from tb151_sample;
OK
0    马文楷    29
1    王俊朋    28
2    李玉林    28
3    陈鹏辉    28
4    李春廷    28
hive> select t.age,t1.age from tb151 t left join tb151_sample t1
      > on t.age=t1.age;
Total MapReduce CPU Time Spent: 1 seconds 550 msec
OK
29    29
28    28
28    28
28    28
28    28
28    28
28    28
28    28
28    28
28    28
28    28
28    28
28    28
28    28
28    28
28    28
28    28
27    NULL
--注:两个表的结果交集很明显右列不为空的元素去重,差集左表-右表则是右列为空的元素去重即可

4.Hive的几种执行方式

--1执行单条语句
hive -e "select * from tbname"
--2执行sql文件
hive -f /path/to/sqlfil
--3可以在hive命令行通过dfs执行Hadoop命令
hive> dfs -ls /;
Found 3 items
drwxr-xr-x   - root supergroup          0 2019-02-15 19:18 /test
drwx-wx-wx   - root supergroup          0 2019-02-12 18:23 /tmp
drwxr-xr-x   - root supergroup          0 2019-01-27 09:19 /user
--4也可以在hive命令行通过!+命令执行shell的一些简单命令
hive> ! ls /wjp;
data
javacode
pycode
readDoc.py
sparkcode
udf

原文地址:https://www.cnblogs.com/junpengwang/p/10804461.html

时间: 2024-11-12 14:31:39

Hive常用语句的相关文章

由“Beeline连接HiveServer2后如何使用指定的队列(Yarn)运行Hive SQL语句”引发的一系列思考

背景 我们使用的HiveServer2的版本为0.13.1-cdh5.3.2,目前的任务使用Hive SQL构建,分为两种类型:手动任务(临时分析需求).调度任务(常规分析需求),两者均通过我们的Web系统进行提交.以前两种类型的任务都被提交至Yarn中一个名称为“hive”的队列,为了避免两种类型的任务之间相互受影响以及并行任务数过多导致“hive”队列资源紧张,我们在调度系统中构建了一个任务缓冲区队列,所有被提交的任务(手动任务.调度任务)并不会直接被提交至集群,而是提交至这个缓冲区队列中,

sql server常用函数、常用语句

一.常用函数 1.字符串函数 : charindex(':','abc:123')    --寻找一个字符在一段字符串中起始的位置 len('zhangsan')   --获取一段字符串的长度 left('Ly,君子之耀',2) --从一段字符串左边返回指定长度的字符 right(char_expr,int_expr)  --返回字符串右边int_expr个字符 substring(expression,start,length) --截取字符串 datalength(Char_expr)  -

SQL 常用语句

–-表现最差的前10名使用查询 SELECT TOP 10 ProcedureName = t.text, ExecutionCount = s.execution_count, AvgExecutionTime = isnull ( s.total_elapsed_time / s.execution_count, 0 ), AvgWorkerTime = s.total_worker_time / s.execution_count, TotalWorkerTime = s.total_wo

hive常用命令

hive常用命令 show tables; 列出hive里面所有数据表名 desc userProfile; 显示数据表userProfile的基本表字段及字段type desc extended trackinfo; 显示数据表trackinfo的详细信息,包括字段说明,数据表等 /usr/local/cloud/hive/bin/hive 进入hive数据库 select attribute_name from pms_attribute where attribute_id=21000 a

SQL常用语句积累

SQL 常用语句积累: 一. SQL 基本语句 SQL 分类: DDL -数据定义语言 (Create , Alter , Drop , DECLARE) DML -数据操纵语言 (Select , Delete , Update , Insert) DCL -数据控制语言 (GRANT , REVOKE , COMMIT , ROLLBACK) 首先 , 简要介绍基础语句: 1 .说明:创建数据库 Create DATABASE database-name 2 .说明:删除数据库 drop d

mysql数据库常用语句2

关于mysql常用语句的整理,上一篇涉及到ddl.dml以及一些简单的查询语句. 1:mysql分页查询 select * from table_name limit 5,10;   从下标为5元素查询,查询10条记录,注意:mysql下标从0开始 2:关联查询 select a.id,a.name,b.id,b.name from table_name a ,table_name b where a.id=b.id;   表a和表b以字段id关联查询 3:比较下面语句 select * fro

Oracle 常用语句整理

Oracle 常用语句整理 最近做了份大型数据库作业.遇到了一些问题,在网上找的很是辛苦,于是,将一些常用的语句记录下来,方便大家学习.都是一些基本的东西.如果忘了,可以来看看. 1.创建临时表空间 create temporary tablespace car_data //car_data,表空间名 tempfile 'C:\Users\Administrator\Desktop\car_data.dbf'//表空间路径 size 50m autoextend on next 50m max

【Oracle】常用语句集合

1 oracle常用经典SQL查询 2 常用SQL查询: 3 4 1.查看表空间的名称及大小 5 6 select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size 7 from dba_tablespaces t, dba_data_files d 8 where t.tablespace_name = d.tablespace_name 9 group by t.tablespace_name; 10 11 2.查看表空间物

SSH查看服务器日志常用语句

SSH客户端查看服务器日志常用语句即为linux进行文件夹进行文件查看的常用语句: 1.cd 2.tail 3.grep [options] pattern file -c:只输出匹配行的计数.-I:不区分大 小写(只适用于单字符).-h:查询多文件时不显示文件名.-l:查询多文件时只输出包含匹配字符的文件名.-n:显示匹配行及 行号.-s:不显示不存在或无匹配文本的错误信息.-v:显示不包含匹配文本的所有行. 面对庞大的日志文件,单独下载并打开文件,从中提取信息的话,很吃力.这时,grep语句