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