Hive分区表,桶表,外部表

本文主要介绍了Hive相关知识,包括表的分类,如内部表、外部表、分区表和桶表,阐述了各表特点及操作;还涉及Hive数据输出结果、视图、表的复制等内容,同时讲解了Hive的API访问,包括启动hiveserver2、处理错误及后台监听等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
  • 创建分区表(指定分区字段)
  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 &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值