1. 程式人生 > >Hive(一)資料型別、檔案格式和資料定義

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語言有很多相似的地方,只不過在對資料的管理上更加的靈活。