1. hive中的表的分类
1.1 内部表(管理表)
create table t3(name string,.....);
- 就是说数据的生命周期受表的控制,当表删除的时候,其数据文件一并被删除*
2.2 外部表
create ==external== table t4(name string,....);
- 就是说数据的生命周期不受表的控制,当表删除的时候,其数据文件并不会删除
1.3 分区表
- 分区可以理解为分类,通过分类把不同类型的数据放到不同的目录下
- 分类的标准就是分区字段,可以一个,也可以多个
- 分区表的意义在于优化查询。查询时尽量利用分区字段。如果不使用分区字段,就会全部扫描
- 分区表也是hive优化的一种很重要的手段
- 入库数据
- 小明 23 1994
小花 20 1993
小丽 30 1992
- 小明 23 1994
- 创建分区表(指定分区字段)
create table t7(name string,age int)
partitioned by(year string,month string)
row format delimited fields terminated by ' ';
- 给分区表添加分区
- alter table t7 add partition(year=2008,month=02);
- alter table t7 add partition(year=2008,month=03);
- 把数据入库
- load data local inpath ‘t5.txt’ into table t7 partition(year=2008,month=02);
- 展示所有分区
- show partitions t7
- 删除分区
- alter table t7 drop partition(year=2008,month=02);
1.4 桶表
桶表是对数据进行哈希取值,然后放到不同文件中存储
- 桶表的主要作用:
- 数据抽样
- 提高某些查询效率
- create table t8(id string) clustered by(id) into 3 buckets;
- insert into t8(name,age) values(‘admin’,12);
- 在桶表中如果使用loaddata则不能进行分桶操作(物理上没有分桶文件)
2 . Hive数据的输出结果
insert overwrite local directory '/xxx.d' select * from t8;
3. Hive中视图
create view v1 as select * from t4;
select * from v1;
4. Hive表的复制
- 复制表结构和数据
create table t9 as select * from t4;
- 复制表结构,但不复制数据
create table t10 like t4;
5. Hive的API的访问
-
启动hiveserver2
- hive --service hiveserver2
- hiveserver2
- hiveserver2默认监听的端口为10000
-
导入依赖
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-jdbc</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.6.4</version>
</dependency>
- 编写代码
Class.forName("org.apache.hive.jdbc.HiveDriver");
Connection conn = DriverManager.getConnection("jdbc:hive2://mini01:10000/db1");
Statement statement = conn.createStatement();
ResultSet resultSet = statement.executeQuery("select * from t4");
while (resultSet.next()) {
System.out.println(resultSet.getString(1));
System.out.println(resultSet.getString(2));
}
-
出现的错误(User: root is not allowed to impersonate root)
修改core-site.xml,在其中添加两个属性
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
- 发送到其他主机
scp core-site.xml mini05:/opt/hadoop/etc/hadoop/
6. 后台监听hiveserver2
- nohup hiveserver2 >/dev/null 2>&1 &