HIVE基本语法以及HIVE分区
HIVE小结
HIVE基本语法
HIVE和Mysql十分类似
建表规则
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可以为表与字段增加描述
创建表
hive> CREATE TABLE IF NOT EXISTS test1
> (id INT,name STRING);
删除表
drop table test1;
查看表结构
desc test1;
修改表名
alter table test1 rename to test2;
修改表结构
alter table test1 add columns(address string ,grade string);
创建和已知表相同结构的表
create table test3 like test1;
加载本地数据
load date local inpath '/home/date/' into table test1;
注意可以在into 前面添加overwrite表示覆盖之前在test1的数据,如果没有就表示加载本地数据在原始数据的后面
加载hdfs的文件
首先将文件上传到hdfs文件系统对对应的目录上
hadoop fs -put /home/.txt /usr/**
然后加载hdfs中的数据
load data inpath /usr/** into table test1;
插入数据
insert overwrite table test2 select * from test1;
查询数据
和mysql语法上没甚没区别
- 查询单个字段的数据
- where条件查询
- all和distinct
- limit限制查询
- group by
- order by
- sort bu
- distribute by
- cluster by
HIVE分区
hive分区是为了更方便数据管理,常见的有时间分区和业分区
create table t1(
id int
,name string
,hobby array<string>
,add map<String,string>
)
partitioned by (pt_d string)
需要注意的是分区字段不能和表中的字段重复,否则就会报错:
FAILED: SemanticException [Error 10035]: Column repeated in partitioning columns
我们在加载数据的时候也可以分区加载
load data local inpath '/home/hadoop/Desktop/data' overwrite into table t1 partition ( pt_d = '201701');
之后我们再将同一份数据加载到不同的分区中
load data local inpath '/home/hadoop/Desktop/data' overwrite into table t1 partition ( pt_d = '000000');
查询一下数据 select * from t1;
1 xiaoming ["book","TV","code"] {"beijing":"chaoyang","shagnhai":"pudong"} 000000
2 lilei ["book","code"] {"nanjing":"jiangning","taiwan":"taibei"} 000000
3 lihua ["music","book"] {"heilongjiang":"haerbin"} 000000
1 xiaoming ["book","TV","code"] {"beijing":"chaoyang","shagnhai":"pudong"} 201701
2 lilei ["book","code"] {"nanjing":"jiangning","taiwan":"taibei"} 201701
3 lihua ["music","book"] {"heilongjiang":"haerbin"} 201701
创建分区除了在创建表的时候启动partition by实现,还可以
alter table t1 add partition (pt_d string)
这样就创建了一个分区,这时会看到hive在hdfs中创建了相应的文件夹
查询相应的分区的数据
select * from t1 where pt_d = ‘000000’
添加分区,增加一个分区文件
alter table t1 add partition (pt_d = ‘333333’);
删除分区(删除对应的分区文件)
注意,对于外表进行drop partition并不会删除hdfs上的文件,并且通过msck repair table table_name同步回hdfs上的分区。
alter table test1 drop partition (pt_d = ‘20170101’);
查询分区
show partitions table_name;
修复分区
修复分区就是重新同步hdfs上的分区信息。
msck repair table table_name;
插入数据
insert overwrite table partition_test partition(stat_date='2015-01-18',province='jiangsu')
select member_id,name from partition_test_input
where stat_date='2015-01-18'
and province='jiangsu';
内部表和外部表的区别
Hive中表与外部表的区别:
1、在导入数据到外部表,数据并没有移动到自己的数据仓库目录下,也就是说外部表中的数据并不是由它自己来管理的!而表则不一样;
2、在删除表的时候,Hive将会把属于表的元数据和数据全部删掉;而删除外部表的时候,Hive仅仅删除外部表的元数据,数据是不会删除的!
那么,应该如何选择使用哪种表呢?在大多数情况没有太多的区别,因此选择只是个人喜好的问题。但是作为一个经验,如果所有处理都需要由Hive完成,那么你应该创建表,否则使用外部表!
HIVE基本语法以及HIVE分区的更多相关文章
- Hive基本语法操练
建表规则如下: CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data_type [COMMENT col_comment ...
- Hadoop Hive sql语法详解
Hadoop Hive sql语法详解 Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,可以将结构 化的数据文件 ...
- 一脸懵逼学习Hive的使用以及常用语法(Hive语法即Hql语法)
Hive官网(HQL)语法手册(英文版):https://cwiki.apache.org/confluence/display/Hive/LanguageManual Hive的数据存储 1.Hiv ...
- 【Hive学习之五】Hive 参数&动态分区&分桶
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 hadoop-3.1.1 apache-hive-3.1.1 ...
- Hive SQL 语法学习与实践
Hive 介绍 Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,可以将结构化的数据文件映射为一张数据库表,并提供 ...
- Hive SQL语法总结
Hive是一个数据仓库基础的应用工具,在Hadoop中用来处理结构化数据,它架构在Hadoop之上,通过SQL来对数据进行操作. Hive 查询操作过程严格遵守Hadoop MapReduce 的作业 ...
- Hadoop Hive概念学习系列之hive里的分区(九)
为了对表进行合理的管理以及提高查询效率,Hive可以将表组织成“分区”. 分区是表的部分列的集合,可以为频繁使用的数据建立分区,这样查找分区中的数据时就不需要扫描全表,这对于提高查找效率很有帮助. 分 ...
- Hive 基本语法操练(六):Hive 的权限控制
Hive 的权限控制 Hive从0.10可以通过元数据控制权限.但是Hive的权限控制并不是完全安全的.基本的授权方案的目的是防止用户不小心做了不合适的事情. 为了使用Hive的授权机制,有两个参数必 ...
- Hive 基本语法操练(五):Hive 的 JOIN 用法
Hive 的 JOIN 用法 hive只支持等连接,外连接,左半连接.hive不支持非相等的join条件(通过其他方式实现,如left outer join),因为它很难在map/reduce中实现这 ...
随机推荐
- d3js selections深入理解
D3 selections选择DOM元素以便可以对这些dom元素做相应的操作,比如:更改其style,修改其属性,执行data-join操作,或者插入.删除相应elements 比如,如果给定5个ci ...
- redis下的adlist
//adlist.h #ifndef __ADLIST__H__ #define __ADLIST__H__ typedef struct listNode_ { struct listNode_ * ...
- Spring Boot 的配置文件
Profile 配置 Profile 是 Spring 用来针对不同的环境对不同的配置提供支持的,全局的 Profile 配置使用 application-{profile}.properties ( ...
- IntelliJ IDEA常用设置(转)
IntelliJ IDEA是一款非常优秀的JAVA编辑器,初学都可会对其中的一些做法感到很别扭,刚开始用的时候我也感到很不习惯,在参考了网上一些文章后在这里把我的一些经验写出来,希望初学者能快速适应它 ...
- MySQL面试宝典
==============================================# 参数==============================================auto ...
- 创建 JavaScript 对象
http://www.w3school.com.cn/js/js_objects.asp 创建 JavaScript 对象 通过 JavaScript,您能够定义并创建自己的对象. 创建新对象有两种不 ...
- java反射机制执行命令
public class Encryptor{ public static void main(String[] args) throws IOException, ClassNotFoundExce ...
- EF和linq to sql 关系
LINQ to SQL 允许你用任何类来代表数据库中的数据.表.同样的,EF也允许你用任何类来代表苏据库中的数据.表. 所不同的的地方是Linq to sql 用这些被修饰过的类直接同数据库打交道,存 ...
- 一般处理程序中,获取session
注意了: 1.要在一般处理程序中获取其他页面的session值,需要引用名空间: using System.Web.SessionState; 2.然后继承一个接口:IRequiresSessionS ...
- Golang测试包
Golang测试包 golang自带了测试包(testing),直接可以进行单元测试.性能分析.输出结果验证等.简单看着官方文档试了试,总结一下: 目录结构和命令 使用golang的测试包,需要遵循简 ...