Hive(一)数据类型、文件格式和数据定义

1、基本数据类型
Hive支持多种不同长度的整型和浮点型数据类型,支持布尔类型,也支持无长度限制的字符串类型,后续的Hive增加了时间戳数据类型和二进制数组数据类型。
这里写图片描述
这里写图片描述

和其他的SQL语言一样,这些都是保留字。需要注意的是所有的这些数据类型都是对Java中接口的实现,因此这些类型的具体行为细节和Java中对应的类型是完全一致的。例如,STRING类型实现的是Java中的String,FLOAT实现的是Java中的float,等等。

2、集合数据类型

Hive中的列支持使用struct,map和array集合数据类型。
这里写图片描述

同样的,这些集合名称同样也是保留字。

可以做个简单的Hive中表的创建:

Create table employees(
    name  STRING,
    salary  FLOAT,
    subordinate ARRAY<STRING>,
    deduction  MAP<STRING,FLOAT>,
    address  STRUCT<street:STRING, city:STRING, state:STRING, zip:INT>
);

3、文本文件数据编码

这里写图片描述

4、Hive中的数据库

Hive中数据库的概念本质上仅仅是表的一个目录或者命名空间。然而,对于具有很多组合用户的大集群来说,这是非常有用的,因为这样可以避免表命名冲突。通常会使用数据库来将生产表组织成逻辑组。如果用户没有显式指定数据库,那么将会使用默认的数据库default。

创建数据库的语句:

CREATE DATABASE IF NOT EXISTS finacials;

查看数据库:

show databases;

当然在存在很多数据库的时候,可以考虑使用正则表达式

show database like 'h.*';

Hive会为每个数据库创建一个目录。数据库中的表将会以这个数据库目录的子目录形式存储。有一个例外就是default数据库中的表,因为这个数据库本身没有自己的目录。
Hive创建的数据库一般都默认的存放在/usr/hive/warehouse目录下,比如上面建立的finacials数据库,文件目录如下:
/usr/hive/warehouse/finacials.db,
可以通过这样的命令来修改默认的位置:

CREATE DATABSE finacials LOCATION '/usr/local';

同时也可以在创建的数据库中添加描述:

CREATE DATABASE finacials COMMENT 'Holds all finacial tables';

并且查看

DESCRIBE DATABASE finacials;

更多的:

CREATE DATABASE finacials WITH DBPROPERTIES{'creator'='xiaoming','date'='2016-04-02'};

同样的可以进行查看:

DESCRIBE DATABASE EXTEND finacials;

删除数据库:

DROP DATABASE if exists finacial;

默认情况下,Hive是不允许用户删除一个包含有表的数据库的,要么先输出数据库中的表,然后再删除数据库;要么在删除命令的最后面加上关键字CASCADE,这样可以使Hive自行先删除数据库中的表:

DROP DATABASE if exists finacial CASCADE;

数据库的修改:
用户可以使用ALTER DATABASE 命令为某个数据库的DBPROPERTIES设置键-值对属性值,来描述这个数据库的属性信息。数据库的其他元数据都是不可更改的,包括数据库名和数据库所在的目录位置。

ALTER DATABASE finacials SET DBPROPERTIES('edit-by'='Joe Dba');

没有办法可以删除或者重置数据库属性

创建表:
CREATE TABLE 语句类似于SQL语法惯例,但是Hive的这个语句中具有显著的功能扩展,使其可以具有更广泛的灵活性,比如,定义表的数据文件存储在什么位置、使用什么样的存储格式。

CREATE TABLE IF NOT EXISTS mydb.employees(
    name STRING COMMENT 'Employee name',
    salary FLOAT COMMENT 'Employee salary',
    subordinates ARRAY<STRING> COMMENT 'Names of subordinates',
    deductions MAP<STRING,FLOAT>COMMENT 'Keys are deductions names,values are percentages',
    address   STRUCT<street:STRING,city:STRING,state:STRING,ZIP:INT> COMMENT 'Home address'
)
COMMENT 'Description of the table'
TBLPROPERTIES('creator'='me','create_at'='2016-04-02 10:00:00')
LOCATION '/usr/local';

Hive会自动增加两个表属性:一个是last_modified_by,其保存着最后修改这个表的用户的用户名;另一个是last_modified_time,其保存着最后一次修改的新纪元时间秒。

拷贝表,只是拷贝表的模式,并不能拷贝其中的数据:

CREATE TABLE IF NOT EXISTS mydb.employee2 LIKE mydb.employee1;

若想要查看表的详细信息,可以使用以下命令:

DESCRIBE EXTENDED mydb.emloyees;

若要查看某一列的详细信息,可以用以下命令:

DESCRIBE EXTENED mydb.employees.salary;

删除表

DROP TABLE IF EXISTS employees;

今天Hive简单的进行了一些了解,可以看出Hive的HQL跟SQL语言有很多相似的地方,只不过在对数据的管理上更加的灵活。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页