目录
创建外部表和内部表的区别:
以关键字EXTERNAL区分创建内部表和外部表。
内部表数据由hive自行管理,创建内部表后,数据会存放在hive默认路径下;删除内部表,即删除内部表元数据及其数据;在创建内部表指定路径的情况下,删除内部表也会删除放在指定路径下的数据。
外部表数据不由hive管理,若指定数据存放路径,则数据会存放于指定目录,若未指定,则存放于hive默认路径;若删除外部表,只删除外部表的元数据,不删除其数据。
truncate不能删除外部表,只能删除内部表
删除外部表方法:
1、删除分区:
ALTER TABLE trouble_user DROP IF EXISTS PARTITION (dt='20190505',hour='13')
2、删除hdfs上数据
3、可以将外部表变为内部表,再删除内部表
ALTER TABLE table_name SET TBLPROPERTIES('EXTERNAL'='False');
drop table xxx;
1、创建hive表
(1)映射在hdfs上
创建表
create external table if not exists trouble_user(
province_id STRING,
city_id STRING,
platform STRING,
probe_id STRING,
freeze_time STRING,
play_seconds STRING
)
partitioned by (dt STRING, hour STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '|'
STORED AS sequencefile
location 'hdfs://bigdata-1:8020/data/trouble_user/';
增加字段
ALTER TABLE trouble_user ADD COLUMNS(device_info STRING);
创建分区
ALTER TABLE trouble_user ADD IF NOT EXISTS PARTITION (dt='20190729',hour='00')
location '/data/trouble_user/20190729/00';
插数据到分区
INSERT OVERWRITE TABLE trouble_user PARTITION(dt='20190801',hour='00') SELECT * FROM tmp01
删除分区
ALTER TABLE trouble_user DROP IF EXISTS PARTITION (dt='20190505',hour='13')
ALTER TABLE trouble_user DROP PARTITION (dt<='20190730');
(2)映射到hbase中
创建表
CREATE EXTERNAL TABLE IF NOT EXISTS HBASE_TERMINAL_INFO(
ProbeID string,DeviceID string,Platform string,ProvinceID string,
CityID string,NetType string,DeviceInfo string
) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = "cf:ProbeID,:key,cf:Platform,cf:ProvinceID,cf:CityID,cf:NetType,cf:DeviceInfo")
TBLPROPERTIES ("hbase.table.name" = "terminal_info");
对应的hbase表:
create 'terminal_info', {NAME => 'cf', COMPRESSION => 'SNAPPY'}
(3)LOAD DATA
创建表
CREATE TABLE IF NOT EXISTS emp (
id int, name String,salary String, des String)
COMMENT ‘Employee’
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ‘\t’
LINES TERMINATED BY ‘\n’
STORED AS TEXTFILE;
插数据
语法:
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename
[PARTITION (part1=v1, part2=v2 ...)]
栗子:
LOAD DATA LOCAL INPATH '/data/test.txt' OVERWRITE INTO TABLE emp;
2、删除
删除库
drop database if exists db_name;
强制删除库
drop database if exists db_name cascade;
删除表
drop table if exists emp;
清空表
truncate table emp;
清空表方法二
insert overwrite table emp select * from emp where 1=0;
按条件删除数据
insert overwrite table emp select * from emp where id>'180203a15f';
3、修改表
修改表名
语法:
ALTER TABLE name RENAME TO new_name
栗子:
ALTER TABLE emp RENAME TO employee;
新增列
语法:
ALTER TABLE name ADD COLUMNS (col_name col_type [, col_name2 col_type2...])
栗子:
ALTER TABLE emp ADD COLUMNS (dept STRING COMMENT 'department name');
删除列
语法:
ALTER TABLE name DROP [COLUMN] col_name
栗子:
ALTER TABLE emp DROP [COLUMN] age
修改列名
语法:
ALTER TABLE name CHANGE col_name new_name new_type
栗子:
只修改名称:
ALTER TABLE emp CHANGE name ename String;
只修改类型:
ALTER TABLE emp CHANGE salary salary Double;
替换列
语法:
ALTER TABLE name REPLACE COLUMNS (col_name col_type new_col_name new_col_type [, ccol_name col_type new_col_name new_col_type ...])
栗子:
ALTER TABLE employee REPLACE COLUMNS ( eid INT empid Int, ename STRING name String);