Hive中對資料庫,表的操作
阿新 • • 發佈:2019-01-07
在應用Hive之前,首先搭建Hive環境,關於Hive的搭建 參考之前的搭建文件
Hive官方應用文件
資料定義語言 DDL
1、Create Database
Hive中資料庫的建立和關係型資料庫類似,用create datebase建立
CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
hive 中的操作
hive> create database hive
2、Drop Database
DROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT|CASCADE];
3、Alter Database
ALTER (DATABASE|SCHEMA) database_name SET DBPROPERTIES (property_name=property_value, ...)
4、Use Database
USE database_name;
USE DEFAULT;
Create/Drop/Truncate Table
Hive中建立表,和關係型資料庫中的建立表類似,Hive中表的欄位應該和原始檔案中的格式一致,原始檔案存在HSFS上
1、create table
create table t_emp(
id int,
name string,
age int ,
dept_name string
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
備註:FIELDS TERMINATED BY ‘,’ 表示原始檔案中的格式使用 ‘,’ 隔開的
測試 建立一個emp_data檔案,匯入t_emp表中
Hive資料的匯入
Hive不做任何轉換,資料載入到表中。載入操作目前純複製/移動操作,實際上進入Hive位置對應表。
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ... )]
備註:[LOCAL] 本地檔案,’filepath’ 路徑
測試資料匯入表t_emp中
load data local inpath '/root/emp_data' into table t_emp;
這時候我們檢視Hadoop HDFS 的工作目錄發現自動生成t_emp檔案
/user/hive/warehouse/t_emp,Hive匯入資料到t_emp表,(hadoop 環境變數)自動找到Hadoop HDFS 工作目錄並且建立了工作目錄
執行 select 語句查詢統計
hive> select count(*) from t_emp where dept_name = '銷售部' group by dept_name;
Hadoop job information Mapreduce 執行結果
資料操作語言 DML
1、檔案載入到表(本地匯入)
Hive不做任何轉換,資料載入到表中。載入操作目前純複製/移動操作,實際上進入Hive位置對應表
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]
- Hive從某個表匯出到HDFS指定路徑
export table t_emp to '/usr/input/emp.txt';
2、插入資料到Hive表中
CREATE TABLE students (name VARCHAR(64), age INT, gpa DECIMAL(3, 2))
CLUSTERED BY (age) INTO 2 BUCKETS STORED AS ORC;
INSERT INTO TABLE students
VALUES ('fred flintstone', 35, 1.28), ('barney rubble', 32, 2.32);
3、更新Hive表資料
UPDATE tablename SET column = value [, column = value ...] [WHERE expression]
4、刪除Hive表資料
DELETE FROM tablename [WHERE expression]
5、查詢插入Hive資料表dept_count (無分割槽)
create table dept_count(
dname string,
num int
);
insert into table dept_count select dept_name,count(1) from t_emp group by dept_name;
6、查詢插入Hive資料表dept_count (有分割槽)
create table dept_count_1(
num int
) partitioned by (dname string);
insert into table dept_count_1 partition (dname = '銷售部') select count(*) from t_emp where dept_name = '銷售部' group by dept_name;