操作Hive

目录

1、创建hive表

(1)映射在hdfs上

创建表

增加字段

创建分区

插数据到分区

删除分区

(2)映射到hbase中

创建表

(3)LOAD DATA

创建表

插数据

2、删除

删除库

强制删除库

删除表

清空表

清空表方法二

按条件删除数据

3、修改表

修改表名

新增列

删除列

修改列名

替换列


创建外部表和内部表的区别:

       以关键字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);

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值