hive详解(数据类型、数据库操作、数据操作)

一 hive的数据类型

1.1 基本数据类型

1.2 集合数据类型

1.3 类型转换

二 DDL(Data Definition Language)数据定义

2.1数据库操作

2.2 数据表操作

三 数据加载与导出

3.1 数据装载语法

3.2 数据导出语法

hive作为当下流行的hadoop数据处理仓库工具,在企业与开发中不断被使用。本文将具体阐述hive数据库基本操作部分命令等。

hive类型

java中对应类型类型介绍

TINYINT

byte

1byte 有符号整数

SMALINT

short

2byte 有符号整数

INT

int

4byte 有符号整数

BIGINT

long

8byte 有符号整数

BOOLEAN

boolean

布尔类型,true 或者false

FLOAT

float

单精度浮点数

DOUBLE

double

双精度浮点数

STRING

string

字符系列。可以指定字符集。

可以使用单引号或者双引号。

TIMESTAMP

时间类型

BINARY

字节数组

对于 Hive 的 String 类型相当于数据库的 varchar 类型,该类型是一个可变的字符串,不 过它不能声明其中最多能存储多少个字符,理论上它可以存储 2GB 的字符数。

Hive 有三种复杂数据类型 array、map 和 struct。array 和 map 与 Java 中的array 和map类似,而struct与 C 语言中的 Struct 类似,它封装了一个命名字段集合,复杂数据 类型允许任意层次的嵌套。

数据类型类型解释类型示例

STRUCT

和 c 语言中的 struct 类似,都可以通过”点”符号访问元素内容。例如,如果某个列的数据类型是 STRUCT{first STRING, last STRING},那么第 1 个元素可以通过字段.first 来 引用。

struct()

例如struct

MAP

MAP 是一组键-值对元组集合,使用数组表示法可以 访问数据。例如,如果某个列的数据类型是 MAP,其中键->值对是’first’->’John’和’last’->’Doe’,那么可以 通过字段名[‘last’]获取最后一个元素

map()

例如 map

ARRAY

数组是一组具有相同类型和名称的变量的集合。这些 变量称为数组的元素,每个数组元素都有一个编号,编号从 零开始。例如,数组值为[‘John’, ‘Doe’],那么第 2 个元素可以通过数组名[1]进行引用。

Array()

例如 array

Hive 的原子数据类型是可以进行隐式转换的,类似于 Java 的类型转换,例如某表达式 使用 INT 类型,TINYINT 会自动转换为 INT 类型,但是 Hive 不会进行反向转化,例如,某表 达式使用 TINYINT 类型,INT 不会自动转换为 TINYINT 类型,它会返回错误,除非使用 CAST 操作。

1)隐式类型转换规则如下

(1)任何整数类型都可以隐式地转换为一个范围更广的类型,如 TINYINT 可以转换成INT,INT 可以转换成 BIGINT。

(2)所有整数类型、FLOAT 和 STRING 类型都可以隐式地转换成 DOUBLE。

(3)TINYINT、SMALLINT、INT 都可以转换为 FLOAT。

(4)BOOLEAN 类型不可以转换为任何其它的类型。

2)可以使用 CAST 操作显示进行数据类型转换

例如 CAST(‘1′ AS INT)将把字符串’1’ 转换成整数 1;如果强制类型转换失败,如执行 CAST(‘X’ AS INT),表达式返回空值 NULL。

数据库操作 作用命令创建数据库create database [if not exits] databasename(if not exits用于判断数据库是否存在)查看数据库

show databases [过滤条件]

desc database [extended] databasename (显示数据库信息,extended可以显示详细信息)

修改数据库

alter database db_hive

set dbproperties(要修改的键值)删除数据库

drop database if exists databasename(if exists用于判断数据库是否存在)

drop database databasename cascade(用于删除数据库不为空)

2.2.1 数据表建表参数

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]
[TBLPROPERTIES (property_name=property_value, ...)]
[AS select_statement]

下面是对各参数字段的解释

(1)CREATE TABLE 创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常; 用户可以用 IF NOT EXISTS 选项来忽略这个异常。

(2)EXTERNAL 关键字可以让用户创建一个外部表,在建表的同时可以指定一个指向实 际数据的路径(LOCATION),在删除表的时候,内部表的元数据和数据会被一起删除,而外 部表只删除元数据,不删除数据。

(3)COMMENT:为表和列添加注释。

(4)PARTITIONED BY 创建分区表

(5)CLUSTERED BY 创建分桶表

(6)SORTED BY 不常用,对桶中的一个或多个列另外排序

(7)ROW FORMATDELIMITED [FIELDS TERMINATED BY char] [COLLECTION ITEMS TERMINATED BY char] [MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char] | SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, …)]

用户在建表的时候可以自定义 SerDe 或者使用自带的 SerDe。如果没有指定 ROWFORMAT或者 ROW FORMAT DELIMITED,将会使用自带的 SerDe。在建表的时候,用户还需要为表指定列,用户在指定表的列的同时也会指定自定义的 SerDe,Hive 通过 SerDe 确定表的具体的列的数据。SerDe 是 Serialize/Deserilize 的简称, hive 使用 Serde 进行行对象的序列与反序列化。

(8)STORED AS 指定存储文件类型 常用的存储文件类型:SEQUENCEFILE(二进制序列文件)、TEXTFILE(文本)、RCFILE(列式存储格式文件)如果文件数据是纯文本,可以使用 STORED AS TEXTFILE。如果数据需要压缩,使用 STORED AS SEQUENCEFILE。

(9)LOCATION :指定表在 HDFS 上的存储位置。

(10)AS:后跟查询语句,根据查询结果创建表。

(11)LIKE 允许用户复制现有的表结构,但是不复制数据。

2.2.2 内部表与外部表

(1)内部表定义

默认创建的表都是所谓的管理表,有时也被称为内部表。因为这种表,Hive 会(或多或少地)控制着数据的生命周期。 Hive 默认情况下会将这些表的数据存储在由配置项hive.metastore.warehouse.dir(例如,/user/hive/warehouse)所定义的目录的子目录下。 当我们删除一个管理表时,Hive 也会删除这个表中数据。管理表不适合和其他工具共享数据。

(2)外部表定义

因为表是外部表,所以 Hive 并非认为其完全拥有这份数据。删除该表并不会删除掉这 份数据,不过描述表的元数据信息会被删除掉。(即只会删除hive内部存储的信息,不会去删除hdfs上数据)。

(3)内部表与外部表之间转换

alter table tablename set tblproperties('EXTERNAL'='FALSE');
load data [local] inpath '数据的 path' [overwrite] into table student [partition (partcol1=val1,...)];

各参数字段解释:

(1)load data:表示加载数据

(2)local:表示从本地加载数据到 hive 表;否则从 HDFS 加载数据到 hive 表

(3)inpath:表示加载数据的路径

(4)overwrite:表示覆盖表中已有数据,否则表示追加

(5)into table:表示加载到哪张表

(6)student:表示具体的表

#导出数据到本地
insert overwrite local directory '本地路径' select * from 表名;
#导出数据到hdfs上
insert overwrite directory '指定路径' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' select * from student;
#hadoop导出到本地
dfs -get 'hadoop路径' '本地导出路径'

Original: https://blog.csdn.net/m0_58258383/article/details/126592303
Author: 杂乱无章的我
Title: hive详解(数据类型、数据库操作、数据操作)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/817706/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球