Hive的基本操作之库、表
- 在hive中创建数据库的本质就是在$HIVE_HOME/conf/hive-site.xml中<name>hive.metastore.warehouse.dir</name>指定的目录下创建一个以数据库名命名的目录,并以.db为后缀。hive中会有一个自带的数据库是default,default库的目录就是/user/hive/warehouse本身,不会再去创建一个.db目录。
我们也可以在HDFS的目录树上看到该目录:
这里面的test_db数据库是之前测试时候建的,可以忽略。
- 在hive中数据库名、表名不区分大小写。
- 创建数据库
在hadoop01节点上(hive客户端)创建数据库:
create database test0420;
show databases;
我们可以在hadoop03节点上的mysql服务中查看我们hive下面创建了哪些数据库:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| hive |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)mysql> use hive; //这是我们在配置jdbc连接信息时配置过会帮我们自动创建这个数据库,数据库名当时我们指定的是hivemysql> show tables;mysql> select * from DBS;
+-------+-----------------------+------------------------------------------------------+----------+------------+------------+
| DB_ID | DESC | DB_LOCATION_URI | NAME | OWNER_NAME | OWNER_TYPE |
+-------+-----------------------+------------------------------------------------------+----------+------------+------------+
| 1 | Default Hive database | hdfs://hadoop01:8020/user/hive/warehouse | default | public | ROLE |
| 6 | NULL | hdfs://hadoop01:8020/user/hive/warehouse/test0420.db | test0420 | root | USER |
+-------+-----------------------+------------------------------------------------------+----------+------------+------------+
2 rows in set (0.00 sec)#DBS这个表中记录了我们当前hive下有哪些数据库。
- 切换数据库
0: jdbc:hive2://hadoop02:10000> use test0420;
No rows affected (0.362 seconds)
如果不使用use去切换数据库的话,默认是在hive自带的default这个数据库下。
- 查看数据库的描述信息(三种方式)
0: jdbc:hive2://hadoop02:10000> desc database test0420;
+-----------+----------+----------------------------------------------------+-------------+-------------+-------------+
| db_name | comment | location | owner_name | owner_type | parameters |
+-----------+----------+----------------------------------------------------+-------------+-------------+-------------+
| test0420 | | hdfs://hadoop01:8020/user/hive/warehouse/test0420.db | root | USER | |
+-----------+----------+----------------------------------------------------+-------------+-------------+-------------+
1 row selected (0.451 seconds)
0: jdbc:hive2://hadoop02:10000> desc database extended test0420;
+-----------+----------+----------------------------------------------------+-------------+-------------+-------------+
| db_name | comment | location | owner_name | owner_type | parameters |
+-----------+----------+----------------------------------------------------+-------------+-------------+-------------+
| test0420 | | hdfs://hadoop01:8020/user/hive/warehouse/test0420.db | root | USER | |
+-----------+----------+----------------------------------------------------+-------------+-------------+-------------+
1 row selected (0.256 seconds)
0: jdbc:hive2://hadoop02:10000> describe database extended test0420;
+-----------+----------+----------------------------------------------------+-------------+-------------+-------------+
| db_name | comment | location | owner_name | owner_type | parameters |
+-----------+----------+----------------------------------------------------+-------------+-------------+-------------+
| test0420 | | hdfs://hadoop01:8020/user/hive/warehouse/test0420.db | root | USER | |
+-----------+----------+----------------------------------------------------+-------------+-------------+-------------+
1 row selected (0.192 seconds)
- 删除空数据库
0: jdbc:hive2://hadoop02:10000> drop database test0420;
- 删除非空数据库
0: jdbc:hive2://hadoop02:10000> drop database test0420 cascade;
- 查看当前正在使用的数据库
0: jdbc:hive2://hadoop02:10000> select current_database();
- 创建表
新建了一个数据库test1,在test1下创建表:
0: jdbc:hive2://hadoop02:10000> create table test_user(id int, name string);
在mysql中查看新建的表:
mysql> select * from TBLS;
+--------+-------------+-------+------------------+-------+-----------+-------+-----------+---------------+--------------------+--------------------+--------------------+
| TBL_ID | CREATE_TIME | DB_ID | LAST_ACCESS_TIME | OWNER | RETENTION | SD_ID | TBL_NAME | TBL_TYPE | VIEW_EXPANDED_TEXT | VIEW_ORIGINAL_TEXT | IS_REWRITE_ENABLED |
+--------+-------------+-------+------------------+-------+-----------+-------+-----------+---------------+--------------------+--------------------+--------------------+
| 1 | 1650456656 | 7 | 0 | root | 0 | 1 | test_user | MANAGED_TABLE | NULL | NULL | |
+--------+-------------+-------+------------------+-------+-----------+-------+-----------+---------------+--------------------+--------------------+--------------------+
1 row in set (0.00 sec)
这里的DB_ID为7,对应的就是test1这个库:
mysql> select * from DBS;
+-------+-----------------------+---------------------------------------------------+---------+------------+------------+
| DB_ID | DESC | DB_LOCATION_URI | NAME | OWNER_NAME | OWNER_TYPE |
+-------+-----------------------+---------------------------------------------------+---------+------------+------------+
| 1 | Default Hive database | hdfs://hadoop01:8020/user/hive/warehouse | default | public | ROLE |
| 7 | NULL | hdfs://hadoop01:8020/user/hive/warehouse/test1.db | test1 | root | USER |
+-------+-----------------------+---------------------------------------------------+---------+------------+------------+
2 rows in set (0.00 sec)
- 在指定数据库下创建表
我们可以在自己当前的库下执行命令,使之在另外的数据库下创建一个表,这里我新建一个数据库test2,并在test1库下执行命令指定让其在test2库下创建新表test_user2:
0: jdbc:hive2://hadoop02:10000> create database test2;
No rows affected (0.21 seconds)
0: jdbc:hive2://hadoop02:10000> show databases;
+----------------+
| database_name |
+----------------+
| default |
| test1 |
| test2 |
+----------------+
3 rows selected (0.128 seconds)
0: jdbc:hive2://hadoop02:10000> select current_database();
+--------+
| _c0 |
+--------+
| test1 |
+--------+
1 row selected (0.118 seconds)0: jdbc:hive2://hadoop02:10000> create table test2.test_user2(id int, name string);#在当前test1库下查看test2库下的表
0: jdbc:hive2://hadoop02:10000> show tables in test2;
+-------------+
| tab_name |
+-------------+
| test_user2 |
+-------------+
1 row selected (0.458 seconds)#mysql端查看
mysql> select * from TBLS;
+--------+-------------+-------+------------------+-------+-----------+-------+------------+---------------+--------------------+--------------------+--------------------+
| TBL_ID | CREATE_TIME | DB_ID | LAST_ACCESS_TIME | OWNER | RETENTION | SD_ID | TBL_NAME | TBL_TYPE | VIEW_EXPANDED_TEXT | VIEW_ORIGINAL_TEXT | IS_REWRITE_ENABLED |
+--------+-------------+-------+------------------+-------+-----------+-------+------------+---------------+--------------------+--------------------+--------------------+
| 1 | 1650456656 | 7 | 0 | root | 0 | 1 | test_user | MANAGED_TABLE | NULL | NULL | |
| 2 | 1650457472 | 8 | 0 | root | 0 | 2 | test_user2 | MANAGED_TABLE | NULL | NULL | |
+--------+-------------+-------+------------------+-------+-----------+-------+------------+---------------+--------------------+--------------------+--------------------+
2 rows in set (0.00 sec)mysql> select * from DBS;
+-------+-----------------------+---------------------------------------------------+---------+------------+------------+
| DB_ID | DESC | DB_LOCATION_URI | NAME | OWNER_NAME | OWNER_TYPE |
+-------+-----------------------+---------------------------------------------------+---------+------------+------------+
| 1 | Default Hive database | hdfs://hadoop01:8020/user/hive/warehouse | default | public | ROLE |
| 7 | NULL | hdfs://hadoop01:8020/user/hive/warehouse/test1.db | test1 | root | USER |
| 8 | NULL | hdfs://hadoop01:8020/user/hive/warehouse/test2.db | test2 | root | USER |
+-------+-----------------------+---------------------------------------------------+---------+------------+------------+
3 rows in set (0.00 sec)
- 指定特定格式地建表
0: jdbc:hive2://hadoop02:10000> create table if not exists test_user3(> name string comment 'user name', #对name字段做备注> age int,> sex string> )> comment 'user table' #对表做备注> row format delimited #设置行格式> fields terminated by '\t' #设置字段之间以什么做分隔> lines terminated by '\n' #设置行之间以什么做分隔> stored as textfile; #以什么格式在HDFS上存储
- 查看表结构(三种方式)
0: jdbc:hive2://hadoop02:10000> desc test_user3;
+-----------+------------+------------+
| col_name | data_type | comment |
+-----------+------------+------------+
| name | string | user name |
| age | int | |
| sex | string | |
+-----------+------------+------------+
3 rows selected (0.459 seconds)
0: jdbc:hive2://hadoop02:10000> desc extended test_user3;
+-----------------------------+----------------------------------------------------+----------------+
| col_name | data_type | comment |
+-----------------------------+----------------------------------------------------+----------------+
| name | string | user name |
| age | int | |
| sex | string | |
| | NULL | NULL |
| Detailed Table Information | Table(tableName:test_user3, dbName:test1, owner:root, createTime:1650461273, lastAccessTime:0, retention:0, sd:StorageDescriptor(cols:[FieldSchema(name:name, type:string, comment:user name), FieldSchema(name:age, type:int, comment:null), FieldSchema(name:sex, type:string, comment:null)], location:hdfs://hadoop01:8020/user/hive/warehouse/test1.db/test_user3, inputFormat:org.apache.hadoop.mapred.TextInputFormat, outputFormat:org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat, compressed:false, numBuckets:-1, serdeInfo:SerDeInfo(name:null, serializationLib:org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe, parameters:{serialization.format= | , line.delim= |
| , field.delim= | }), bucketCols:[], sortCols:[], parameters:{}, skewedInfo:SkewedInfo(skewedColNames:[], skewedColValues:[], skewedColValueLocationMaps:{}), storedAsSubDirectories:false), partitionKeys:[], parameters:{totalSize=0, numRows=0, rawDataSize=0, COLUMN_STATS_ACCURATE={"BASIC_STATS":"true"}, numFiles=0, transient_lastDdlTime=1650461273, comment=user table}, viewOriginalText:null, viewExpandedText:null, tableType:MANAGED_TABLE, rewriteEnabled:false) | |
+-----------------------------+----------------------------------------------------+----------------+
6 rows selected (0.416 seconds)
0: jdbc:hive2://hadoop02:10000> describe extended test_user3;
+-----------------------------+----------------------------------------------------+----------------+
| col_name | data_type | comment |
+-----------------------------+----------------------------------------------------+----------------+
| name | string | user name |
| age | int | |
| sex | string | |
| | NULL | NULL |
| Detailed Table Information | Table(tableName:test_user3, dbName:test1, owner:root, createTime:1650461273, lastAccessTime:0, retention:0, sd:StorageDescriptor(cols:[FieldSchema(name:name, type:string, comment:user name), FieldSchema(name:age, type:int, comment:null), FieldSchema(name:sex, type:string, comment:null)], location:hdfs://hadoop01:8020/user/hive/warehouse/test1.db/test_user3, inputFormat:org.apache.hadoop.mapred.TextInputFormat, outputFormat:org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat, compressed:false, numBuckets:-1, serdeInfo:SerDeInfo(name:null, serializationLib:org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe, parameters:{serialization.format= | , line.delim= |
| , field.delim= | }), bucketCols:[], sortCols:[], parameters:{}, skewedInfo:SkewedInfo(skewedColNames:[], skewedColValues:[], skewedColValueLocationMaps:{}), storedAsSubDirectories:false), partitionKeys:[], parameters:{totalSize=0, numRows=0, rawDataSize=0, COLUMN_STATS_ACCURATE={"BASIC_STATS":"true"}, numFiles=0, transient_lastDdlTime=1650461273, comment=user table}, viewOriginalText:null, viewExpandedText:null, tableType:MANAGED_TABLE, rewriteEnabled:false) | |
+-----------------------------+----------------------------------------------------+----------------+
6 rows selected (0.177 seconds)
- 修改表名
0: jdbc:hive2://hadoop02:10000> alter table test_user3 rename to test_user4;
- 修改列名/修改列的数据类型
0: jdbc:hive2://hadoop02:10000> alter table test_user4 change column name sname string;#name sname string依次为原列名、新列名、列的数据类型,在修改列名时,不管列的数据类型是否与修改前的一样,都应该给定数据类型
#如果是不修改列名,只修改列的数据类型,那么这里面的两个字段名都还是写原来的字段名即可。
- 添加字段
0: jdbc:hive2://hadoop02:10000> alter table test_user4 add columns(address string);
- 修改列的顺序
注意:
1.在hive 2.x之后的版本中,修改列的位置时,必须是相同的数据类型的位置进行移动。
2.修改了列的位置,并不会将该列对应的值也进行移动,也就是说只是将列的名字进行了位置上的移动,数据不会跟着移动,就会导致原本列的值对应了移动后的列名。在下面的例子中,就是原来的sex的值修改后变成了address的值,address原来的值对应到了sex的列。
修改前:
将sex列放在address列后面:
0: jdbc:hive2://hadoop02:10000> alter table test_user4 change column sex sex string after address;
- 删除表
0: jdbc:hive2://hadoop02:10000> drop table test_user;
Hive的基本操作之库、表相关推荐
- Hive的基本操作-创建外部表
外部表的操作 外部表说明 外部表因为是指定其他的hdfs路径的数据加载到表当中来,所以hive表会认为自己不完全独占这份数据,所以删除hive表的时候,数据仍然存放在hdfs当中,不会删掉 管理表和外 ...
- Hive的基本操作-创建内部表
管理表的操作 建表初体验 use myhive; create table stu(id int,name string); insert into stu values (1,"zhang ...
- DolphinScheduler无故删除HDFS上的Hive库表目录
亲爱的朋友们,我可爱的同事又搞了个大BUG 待我慢慢道来- DolphinScheduler大家应该都用过,中国人开源的一个调度工具,类似Azkaban,本次的事情就是在DolphinSchedule ...
- hive查看数据库里库的信息_Hive学习之路 (三)Hive元数据信息对应MySQL数据库表...
概述 Hive 的元数据信息通常存储在关系型数据库中,常用MySQL数据库作为元数据库管理.上一篇hive的安装也是将元数据信息存放在MySQL数据库中. Hive的元数据信息在MySQL数据中有57 ...
- 数据库的基本操作——建库、删库、建表、删表等
数据库的基本操作--建库.删库.建表.删表等 1.建库 2.建表 3.查询(query) 1.建库 2.建表 按第二个箭头,表的属性就会出来 3.查询(query)
- hive删除数据、删除分区、删除库表
hive删除数据.删除分区.删除库表 -- 删除库 drop database if exists db_name; -- 强制删除库 drop database if exists db_name ...
- (超长文)Hive Sql基本操作
Hive Sql基本操作 1.hive里面不显示列名 2.注释问题2.1 MySQL中的注释2.2 Hive中的注释3.乱码问题3.1 修改表字段注解和表注解3.2 修改分区字段注解3.3 修改索引注 ...
- Hive的基本操作-数据库的创建和删除
Hive 的基本操作 创建数据库 create database if not exists myhive; use myhive; 说明:hive的表存放位置模式是由hive-site.xml当中的 ...
- Hive的基本操作总结
文章目录 目录 前言: 1.Hive基本操作 1.1.DDL操作 1.2.DML操作 1.3.Hive Join 总结: 目录 前言: 对于Hive来说最重要的一点就是能够用Hql来进行数据分析.而H ...
最新文章
- Mongodb的安装部署
- 【Flask】Jinja2之模板继承
- 安全是一个系统问题包括服务器安全,信息安全技术题库:信息泄露对于Web服务器的危害在于( )。...
- linux命令we,Linux学习篇之基础命令
- android+六边形布局,android – 带六边形触摸区域的六角形按钮
- 腾讯管家去除桌面快捷小图标
- Ubuntu12环境下Thin+rails(4)+ruby(2)+nginx+mysql 配置
- 元宵节快乐 | 2月15日 星期二 | 携程在国内率先开启混合办公模式;米哈游推出元宇宙品牌;AMD宣布完成对赛灵思的收购...
- CORS跨域限制以及预请求验证(C++ Qt框架实现)
- JavaEE基础(02):Servlet核心API用法详解
- Android进程间通信之socket通信
- 【华为云技术分享】Batch Normalization (BN) 介绍
- 开发一款浏览器内核需要学习哪些方面的知识?
- App专项测试之弱网测试
- Spring Boot入门(2)-项目属性配置
- CSDN账号,你需要不
- 获取 CSDN 1024 程序员节勋章教程
- 《University Calculus》-chaper8-无穷序列和无穷级数-比值审敛法
- 知乎账号登录+验证码
- 直播电商平台开发,video组件实现视频弹幕功能