hive建表详解

本文详细介绍了Hive建表的各种语法,包括内部表与外部表的区别,如何使用IF NOT EXISTS避免异常,以及COMMENT添加描述信息。重点讲解了PARTITIONED BY创建分区表,CLUSTERED BY与SORTED BY创建分桶表,以及ROW FORMAT和STORED AS定义数据存储格式。分区和分桶的主要目的是优化查询性能,减少数据扫描范围。

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

建表语法:
  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]
1.EXTERNAL 关键字 外部的
  决定建表的类型
    hive中的表分为两种类型
     1)内部表(管理表)MANAGED_TABLE
     2)外部表 EXTERNAL_TABLE
     建表的时候指定这个关键字 则证明建的表是外部表 否则是内部表
  内部表和外部表的区别:
    最主要的一个区别 就是数据删除的时候
    内部表是元数据和数据一起删除
    外部表只删除元数据 原始数据不会被删除
    一般情况下对于一些需要共享数据的表 一定需要建外部表
    一般情况下内部表在建表的时候使用默认路径就可以了
  外部表在建表的时候一般情况下需要指定表的数据存储目录为原始数据的存储目录

2.IF NOT EXISTS 忽略异常的语句
  建表的时候如果添加上 如果表存在 则不抛错 但是表也不会被创建
  if EXISTS
  删表的时候指定可以忽略异常 如果表不存在 不会抛异常
  上面的法则同样适用于数据库的创建和删除
3.COMMENT ‘’ 添加列的描述信息的
4.PARTITIONED BY (col_name data_type [COMMENT col_comment], …)
  创建分区表 并指定分区字段
  注意:
    创建分区表的时候 分区字段一定不能再表的原始字段中存在
    分区字段一定是一个全新的字段
5.[CLUSTERED BY (col_name, col_name, …)
  [SORTED BY (col_name [ASC|DESC], …)] INTO num_buckets BUCKETS]

  创建分桶表 指定分桶字段 和分桶的个数
    CLUSTERED BY 指定的分桶字段
      注意:分桶表的分桶字段一定是表的原始字段中的一个或几个
    SORTED BY:指定排序的字段 指定每一个桶表中的排序规则
    INTO num_buckets BUCKETS:指定分桶的个数
 分区表 和 分桶表
  分区表:
    分区字段的选取:
     经常进行过滤的字段 通常情况下在生产中使用的分区字段最多的就是时间 地域
     主要目的:减少数据的扫描范围 为了提高查询性能
     hive来说存储的数据海量的数据 一个表中的数据量有可能很大 这个时候用户在进行查询的时候 比较困难的
     select name,age from student where age<18;全表扫描
     为了避免一个表中的数据量过于庞大,这个时候就出现了分区表
     将一个庞大的数据表进行切分存储 切分的时候按照用户指定的分区字段进行存储
      例如:学生表student/stu 有2T的数据量
     字段有:id name sex age department
     如果用户经常按照年龄进行查询 这时候就可以以年龄进行划分数据
      student/17/stu
      student/18/stu
      student/19/stu
      student/20/stu
     select name,age from student where age<18; 不会进行全表扫描了 仅仅扫描student/17/stu 通过减少数据的扫描范围进行提升查询性能
   分区表在目录结构上 相当于对数据进行按照分区字段划分成不同的数据目录
  分桶表:
    类似于MR中的分区的概念
    相对于分区表更细粒度的对表的数据的一个划分
    分桶表在目录结构上:相当于对数据按照分桶字段划分成不同的文件
    对数据按照指定的分桶字段和分桶的个数进行数据的分桶
    分桶字段 name 分桶个数 8
    hive就可以对数据进行进一步的分桶切分存储
     name.hashCode()%8—0 0号桶中
      ----1 1
      —2 2
      。。。。
      ----7 7
      student/17/part-r-00000
      student/17/part-r-00001
      student/17/part-r-00002
      student/17/part-r-00003
      …
      student/17/part-r-00007
   作用:
     1.提升抽样的效率
     2.提升join的性能
6.ROW FORMAT row_format 指定分隔符
   fields terminated by 指定列分隔符
   lines terminated by 指定行分割符
   items terminated by 指定集合中的元素的分割符
   。。。。。
7. STORED AS file_format
   指定原始文件的存储格式
    TEXTFILE 默认情况下 不指定文件的存储方式 就默认这种存储方式 文本的存储方式
    SEQUENCEFILE 二进制的存储格式
    RCFILE 行列结合的存储方式
8.LOCATION hdfs_path 指定原始数据的存储目录
   如果不指定 则存储在
     hive.metastore.warehouse.dir
     /user/hive/hive2.3.2/mydata
   如果指定 则会覆盖配置文件中的目录 存储在指定的目录下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值