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

来源:互联网 发布:一句话一个故事 知乎 编辑:程序博客网 时间:2024/06/05 09:27

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>);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

3、文本文件数据编码

这里写图片描述

4、Hive中的数据库

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

创建数据库的语句:

CREATE DATABASE IF NOT EXISTS finacials;
  • 1
  • 1

查看数据库:

show databases;
  • 1
  • 1

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

show database like 'h.*';
  • 1
  • 1

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

CREATE DATABSE finacials LOCATION '/usr/local';
  • 1
  • 1

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

CREATE DATABASE finacials COMMENT 'Holds all finacial tables';
  • 1
  • 1

并且查看

DESCRIBE DATABASE finacials;
  • 1
  • 1

更多的:

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

同样的可以进行查看:

DESCRIBE DATABASE EXTEND finacials;
  • 1
  • 1

删除数据库:

DROP DATABASE if exists finacial;
  • 1
  • 1

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

DROP DATABASE if exists finacial CASCADE;
  • 1
  • 1

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

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

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

创建表: 
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';
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

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

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

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

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

DESCRIBE EXTENDED mydb.emloyees;
  • 1
  • 1

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

DESCRIBE EXTENED mydb.employees.salary;
  • 1
  • 1

删除表

DROP TABLE IF EXISTS employees;
  • 1
  • 1

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

原创粉丝点击