首页 > 其他分享 >Hive(一)数据类型以及DDL数据定义

Hive(一)数据类型以及DDL数据定义

时间:2024-09-02 14:06:11浏览次数:4  
标签:name partition 数据类型 Hive month dept DDL table 数据

Hive数据类型

一、基本数据类型

Hive数据类型 Java数据类型
TINYINT byte
SMALINT short
INT int
BIGINT long
BOOLEAN boolean
FLOAT float
DOUBLE double
STRING string
TIMESTAMP
BINARY

对于Hive的String类型相当于数据库的varchar类型,该类型是一个可变的字符串。

二、集合数据类型

数据类型 描述 示例
STRUCT 相当于java语言当中没有方法的对象,只有属性。例如,如果某个列的数据类型是STRUCT{first STRING, last STRING},那么第1个元素可以通过字段.first来引用。 struct()
MAP MAP是一组键-值对元组集合,使用数组表示法可以访问数据。例如,如果某个列的数据类型是MAP,其中键->值对是'first'->'John'和'last'->'Doe',那么可以通过字段名['last']获取最后一个元素 map()
ARRAY 数组是一组具有相同类型和名称的变量的集合。这些变量称为数组的元素,每个数组元素都有一个编号,编号从零开始。例如,数组值为[‘John’, ‘Doe’],那么第2个元素可以通过数组名[1]进行引用。 array()

三、类型转化

  • 可以使用CAST操作显示进行数据类型转换
    CAST('1' AS INT)将把字符串'1'转换成整数1;如果强制类型转换失败,如执行CAST('X' AS INT),表达式返回空值NULL。

DDL数据定义

一、创建数据库

  • 创建一个数据库,数据库在HDFS上的默认存储路径是/opt/hive/warehouse/*.db
    create database if not exists db_name;
  • 创建一个数据库,指定数据库在HDFS上存放的位置
    create database if not exists db_name location 'hdfs路径';

二、查询数据库

  • 显示数据库
    show databases;
  • 过滤显示查询的数据库
    show databases like 'hivetest*';
  • 查看数据库详情
    desc database hivetest;
  • 切换当前数据库
    use 目标数据库名称;

三、删除数据库

  • 删除空数据库
    drop database 数据库名称;
  • 如果删除的数据库不存在,最好采用if exists判断数据库是否存在
    drop database if exists 数据库名称;
  • 如果数据库不为空,可以采用cascade命令强制删除
    drop database 数据库名称 cascade;

四、创建表

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]

补充
在hive中建表时,需要决定如何存储和读取表中的数据。数据在存储时需要被转换成一种格式(序列化),读取时需要将这种格式再转换成我们能理解的数据(反序列化)。为了完成这个转化,hive使用了一个叫做SerDe的工具。

  • CREATE TABLE创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常;用户可以用IF NOT EXISTS选项来忽略这个异常。
  • EXTERNAL关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION),Hive创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。
  • COMMENT:为表和列添加注释。
  • PARTITIONED BY创建分区表
  • CLUSTERED BY创建分桶表
  • SORTED BY不常用
  • ROW FORMAT DELIMITED [FIELDS TERMINATED BY char] [COLLECTION ITEMS TERMINATED BY char] [MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char]:通过定义ROW FORMAT来告诉hive我们想要自定义数据的存储格式或者用特定的方式存储复杂的数据结构,例如指定了字段(列)之间的分隔符、集合中各个元素之间的分隔符、记录(行)之间的分隔符
  • STORED AS指定存储文件类型
    常用的存储文件类型:SEQUENCEFILE(二进制序列文件)、TEXTFILE(文本)、RCFILE(列式存储格式文件)
    如果文件数据是纯文本,可以使用STORED AS TEXTFILE。
    如果数据需要压缩,使用STORED AS SEQUENCEFILE。
  • LOCATION:指定表在HDFS上的存储位置
  • LIKE允许用户复制现有的表结构,但是不复制数据

1、内部表
默认创建的表都是所谓的管理表,有时也被称为内部表。Hive默认情况下会将这些表的数据存储在由配置项hive.metastore.warehouse.dir(例如,/opt/hive/warehouse)所定义的目录的子目录下。删除一个管理表时,Hive也会删除这个表中数据,管理表不适合和其他工具共享数据。

  • 普通建表
create table if not exists student2(
id int, name string
)
row format delimited fields terminated by '\t';
  • 根据查询结果创建表(查询的结果会添加到新创建的表中)
create table if not exists student3 as select id, name from student;
  • 根据已存在的表结构创建表
create table if not exists student4 like student;
  • 查询表的类型
desc formatted student2;

2、外部表
删除外部表并不会删除掉这份数据,不过表述表的元数据信息会被删除掉。
(1)管理表和外部表的使用场景
假设一家电商公司的数据分析工程师,需要处理和分析大量的用户订单数据,这些数据每天都会生成,并且需要进行负责的分析和报告。创建管理表来存储最近一个月的用户订单数据,这些数据需要定期更新,旧数据将会被新数据替换。创建外部表来存储所有的历史订单数据,这些数据由另一个团队管理,并且存储在一个共享的HFDS中,该工程师需要对这些数据进行查询和分析,不需要管理数据的存储。
(2)管理表和外部表的相互转换

  • 修改内部表student为外部表
alter table student set tblproperties('EXTERNAL'='TRUE');
  • 修改外部表student为内部表
alter table student set tblproperties('EXTERNAL'='FALSE');

注意:('EXTERNAL'='TRUE')和('EXTERNAL'='FALSE')为固定写法,区分大小写!

五、分区表

对应一个HDFS文件系统上的独立的文件夹,该文件夹下是该分区所有的数据文件。Hive中的分区就是分目录,把一个大的数据集根据业务需要分割成小的数据集。在查询时通过WHERE子句中的表达式选择查询所需要的指定的分区,这样的查询效率会提高很多。
1、创建分区表语法

create table dept_partition(
deptno int, dname string, loc string
)
partitioned by (month string)
row format delimited fields terminated by ',';

创建了一个分区表dept_partition,其中包含三个字段:部门编号(deptno)、部门名称(dname)和部门位置(loc)。此外,表通过month字段进行分区。
2、加载数据到分区表

load data local inpath '/opt/dept.txt' into table default.dept_partition partition(month='201707’);
load data local inpath '/opt/dept.txt' into table default.dept_partition partition(month='201708’);
load data local inpath '/opt/dept.txt' into table default.dept_partition partition(month='201709’);

3、查询分区表中的数据

  • 单分区查询
select * from dept_partition where month='201709';
  • 多分区联合查询
select * from dept_partition where month='201709'
union
select * from dept_partition where month='201708'
union
select * from dept_partition where month='201707';

4、增加分区

alter table dept_partition add partition(month='201706') ;
alter table dept_partition add partition(month='201705') partition(month='201704');

5、删除分区

alter table dept_partition drop partition (month='201704');
alter table dept_partition drop partition (month='201705'), partition (month='201706')

6、查看分区表有多少分区

show partitions dept_partition;

7、查看分区表结构

desc formatted dept_partition;

六、修改表

1、重命名表

ALTER TABLE table_name RENAME TO new_table_name

2、增加/修改/替换列信息
(1)更新列

ALTER TABLE table_name CHANGE [COLUMN] col_old_name col_new_name column_type [COMMENT col_comment] [FIRST|AFTER column_name]

(2)增加和替换列

ALTER TABLE table_name ADD|REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...) 
  • ADD是代表新增一字段,字段位置在所有列后面(partition列前),REPLACE则是表示替换表中所有字段。

3、删除表

drop table dept_partition;
  • 外部表不能简单的通过这个命令删除,这个命令只能删除外部表的元数据,没有办法删除HDFS上面的数据
  • 彻底删除外部表的方法:

(1)转换为内部表再删除

ALTER TABLE xxx SET TBLPROPERTIES('EXTERNAL'='False');
drop table xxx;

(2)删除元数据,使用HDFS删除数据

标签:name,partition,数据类型,Hive,month,dept,DDL,table,数据
From: https://www.cnblogs.com/shihongpin/p/18392171

相关文章

  • 介绍数据结构和数据类型这两个概念及其区别。
    数据结构数据结构(datastructure)是相互之间存在一种或多种特定关系的数据元素的集合。一个数据结构一般包含数据逻辑结构、存储结构和数据运算三个方面。简单来说就是数据的逻辑或物理存储方式,以便可以高效地访问和修改数据。数据类型数据类型(datatype)是一个值的集合和......
  • JSON 数据类型(转载)
    文章目录JSON数据类型一,字符串二,数字三,布尔值四,空五,对象六,数组JSON也可以是一个数组 JSON数据类型JSON是Web开发中使用最广泛的数据交换格式,它独立于编程语言,能够被大多数编程语言使用。本节我们来详细介绍一下JSON中支持的数据类型。JSON中支持的数据类型可以分为简......
  • C# 一分钟浅谈:变量与数据类型简介
    引言在C#编程中,了解和使用变量与数据类型是非常基础且重要的一步。正确的数据类型选择不仅能够提高程序的性能,还能避免许多潜在的问题。本文将详细介绍C#中常见的数据类型和变量的使用方法,并探讨一些常见的问题及其解决方法。常见数据类型C#中的数据类型主要分为两大类:值......
  • js数据类型
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content="width=d......
  • WPF中如何根据数据类型使用不同的数据模板
    我们在将一个数据集合绑定到列表控件时,有时候想根据不同的数据类型,显示为不同的效果。例如将一个文件夹集合绑定到ListBox时,系统文件夹和普通文件夹分别显示为不同的效果,就可以使用模板选择器功能。WPF提供了一个模板选择器类型DataTemplateSelector,它可以根据数据对象和数据......
  • python基础三之基本数据类型
    1.数字类型及操作1.1整数类型  可正可负,没有取值范围限制pow(x,y) 计算x的y次方,想算多大算多大4种进制表示形式十进制:如:1019,8,-8二进制:由0b或0B开头,只由0,1组成,如:0b0110,-0B101010101八进制:由0O或0o开头:0O123,-0O445十六进制:又0X或0x开头:0X89,-0x9a1.2......
  • PHP数据类型
    PHP变量存储不同的类型的数据,不同的数据类型可以做不一样的事情。PHP支持以下几种数据类型:String(字符串)Integer(整型)Float(浮点型)Boolean(布尔型)Array(数组)Object(对象)NULL(空值)Resource(资源类型)字符串一个字符串是一串字符的序列,就像"Helloworld!"。你可以将任何文本......
  • 3.从对变量的理解到数据类型的一种解释
    1变量1.1变量在使用过程中有三点注意事项1.变量必须是字母数字和下划线组成2.变量的命名开头不能是数字,数字会与python中的数字重复,导致错误3.变量不能使用内置的字,如print1.2变量的规范1.一般情况下需要进行分割,就是用_2.变量在使用的过程中也要注意,不要乱命名,会导致后续......
  • day37-测试之抓包工具Charles、Fiddler
    目录一、抓包工具Charles    1.1.Charles是什么    1.2.Charles工作原理    1.3.Charles主要功能    1.4.Charles优点    1.5.Charles安装    1.6.Charles组件介绍        1.7.Charles设置    1.8.C......
  • 数据类型转换
    一、强制类型转换也称为显式转换1、转换为number​三种方式:1.使用Number()如果内容可以转换成数字,则返回对应的数字(整数或小数)如果内容不可以转换成数字,则返回NaN如果内容为空字符串或null,则返回0如果内容为boolean,则true返回1,false返回0(boolean值在内存中就是以数......