Hive基础(数据类型,数据结构,数据库操作,数据表操作,内部表,外部表,临时表,装载数据,分区表,分桶表,视图,侧视图)
八.hive数据类型
1.基本数据类型(类似于SQL数据类型)
类型 | 描述 | 示例 |
---|---|---|
boolean | true/false | TRUE |
tinyint | 1字节的有符号整数 | -128~127 1Y |
smallint | 2个字节的有符号整数,-32768~32767 | 1S |
int | 4个字节的带符号整数 | 1 |
bigint | 8字节带符号整数 | 1L |
float | 4字节单精度浮点数 | 1.0 |
double | 8字节双精度浮点数 | 1.0 |
deicimal | 任意精度的带符号小数 | 1.0 |
String | 字符串,变长 | “a”,’b’ |
varchar | 变长字符串 | “a”,’b’ |
char | 固定长度字符串 | “a”,’b’ |
binary | 字节数组 | 无法表示 |
timestamp | 时间戳,纳秒精度 | 122327493795 |
date | 日期 | ‘2018-04-07’ |
2.集合数据类型
类型 | 描述 | 示例 |
---|---|---|
array | 有序的的同类型的集合 | array(1,2) |
map | key-value,key必须为原始类型,value可以任意类型 | map(‘a’,1,’b’,2) |
struct | 字段集合,类型可以不同 | struct(‘1’,1,1.0), named_stract(‘col1’,’1’,’col2’,1,’clo3’,1.0) |
九.hive数据结构
数据结构 | 描述 | 逻辑关系 | **物理存储(**HDFS) |
---|---|---|---|
Database | 数据库 | 表的集合 | 文件夹 |
Table | 表 | 行数据的集合 | 文件夹 |
Partition | 分区 | 用于分割数据 | 文件夹 |
Buckets | 分桶 | 用于分布数据 | 文件 |
Row | 行 | 行记录 | 文件中的行 |
Columns | 列 | 列记录 | 每行中指定的位置 |
Views | 视图 | 逻辑概念,可跨越多张表 | 不存储数据 |
Index | 索引 | 记录统计数据信息 | 文件夹 |
hdfs dfs -chmod -R 777 /opt/install
十.数据库增删改查
默认在hive.metastore.warehouse.dir属性目录下
默认default库
1.创建数据库
- beeline -u jdbc:hive2://localhost:10000
create database if not exists myhivebook;
2.使用数据库
use myhivebook;
3. 查看数据库信息
desc database myhivebook;
4.修改数据库信息
-- 修改一下用户,anonymous改成root
alter database myhivebook set owner user root;
5.查看当前数据库
select current_database();
6. 删除数据库
drop database if exists myhivebook;
7.删除带表的数据库(强制删除)
drop database if exists myhivebook cascade;
8.过滤显示查询的数据库
show databases like 'test*';
9.显示当前数据库
hive> set hive.cli.print.current.db=true;
hive (test)>
十一.数据表(table)
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]
(1)字段解释说明
1).CREATE TABLE:创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常;用户可以用 IF NOT EXISTS 选项来忽略这个异常。
2).EXTERNAL 关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION),Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。
3).COMMENT:为表和列添加注释。
4).PARTITIONED BY:创建分区表
5).CLUSTERED BY:创建分桶表
6).SORTED BY:不常用
7).ROW FORMAT :分割方式
ROW FORMAT DELIMITED
[FIELDS TERMINATED BY char] --如何分隔列(字段)
[COLLECTION ITEMS TERMINATED BY char] --如何分隔集合和映射
[MAP KEYS TERMINATED BY char] --map分割
[LINES TERMINATED BY char] -- 行分割
| SERDE serde_name
[WITH SERDEPROPERTIES
(property_name=property_value, property_name=property_value, ...)]--序列化类型
用户在建表的时候可以自定义 SerDe 或者使用自带的 SerDe。如果没有指定ROW FORMAT 或者 ROW FORMAT DELIMITED,将会使用自带的 SerDe。在建表的时候,用户还需要为表指定列,用户在指定表的列的同时也会指定自定义的SerDe,Hive 通过 SerDe 确定表的具体的列的数据。
8).STORED AS: 指定存储文件类型
常用的存储文件类型:SEQUENCEFILE(二进制序列文件)、TEXTFILE(文本)、RCFILE(列式存储格式文件)
如果文件数据是纯文本,可以使用 STORED AS TEXTFILE。如果数据需要压缩,可以使用 STORED AS SEQUENCEFILE。
9).LOCATION :指定表在 HDFS 上的存储位置。
10).LIKE: 允许用户复制现有的表结构,但是不复制数据。
(2)Storage SerDe
SerDe:Serializer and Deserializer
Hive支持不同类型的Storage SerDe
- LazySimpleSerDe: TEXTFILE
- BinarySerializerDeserializer: SEQUENCEFILE
- ColumnarSerDe: ORC, RCFILE
- ParquetHiveSerDe: PARQUET
- AvroSerDe: AVRO
- OpenCSVSerDe: for CST/TSV -------CST:逗号分隔;TSV:tab分隔
- JSONSerDe
- RegExSerDe
- HBaseSerDe
(3)Hive建表 分隔符
Hive中默认分隔符:
字段:Ctrl+A或^A(\001)
集合:Ctrl+B或^B(\002)
映射:Ctrl+C或^C(\003)
注意:
建表时指定分隔符只能用于非嵌套类型
嵌套类型由嵌套级别决定
数组中嵌套数组-外部数组是^B,内部数组是^C
映射中嵌套数组-外部映射是^C,内部数组是^D
CREATE TABLE