Hive基礎語法5分鐘速覽

JasonCeng發表於2020-12-14

Hive是基於Hadoop的一個資料倉儲工具,可以將結構化的資料檔案對映為一張資料庫表,並提供簡單的sql查詢功能,可以將sql語句轉換為MapReduce任務進行執行。 其優點是學習成本低,可以通過類SQL語句快速實現簡單的MapReduce統計,不必開發專門的MapReduce應用,十分適合資料倉儲的統計分析。

1.hive建立資料庫

CREATE DATABASE|SCHEMA [IF NOT EXISTS] <database name>;

2.hive建立表

hive裡一般有兩種表的結構,表(內部表)和外部表,以下分別是兩種表的建立程式碼:

--內部表
CREATE TABLE phone_info(id int, name String, storage String, price double)
ROW FORMAT DELIMITED //代表一行是一條記錄
FIELDS TERMINATED BY '\t'//列是按照table鍵分開
STORED AS TEXTFILE[SEQUENCEFILE];//二種最常見的儲存格式,一般可以不寫

--外部表
CREATE EXTERNAL TABLE phone_external(id int, name String, price double)
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
LOCATION '</zengzc/phone.txt>';//這裡填寫外部表資料的hdfs地址,若不指定,則預設儲存於/user/hive/warehouse資料夾下以外部表的表名建立一個資料夾,並將屬於這個表的資料存放在這裡;這裡也是內部表的儲存位置。

3.hive表中匯入資料

load data local inpath '/home/zengzc/xxx.txt' into table phone_info;

4.hive刪除表

DROP TABLE IF EXISTS phone_info;

5.hive建立臨時表儲存中間結果

CREATE TABLE temp_info AS
SELECT id phone_id, name phone_name, price FROM phone_info
SORT BY phone_id;

6.hive簡單的查詢語句

SELECT * FROM temp_info;

SELECT id phone_id,name phone_name FROM phone_info;

SELECT a.ip,a.name,b.username FROM phone_info a INNER JOIN user b on (a.ip=b.ip);

7.hive批量插入資料到表

CREATE TABLE phone_info_like LIKE phone_info; //複製表的結構

INSERT INTO phone_info_like SELECT * FROM phone_info;

INSERT OVERWRITE phoen_info_like SELECT * FROM phone_info; //into是追加資料,overwrite是覆蓋以及存在的資料,屬於重複性校驗

8.hive分割槽表

CREATE TABLE part_table (
  id int,
  name String,
  ip String,
  city String,
  date String
)
PARTITIONED BY (part_flag String) //這裡的分割槽欄位可以是表中欄位也可以是指定的欄位
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ',';

load data local inpath '/home/zengzc/test.txt' into table part_table partition(part_flag='part1');
load data local inpath '/home/zengzc/test1.txt' into table part_table partition(part_flag='part2');

select * from part_table where part_flag='part1';