Hive

您所在的位置:网站首页 截图操作已记录怎么回事 Hive

Hive

2024-07-02 21:03| 来源: 网络整理| 查看: 265

我们安装完Hive,配置好hive-site.xml文件,其中我把hive在hdfs路径设置为hive110/warehouse在这里插入图片描述 启动hadoop hdfs dfs -chmod -R 777 /hive110给所有组加最高权限,方便以后操作 在这里插入图片描述 登录hive,这里我直接使用本地登录,也就不适用hiveserver2了

数据库 一、创建数据库 创建数据库,数据库在 HDFS 上的默认存储路径是/hive110/warehouse/*.db。(也就是自己在hive-site.xml里的设置) create database stu 在这里插入图片描述 在这里插入图片描述避免要创建的数据库已经存在错误,增加 if not exists 判断。(标准写法) 在这里插入图片描述创建一个数据库,指定数据库在 HDFS 上存放的位置,这样就不会在默认的路径创建数据库了 create database stu2 location ‘/stu2’; 在这里插入图片描述 二、查看数据库 显示数据库 hive> show databases;过滤显示查询的数据库 hive> show databases like ‘stu*’; 在这里插入图片描述显示数据库信息 hive> desc database stu; 在这里插入图片描述 这样看感觉比较乱,所以我想为结果加一个列名,并指定当前所在的数据库,在hive-site.xml文件插入如下信息 在这里插入图片描述 重启一下hive 在这里插入图片描述 三、修改数据库

数据库的其他元数据信息都是不可更改的,包括数据库名和数据库所在的目录位置。 比如修改数据库的创建时间 hive (default)> alter database stu set dbproperties(‘createtime’=‘20170830’);

四、 删除数据库

(危险操作,尽量少用)

删除空数据库 hive>drop database stu;如果删除的数据库不存在,最好采用 if exists 判断数据库是否存在 hive> drop database stu3; FAILED: SemanticException [Error 10072]: Database does not exist:stu3 hive> drop database if exists stu3;如果数据库不为空,可以采用 cascade 命令,强制删除 hive> drop database stu cascade 表 一、增加表

(标红是常用语句) create[external] table[if not exists] table_name [(col_name data_type, …)] [partition by (col_name data_type, …)] [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 table_name 创建一个指定名字的表。如果相同名字的表已经存在,则抛出 异常;用户可以用 if not exists 选项来忽略这个异常。

(2)external关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(location),Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。因为表是外部表,所以 Hive 并非认为其完全拥有这份数据。删除该表并不会删除掉这份数据,不过描述表的元数据信息会被删除掉。在删除表的 时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。

(3)comment:为表和列添加注释。

(4)partition by创建分区表

(5)clustered by创建分桶表

(6)stored by不常用

(7)row format delimited

后面跟

fields terminated by ‘,’ --列分隔符 collection items terminated by ‘_’ --map struct和 array的分隔符(数据分割符号) map keys terminated by ‘:’ – map中的 key 与 value 的分隔符 lines terminated by ‘\n’; – 行分隔符

用户在建表的时候可以自定义 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:允许用户复制现有的表结构,但是不复制数据。

增加数据

dept.txt文件内容,把它放到/root目录下

10 ACCOUNTING 1700 20 RESEARCH 1800 30 SALES 1900 40 OPERATIONS 1700

在stu数据库创建dept表 create external table if not exists dept( deptno int, dname string, loc int ) row format delimited fields terminated by ‘\t’;

一般我们都是直接用lode命令导入数据,不用insert into table values… 因为不可能一条条的插入,效率极低

第一种方法: 这是把本地文件导入表:hive (default)> load data local inpath ‘/root/dept.txt’ into table stu.dept;

在这里插入图片描述 第二种方法:在把文件传到hdfs目录:/hive110/warehouse/stu.db下也可以成功查询 dept1的内容和dept内容一样

hadoop dfs -put /root/dept1.txt /hive110/warehouse/stu.db/dept

在这里插入图片描述

二、修改表 内外部表的相互转换

查询表的类型 hive (default)> desc formatted stu; Table Type: MANAGED_TABLE (2)修改内部表 stu为外部表 alter table stu set tblproperties(‘EXTERNAL’=‘TRUE’); (3)查询表的类型 hive (default)> desc formatted stu; Table Type: EXTERNAL_TABLE (4)把刚才修改好的外部表 stu变为内部表 alter table stu set tblproperties(‘EXTERNAL’=‘FALSE’); (5)查询表的类型 hive (default)> desc formatted student2; Table Type: MANAGED_TABLE 注意:(‘EXTERNAL’=‘TRUE’)和(‘EXTERNAL’=‘FALSE’)为固定写法,区分大小写!

重命名表

(1)语法 alter table table_name rename to new_table_name (2)实操案例 hive (default)> alter table stu1 rename to stu2;

分区的修改

分区是Hive里非常重要的一节,详情见 博客 Hive——分区的详细图文介绍,绝对看懂!

增加/修改/替换列信息

更新列 alter table table_name change [column] col_old_name col_new_name column_type [first|after column_name]

比如我把dept表的loc列名改为money 并指明是String类型 hive (stu)> alter table dept change column loc money string; 在这里插入图片描述

增加和替换列 alter table table_name add|replace columns (col_name data_type, …) 注:add 是代表新增一字段,字段位置在所有列后面(partition 列前),replace 则是 表示替换表中所有字段。 比如我添加add和phone列 在这里插入图片描述 replace 表示替换表中所有字段。这里把所有列都换成最后add和phone这两个列 在这里插入图片描述

三、删除表

hive (default)> drop table dept;

虽然删除了表,但是hdfs的数据还在

在这里插入图片描述 如果我这时再创一张相同的表,我们不用导入数据就可以查到内容 在这里插入图片描述

四、查表

查看stu库下有几个表 use stu; show tables; 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3