查看數據庫 show databases; 進入到某個數據庫
use default;
展示有哪些表
show tables;
不進入Hive的命令行窗口就可以執行SQL語句
[root@master test]# hive -f hive-seclet.sql
hive (default)> quit;
hive (default)> exit;
exit:先提交數據,然后退出 quit:不提交數據,直接退出。
使用Hive的命令行窗口執行HDFS文件系統的查詢
hive (default)> dfs -ls /hive;
使用Hive的命令窗口查看本地文件系統的文件和目錄
hive (default)> ! ls /opt;
在本地文件系統中會存儲hive中執行的命令的歷史(在當前用戶主目錄)
[root@master ~]# cat .hivehistory
基本數據類型
Hive數據類型 |
長度 |
Java中對應的類型 |
example |
tinyint |
1字節 |
byte |
20 |
int |
4字節 |
int |
111111 |
smallint |
2字節 |
short |
222 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
集合類型
創建表
create table employees(id int,name string)
row format delimited fields terminated by '\t';
查詢
select * from employees;
DDL的簡單操作
在HDFS上創建數據庫:warehouse/haha
hive (bigdata)> create database haha;
建議:以后加上if not exists判斷
hive (bigdata)> create database if not exists haha;
修改數據庫的屬性
alter database haha set dbproperties('createtime'='20180808');
注意:數據庫中的一些屬性可以修改,但是數據庫的名字和數據庫所在 目錄不可更改。
查看數據庫
條件查詢數據庫
hive (default)> show databases like 'li*';
查詢數據庫的詳細信息
hive (default)> desc database bigdata;
使用數據庫
hive (default)> use bigdata;
刪除數據庫
hive (bigdata)> drop database if exists lisi;
刪除非空數據庫
hive (bigdata)> drop database bigdata;
強制刪除非空數據庫
hive (bigdata)> drop database bigdata cascade;
創建表語法
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name
[(col_name data_type [COMMENT col_comment], ... [constraint_specification])]
[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]
[SKEWED BY (col_name, col_name, ...) -- (Note: Available in Hive
0.10
.
0
and later)]
[STORED AS DIRECTORIES]
[
[ROW FORMAT row_format]
[STORED AS file_format]
]
[LOCATION hdfs_path]
[TBLPROPERTIES (property_name=property_value, ...)]
[AS select_statement];
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name
LIKE existing_table_or_view_name
[LOCATION hdfs_path];
data_type
: primitive_type
| array_type
| map_type
| struct_type
| union_type
primitive_type
: TINYINT
| SMALLINT
| INT
| BIGINT
| BOOLEAN
| FLOAT
| DOUBLE
| DOUBLE PRECISION -- (Note: Available in Hive
2.2
.
0
and later)
| STRING
| BINARY -- (Note: Available in Hive
0.8
.
0
and later)
| TIMESTAMP -- (Note: Available in Hive
0.8
.
0
and later)
| DECIMAL -- (Note: Available in Hive
0.11
.
0
and later)
| DECIMAL(precision, scale) -- (Note: Available in Hive
0.13
.
0
and later)
| DATE -- (Note: Available in Hive
0.12
.
0
and later)
| VARCHAR -- (Note: Available in Hive
0.12
.
0
and later)
| CHAR -- (Note: Available in Hive
0.13
.
0
and later)
array_type
: ARRAY < data_type >
map_type
: MAP < primitive_type, data_type >
struct_type
: STRUCT < col_name : data_type [COMMENT col_comment], ...>
union_type
: UNIONTYPE < data_type, data_type, ... >
row_format
: DELIMITED [FIELDS TERMINATED BY
char
[ESCAPED BY
char
]] [COLLECTION ITEMS TERMINATED BY
char
]
[MAP KEYS TERMINATED BY
char
] [LINES TERMINATED BY
char
]
[NULL DEFINED AS
char
] -- (Note: Available in Hive
0.13
and later)
| SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)]
file_format:
: SEQUENCEFILE
| TEXTFILE -- (Default, depending on hive.
default
.fileformat configuration)
| RCFILE -- (Note: Available in Hive
0.6
.
0
and later)
| ORC -- (Note: Available in Hive
0.11
.
0
and later)
| PARQUET -- (Note: Available in Hive
0.13
.
0
and later)
| AVRO -- (Note: Available in Hive
0.14
.
0
and later)
| JSONFILE -- (Note: Available in Hive
4.0
.
0
and later)
| INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname
constraint_specification:
: [, PRIMARY KEY (col_name, ...) DISABLE NOVALIDATE ]
[, CONSTRAINT constraint_name FOREIGN KEY (col_name, ...) REFERENCES table_name(col_name, ...) DISABLE NOVALIDATE
說明:
1. CREATE TABLE 創建一個指定名字的表。如果相同名字的表已經存 在,則拋出異常;用戶可以用 IF NOT EXISTS 選項來忽略這個異常。
2. EXTERNAL 關鍵字可以讓用戶創建一個外部表,在建表的同時指定 一個指向實際數據的路徑(LOCATION),Hive 創建內部表時,會 將數據移動到數據倉庫指向的路徑;若創建外部表,僅記錄數據所 在的路徑,不對數據的位置做任何改變。在刪除表的時候,內部表 的元數據和數據會被一起刪除,而外部表只刪除元數據,不刪除數 據。
3. COMMENT:為表和列添加注釋。
4. PARTITIONED BY 創建分區表
5. CLUSTERED BY 創建分桶表
6. SORTED BY 不常用
7. 用戶在建表的時候可以自定義 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 允許用戶復制現有的表結構,但是不復制數據。
11. TBLPROPERTIES表的屬性
12. AS select_statement將其他查詢結果作為這個表的數據導入
內部表
默認創建的表都是所謂的內部表,有時也被稱為管理表。因為這種表,Hive 會(或多或少地)控制着數據的生命周期。
Hive默認情況下會將這些表的數據存儲在由配置項 hive.metastore.warehouse.dir(例如,/hive/warehouse)所定義的目錄的子目錄下。
當我們刪除一個內部表時,Hive也會刪除這個表中數據。內部表不適合和其他工具共享數據。
創建內部表
create table if not exists te acher(id int,name string)
row format delimited fields t erminated by '\t'
stored as textfile
location '/wang/wangchen/teac her';
根據查詢結果創建表
hive (wangchen)> create table if not exists st udent2 as select * from student;
根據已經存在的表創建表
create table if not exists student2 as select * from student;
查詢表的類型
desc formatted student3;
外部表
創建外部表,僅記錄數據所在的路徑,不對數據的位置做任何改變。
Hive 並非認為其完全擁有這份數據。刪除該表並不會刪除掉這份數據,不過描述表的元數據信息會被刪除掉。
創建表的基本語法
hive (wangchen)> create external table area(id int,aname string)
row format delimited fields termi nated by '\t';
導入數據
hive (wangchen)> load data local inpath '/opt/ test/student' into table area;
查看數據
hive (wangchen)> select * from area;
查詢表的類型
hive (wangchen)> desc formatted area;
刪除表
hive (wangchen)> drop table area;
分區表
分區表實際上就是對應一個HDFS文件系統上的獨立的文件夾,該文件夾下是該分區所有的數據文件。
Hive中的分區就是分目錄,把一個大的數據集根據業務需要分割成小的數據集。
在查詢時通過WHERE子句中的表達式選擇查詢所需要的指定的分區,這樣的查詢效率會提高很多。