- 创建数据库
CREATE DATABASE IF NOT EXISTS hive;
SHOW DATABASES;
SHOW CREATE DATABASE hive;
DESCRIBE DATABASE hive;
- 删除数据库
DROP DATABASE IF EXISTS hive CASCADE;
创建表
创建普通表
CREATE TABLE IF NOT EXISTS hive_table( id INT COMMENT 'This is id of hive_table', age INT COMMENT'This is age of hive_table', name STRING COMMENT 'This is name of hive_table' ) COMMENT 'This is hive_table' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE; CREATE TABLE hive_table AS SELECT * FROM hive; CREATE TABLE hive_table LIKE hive; SHOW TABLES '*table'; SHOW CREATE TABLE hive_table; DESCRIBE hive_table; DESCRIBE FORMATTED hive_table
创建外部表
CREATE EXTERNAL TABLE IF NOT EXISTS hive_table( id INT, age INT, name STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE;
创建分区表(PARTITIONED)
CREATE TABLE IF NOT EXISTS hive_table( id INT, age INT, name STRING ) PARTITIONED BY(date STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORE AS TEXTFILE;
创建分筒表(BUCKETS)
CREATE TABLE IF NOT EXISTS hive_table( id INT, age INT, name STRING ) CLUSTERED BY (age) SORTED BY (name) INTO 16 BUCKETS ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORE AS TEXTFILE;
- 修改表
-- 修改表名
ALTER TABLE hive_table RENAME TO hive_table_new;
--添加字段
ALTER TABLE hive_table ADD COLUMNS(tall INT);
--修改字段
ALTER TABLE hive_table REPLACE COLUMNS(tall int);
--删除表
DROP TABLE IF EXISTS hive_table;
- 插入数据
INSERT OVERWRITE TABLE hive_table SELECT * FROM hive_table_ins;
INSERT VOERWRITE TABLE hive_table PARTITION(date='20161020')
SELECT * FROM hive_table_inc;
FROM hive_table_ins
INSERT OVERWRITE TABLE hive_table_1 SELECT * WHERE id = 1
INSERT OVERWRITE TABLE hive_table_2 SELECT * WHERE id = 2;
- 表操作
-- 复制表
CREATE TABLE hive_table_bak
ROE FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORE AS TEXTFILE
AS SELECT * FROM hive_table;
-- 克隆表
CREATE TABLE hive_table_temp like hive_table;
-- 备份表(备份到hdfs上)
EXPORT TABLE hive_table PARTITION(date='2016-10-10')
to '/home/user/data_bak.txt';
-- 还原表
IMPORT TABLE hive_table_new FROM '/home/user/data_bak.txt';
- 导入数据
-- 普通表导入本地数据
load data local inpath '/home/user/data.txt'
overwrite into table hive_table;
-- 普通表导入HDFS数据
load data inpath 'hdfs://namenode:9000/user/hive/'
overwrite into table hive_table;
-- 分区表
load data local inpath '/home/user/data.txt'
overwrite into table hive_table
partition(date='2016-10-20');
-- 分桶表
CREATE TABLE hive_table_buckets(
id INT,
age INT,
name STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORE AS TEXTFILE;
LOAD DATA LOCAL INPATH '/home/user/data.txt'
INTO TABLE hive_table_buckets;
set hive.enforce.bucketing = ture;
INSERT OVERWRITE TABLE hive_table SELECT * FROM hive_table_buckets;
- 导出数据
INSERT OVERWRITE LOCAL DIRECTORY '/home/user/data.txt'
SELECT * FROM hive_table;
- Hive的数据类型
数据类型 | 长度 | 备注 |
---|---|---|
TINYINT | 1字节的有符号整数 | -128~127 |
SMALLINT | 2字节的有符号整数 | –32768~32767 |
INT | 4字节的有符号整数 | -2147483648~2147483647 |
BIGINT | 8字节的有符号整数 | 9223372016854775808~9223372036854775807 |
BOOLEAN | 布尔类型,true或false | true、false |
FLOAT | 单精度浮点数 | |
DOUBLE | 双精度浮点数 | |
STRING | 字符串 | |
TIMESTAMP | 整数 | |
BINARY | 字节数组 | |
DATE | 日期 | 0000-01-01~9999-12-31,常用STRING代替 |
JOIN
- 只支持等值连接
- 连接谓词中不支持or
LEFT SEMI-JOIN(左半开连接)
WHERE条件
A <=> B 当A和B都为NULL的时候返回true,其他和=一样
A LINK B %一个或多个字符 _一个字符
A RLIKE B 正则匹配