hiveql笔记(一)
1、创建表
create table if not exists mydb.employees{
name String COMMENT 'Employee name',
salary FLOAT COMMENT 'Empolyee salary',
subordinates APPAY<STRING> COMMENT 'Names of subordinates',
deductions MAP<STRING,FLOAT>
COMMENT 'Keys are deductions names,values are percentages'
address STRUCT<street:STRING,city:String,state:STRING,zip:INT>
COMMENT 'Home address')
COMMENT 'Desription of the table'
TBLPROPERITES ('creator '='me','created_at'='2012-01-02 10:00:00',...)
LOCATION '/usr/hive/warehouse/mydb.db/employees';
Hive 会自动添加两个表属性:一个是last_modified_by,其保存着最后修改这个表的用户的用户名。另一个是last_modified_time,其保存着最后修改的新纪元时间秒。
2、查看表的详细表结构信息
DESCRIBE EXTENDED mydb.employees;
//在表名后添加字段的名称,使用extended关键字也不会增加更多的输出信息。
DESCRIBE mydb.employees.salary;
3、外部表
CREATE EXTERNAL TABLE IF NOT EXISTS stocks (
exchange STRING,
symbol STRING,
ymd STRING,
price_open FLOAT,
price_high FLOAT,
price_low FLOAT,
price_close FLOAT,
volume INT,
price_adj_close FLOAT)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,‘
LOCATION '/data/stocks';
关键字EXTENAL告诉hive这个表是外部的,而后面的LOCATION..子句则用于告诉HIVE数据位于哪个路径下。
//还可以对一张存在的表进行结构复制(而不会复制数据)
CREATE EXTERNAL TABLE IF NOT EXISTS mydb.employees3
LIKE mydb.employees
LOCATION '/path/to/data';
4、分区表、管理表
CREATE TABLE employees (
name String,
salay FLOAT,
subordinates APPAY<STRING>,
deductions MAP<STRING,FLOAT>,
address STRUCT<street:STRING,city:STRING,state:STRING,zip:INT>
)
PARTITIONED BY (country STRING,state STRING);
分区表改变了Hive对数据存储的组织方式,这个表会有一个exployees目录与之对应,每个分区都有一个partXX
//可以使用show partitions命令查看表中存在的所有分区:
SHOW PARTITIONS employees;
//如果表中存在很多的分区,而只想查看是否存储某个特定分区键的分区的话,还可以在命令上添加指定了一个或多个特定分区字段值的PARTITION子句:
SHOW PARTITIONS employees PARTITION(country='US');
SHOW PARTITIONS employees PARTITION(country='US',state='AK');
5、外部分区表
CREATE EXTERNAL TABLE IF NOT EXISTS log_messages (
hms INT,
severity STRING,
server STRING,
porcess_id STRING,
message STRING)
PARTITIONED BY (year INT,month INT,day INT)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
)
//添加一个分区
ALTER TABLE log_messages ADD PARTITION(year = 2012,month = 1,day =2 )
LOCATITION 'hdfs://master_server/data/log_message/2012/01/02';
//将一个月前的分区数据拷贝到其他集群
hadoop distcp /data/log_message/2011/12/02 s3n://ourbucket/logs/2011/12/02
//修改表,将分区路径指向到S3路径:
ALTER TABLE log_messages PARTITION(year = 2011,month = 12,day = 2)
SET LOCATION 's3m://ourbucket/logs/2011/01/02';
//DESCRIBE EXTENDED log_message 语句会将分区键作为表的模式的一部分,和partitionKeys列表的内容同时进行显示:
DESCRIBE EXTENDED log_messages;
6、删除表
DROP TABLE IF EXISTS employees;
//这里有个知识点,如果开启了Hadoop回收站功能(默认是关闭),那么数据将会转移到用户在分布式文件系统中的用户跟目录下的.Trash目录下,也就是HDFS中的/usr/$USER/.Trash目录,如果要开启这个功能,需要配置fs.trash.internal的值。设置一个合理的整数,比如如果设置1440,那么就表示是24小时。
7、表重命名
ALTER TABLE log_messages RENAME TO logmsgs;
8、修改列信息
ALTER TABLE log_messages
CHANGE COLUMN hms hours_minutes_seconds INT
COMMENT 'The hours,minutes, and seconds part of the timestamp'
AFTER severity;
//这里说明,如果想将这个字段移动到第一个位置,需要使用FIRST关键字替代AFTER other_column子句即可。
9、增加列
ALTER TABLE log_messages ADD COLUMNS (
app_name STRING COMMENT 'Application name',
session_id LONG COMMENT 'The current session id');
10、删除或者替换列
//移除了之前所有的字段并重新指定了新的字段:
ALTER TABLE log_messages REPLACE COLUMNS (
hours_mins_secs INT COMMENT 'hour,minute,seconds from timestamp',
serverity STRING COMMENT 'The message severity'
message STRING COMMENT 'The rest of the message');
11、修改存储属性
ALTER TABLE log_messages
PARTITION(year = 2012,month = 1,day = 1)
SET FILEFORMAT SEQUENCEFILE;
12、通过查询语句向表中插入数据
INSERT OVERWRITE TABLE employees
PARTITION (country = 'US' , state = 'OR' )
SELECT * FROM staged_employees se
WHERE se.cnty = 'US' AND se.st = 'OR';
//如果是非分区表,之前表中的内容将会被覆盖掉
13、动态分区插入
//指定了country字段的值为静态的US,而分区字段state是动态值。
INSERT OVERWRITE TABLE employees
PARTITION (country='US',state)
SELECT ...,se.cnty,se.st
FROM staged_employees se
WHERE se.cnty = 'US';
(静态分区键必须出现在动态分区键之前)
//延伸动态分区属性:
hive.exec.dynamic.partition false 设置成true,表示开启动态分区功能
hive.exec.dynamic.partition.mode strict 设置成strict,表示允许所有分区都是动态的
hive.exec.max.dynamic.parition.pernode 100 每个mapper或reducer可以创建的最大动态分区个数。如果某个mapper或reducer尝试创建大于这个值得分区的话则会抛出一个致命错误信息。
hive.exec.max.dynamic.partitions +1000 一个动态分区创建语句可以创建的最大动态分区个数。如果超过这个值则会抛出一个致命错误信息。
hive.exec.max.created.files 100000 全局可以创建的最大文件个数。
eg:
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrct;
set.hive.exec.max.dynamic.partitions.pernode=1000;
INSERT OVERWRITE TABLE employees
PARTITION (country,state)
SELECT ...,se.cty,se.st
FROM staged_employees se;
14、单个查询语句中创建表并加载数据
CREATE TABLE ca_employees
as SELECT name,salary,address
FROM employees
WHERE se.state = 'CA';
15、导出数据
hadoop fs -cp sorce_path target_path
//也可以使用INSERT...DIRECTORY...
INSERT OVERWRITE LOCAL DIRECTOR 'tmp/ca_employees'
SELECT name,salary,address
From employees
WHERE se.state = 'CA';
参考文献《Hive编程指南》
hiveql笔记(一)的更多相关文章
- hive学习笔记之六:HiveQL基础
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- HIVE编程指南之HiveQL的学习笔记1
// HiveQLa) 数据定义语言1 数据库表的一个目录或命名空间,如果用户没有指定数据库的话,那么将会使用默认的数据库default-----创建数据库CREATE DATABASE guoyon ...
- hiveql函数笔记(二)
1.数据查询 //提高聚合的性能 SET hive.map.aggr=true; SELECT count(*),avg(salary) FROM employees; //木匾不允许在一个查询语句中 ...
- Hadoop学习笔记(1):概念和整体架构
Hadoop简介和历史 Hadoop架构体系 Master和Slave节点 数据分析面临的问题和Hadoop思想 由于工作原因,必须学习和深入一下Hadoop,特此记录笔记. 什么是hadoop? A ...
- 《Programming Hive》读书笔记(两)Hive基础知识
<Programming Hive>读书笔记(两)Hive基础知识 :第一遍读是浏览.建立知识索引,由于有些知识不一定能用到,知道就好.感兴趣的部分能够多研究. 以后用的时候再具体看.并结 ...
- Hadoop权威指南读书笔记
本书中提到的Hadoop项目简述 Common:一组分布式文件系统和通用I/O的组件与接口(序列化.javaRPC和持久化数据结构). Avro:一种支持高效.跨语言的RPC以及永久存储数据的序列化系 ...
- 01_Hadoop学习笔记内容说明
Hadoop学习笔记内容说明_00 1. 观看云帆大数据梦琪老师的<企业级 Hadoop 1.x 应用开发基础课程>2014年4月左右版本. 2. 博客是在梦琪老师的随堂笔记上改动的, ...
- 怎样在Java中运行Hive命令或HiveQL
这里所说的在Java中运行Hive命令或HiveQL并非指Hive Client通过JDBC的方式连接HiveServer(or HiveServer2)运行查询,而是简单的在部署了HiveServe ...
- Hadoop自学笔记(一)常见Hadoop相关项目一览
本自学笔记来自于Yutube上的视频Hadoop系列.网址: https://www.youtube.com/watch?v=-TaAVaAwZTs(当中一个) 以后不再赘述 自学笔记,难免有各类错误 ...
随机推荐
- maven项目 在eclipse,InteliJ IDEA中的一些问题
转载请注明出处,谢谢! 不论我们用什么ide来编辑我们的代码,最终的产品都会脱离ide来运行:正如燕飞离了巢,正如你离开了家,不期然就会运转出现问题. - 单强 2018年1月26日11:53 大家是 ...
- 用dedecms做网站时,空间服务器选择IIS还是apache???
想做一个dedecms程序的网站,不知道要选择什么样的空间,windows还是linux的?多大的空间比较适合?求高人回答. 如果是基于Linux平台的话,那不必多说自然是Apache了,因为II ...
- 独立服务器 云主机、VPS以及虚拟主机三者之间的区别是什么?哪个更好?
https://www.zhihu.com/question/21442353#answer-2442764 云主机(如 EC2,[1] )和 VPS (如 Linode,[2])都是完整的操作系统( ...
- kafka和strom集群的环境安装
前言 storm和kafka集群安装是没有必然联系的,我将这两个写在一起,是因为他们都是由zookeeper进行管理的,也都依赖于JDK的环境,为了不重复再写一遍配置,所以我将这两个写在一起.若只需一 ...
- iOS开发中一些有用的小代码
1.判断邮箱格式是否正确的代码: //利用正则表达式验证 -(BOOL)isValidateEmail:(NSString *)email { NSString *emailRegex = @&q ...
- JavaScript的三种类型检测typeof , instanceof , toString比较
1.typeof typeof是js的一个操作符,在类型检测中,几乎没有任何用处. typeof 返回一个表达式的数据类型的字符串,返回结果为javascript中的基本数据类型,包括:number. ...
- FPGA上如何求32个输入的最大值和次大值:分治
上午在论坛看到个热帖,里头的题目挺有意思的,简单的记录了一下. 0. 题目 在FPGA上实现一个模块,求32个输入中的最大值和次大值,32个输入由一个时钟周期给出.(题目来自论坛,面试题,如果觉得不合 ...
- Java进阶篇(六)——Swing程序设计(上)
Swing是GUI(图形用户界面)开发工具包,内容有很多,这里会分块编写,但在进阶篇中只编写Swing中的基本要素,包括容器.组件和布局等,更深入的内容会在高级篇中出现.想深入学习的朋友们可查阅有关资 ...
- Tomcat系统架构分析
Tomcat系统架构分析 关于这边blog呢,实际开发中并不会用到,但是我觉得还是很有必要认真的写一下.毕竟我们每天在本地撸码的时候使用的就是tomcat来做web服务器.一个常识就是说我们本地在to ...
- 【javaweb学习笔记】WEB02_HTML&CSS
一.表单相关知识 1.表单: 所有需要提交到服务器端的表单项必须使用<form></form>括起来 form标签属性(有两个): 1)action,整个表单提交的位置(可以是 ...