hive常用命令

it2026-03-16  2

1.设置显示schema hive set hive.cli.print.header=true;

2.set mapred.reduce.tasks=100; 查看set mapred.reduce.tasks;

3.(1)启动hive hive (bin/hive) (2)查看数据库 show databases; (3)打开默认数据库 3use default; (4)显示default数据库中的表 3show tables; (5)创建一张表 3create table student(id int, name string); (6)显示数据库中有几张表 3show tables; (7)查看表的结构 3desc student; (8)向表中插入数据 3insert into student values(1000,“ss”); (9)查询表中数据 3select * from student; (10)退出hive quit;

4.类型转换 a.隐式类型转换规则如下 (1)任何整数类型都可以隐式地转换为一个范围更广的类型,如TINYINT可以转换成INT,INT可以转换成BIGINT。 (2)所有整数类型、FLOAT和STRING类型都可以隐式地转换成DOUBLE。 (3)TINYINT、SMALLINT、INT都可以转换为FLOAT。 (4)BOOLEAN类型不可以转换为任何其它的类型。 b.可以使用CAST操作显示进行数据类型转换 例如CAST(‘1’ AS INT)将把字符串’1’ 转换成整数1;如果强制类型转换失败,如执行CAST(‘X’ AS INT),表达式返回空值 NULL。

5.退出hive窗口: exit; quit; 在新版的hive中没区别了,在以前的版本是有的: exit:先隐性提交数据,再退出; quit:不提交数据,退出;

6.在hive cli命令窗口中如何查看hdfs文件系统 dfs -ls /;

7.在hive cli命令窗口中如何查看本地文件系统 ! ls /opt/module/datas;

8.加载数据 load data local inpath ‘/root/data/test.txt’ into table test;

9.查看表结构、建表语句、建库语句 desc test; show create table tablename; show create table test;

create database ods_all_dt;

10.创建一个数据库,指定数据库在HDFS上存放的位置 create database if not exists db_hive2 location ‘/db_hive2.db’;

11.删除空数据库,如果删除的数据库不存在,最好采用 if exists判断数据库是否存在 drop database if exists hive_test;

如果数据库不为空,可以采用cascade命令,强制删除 drop database ods_all_dt cascade;

12.创建表 CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data_type [COMMENT col_comment], …)] [COMMENT table_comment] [PARTITIONED BY (col_name data_type [COMMENT col_comment], …)] [CLUSTERED BY (col_name, col_name, …) [SORTED BY (col_name [ASC|DESC], …)] INTO num_buckets BUCKETS] [ROW FORMAT row_format] [STORED AS file_format] [LOCATION hdfs_path]

字段解释说明 (1)CREATE TABLE 创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常;用户可以用 IF NOT EXISTS 选项来忽略这个异常。 (2)EXTERNAL关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION),Hive创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。 (3)COMMENT:为表和列添加注释。 (4)PARTITIONED BY创建分区表 (5)CLUSTERED BY创建分桶表 (6)SORTED BY不常用 (7)ROW FORMAT DELIMITED [FIELDS TERMINATED BY char] [COLLECTION ITEMS TERMINATED BY char] [MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char] | SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, …)] 用户在建表的时候可以自定义SerDe或者使用自带的SerDe。如果没有指定ROW FORMAT 或者ROW FORMAT DELIMITED,将会使用自带的SerDe。在建表的时候,用户还需要为表指定列,用户在指定表的列的同时也会指定自定义的SerDe,Hive通过SerDe确定表的具体的列的数据。 SerDe是Serialize/Deserilize的简称,目的是用于序列化和反序列化。 (8)STORED AS指定存储文件类型 常用的存储文件类型:SEQUENCEFILE(二进制序列文件)、TEXTFILE(文本)、RCFILE(列式存储格式文件) 如果文件数据是纯文本,可以使用STORED AS TEXTFILE。如果数据需要压缩,使用 STORED AS SEQUENCEFILE。 (9)LOCATION :指定表在HDFS上的存储位置。 (10)LIKE允许用户复制现有的表结构,但是不复制数据。

create table is not exists test( name string, friends array, children map<string, int>, address struct<street:string, city:string> ) row format delimited fields terminated by ‘,’ collection items terminated by ‘_’ map keys terminated by ‘:’ lines terminated by ‘\n’;

字段解释: row format delimited fields terminated by ‘,’ – 列分隔符 collection items terminated by ‘_’ --MAP STRUCT 和 ARRAY 的分隔符(数据分割符号) map keys terminated by ‘:’ – MAP中的key与value的分隔符 lines terminated by ‘\n’; – 行分隔符

建表demo create table park_attribution( uuid string, parkId bigint, parkName string, addr string, addrSize int, timeStateId bigint) row format delimited fields terminated by ‘\t’ stored as ORC;

13.管理表(内部表)与外部表的互相转换 (1)修改内部表student2为外部表 alter table student2 set tblproperties(‘EXTERNAL’=‘TRUE’); (2)查询表的类型 hive (default)> desc formatted student2; Table Type: EXTERNAL_TABLE (3)修改外部表student2为内部表 alter table student2 set tblproperties(‘EXTERNAL’=‘FALSE’); (4)查询表的类型 hive (default)> desc formatted student2; Table Type: MANAGED_TABLE 注意:(‘EXTERNAL’=‘TRUE’)和(‘EXTERNAL’=‘FALSE’)为固定写法,区分大小写!

14.分区表基本操作 a.引入分区表(需要根据日期对日志进行管理) /user/hive/warehouse/log_partition/20170702/20170702.log b.创建分区表语法 create table dept_partition( deptno int, dname string, loc string ) partitioned by (month string) row format delimited fields terminated by ‘\t’;

c.加载数据到分区表中 load data [local] inpath ‘/opt/module/datas/student.txt’ overwrite | into table student [partition (partcol1=val1,…)]; (1)load data:表示加载数据 (2)local:表示从本地加载数据到hive表;否则从HDFS加载数据到hive表 (3)inpath:表示加载数据的路径 (4)overwrite:表示覆盖表中已有数据,否则表示追加 (5)into table:表示加载到哪张表 (6)student:表示具体的表 (7)partition:表示上传到指定分区

load data local inpath '/opt/module/datas/dept.txt' into table default.dept_partition partition(month='201709');

d.查询分区表中数据 单分区查询 select * from dept_partition where month=‘201709’; 多分区联合查询 select * from dept_partition where month=‘201709’ union select * from dept_partition where month=‘201708’ union select * from dept_partition where month=‘201707’; e.增加分区 创建单个分区 alter table dept_partition add partition(month=‘201706’) ; 同时创建多个分区 alter table dept_partition add partition(month=‘201705’) partition(month=‘201704’); 6.删除分区 删除单个分区 alter table dept_partition drop partition (month=‘201704’); 同时删除多个分区 alter table dept_partition drop partition (month=‘201705’), partition (month=‘201706’); 7.查看分区表有多少分区 show partitions dept_partition; 8.查看分区表结构 desc formatted dept_partition;

15.重命名表 ALTER TABLE table_name RENAME TO new_table_name;

16.增加/修改/替换列信息 更新列 ALTER TABLE table_name CHANGE [COLUMN] col_old_name col_new_name column_type [COMMENT col_comment] [FIRST|AFTER column_name] alter table dept_partition add columns(deptdesc string);

增加和替换列 ALTER TABLE table_name ADD|REPLACE COLUMNS (col_name data_type [COMMENT col_comment], …) alter table dept_partition change column deptdesc desc int; alter table dept_partition replace columns(deptno string, dname string, loc string);

注:ADD是代表新增一字段,字段位置在所有列后面(partition列前),REPLACE则是表示替换表中所有字段。

16.导数据,mkdir /opt/module/datas/export a.导到本地,进入hive窗口命令行 hive dfs -get /user/hive/warehouse/student5/ /opt/module/datas/export/student5.txt; b.导到本地,linux shell命令行导 hive -e ‘select * from default.student;’ > /opt/module/datas/export/student4.txt; 3.导到hdfs hive export table default.student5 to ‘/user/hive/warehouse/export/student5’;

17.hive执行hql脚本testddl.hql

use test2; CREATE TABLE if not exists t_test( id int, name string, num int, sale double, create_time timestamp) row format delimited fields terminated by ‘\t’ stored as ORC;

#–drop table t_test;

hive -f testddl.hql

18.保留2位小数 cast(column_name as decimal(10,2))

19.查看当前库 select current_database();

20.presto连接hive时间转换、varchar 转 timestamp select substr(cast(now() as varchar),1,19); select * from table1 where creationtime>= (cast(‘2020-05-01 00:00:00’ as timestamp));

最新回复(0)