内部表与外部表——头歌

任务描述

本关任务:创建外部表,并导入数据。

相关知识

为了完成本关任务,你需要掌握:1.表的各种操作。

内部表和外部表

Hive 默认创建内部表(managed table),存储位置在 hive.metastore.warehouse.dir 设置,默认位置是 /user/hive/warehouse。导入数据到内部表的时候是将文件剪切(移动)到指定位置,即原有路径下文件不再存在。删除内部表的时候,元数据和 HDFS 对应的目录节点都将被删除。默认创建的就是内部表,语法如下:

  1. create table table_name
  2. (
  3. field1 data_type comment 'a comment',
  4. field2 data_type comment 'a comment',
  5. ...
  6. )
  7. row format delimited ## 行分割
  8. fields terminated by',' ## 字段分隔符
  9. lines terminated by'\n' ## 行分隔符
  10. stored as textfile; ## 作为文本存储

案例如:

  1. create table test
  2. (
  3. id int comment 'userID',
  4. a string comment 'userName'
  5. )
  6. row format delimited ## 行分割
  7. fields terminated by' ' ## 字段分隔符
  8. lines terminated by'\n' ## 行分隔符
  9. stored as textfile; ## 作为文本存储

其中 comment 可以省略。后面的几行规定了外部导入文件的数据格式。例如上述要求为:外部数据的组织是行分割,每个字段之间用逗号分割,每一行数据之间用换行符分割,文件格式为 txt。在某名为 data.txt 的外部文件中有以下格式的数据可以被正确导入:

  1. 2014001 小王1
  2. 2014002 小李2
  3. 2014003 小明3
  4. 2014004 阿狗4
  5. 2014005 姚明5

我们可以从外部文件导入数据,命令如下:

load data local inpath 'data_path' into table table_name;

其中 data_path 是外部文件的路径。

外部表文件可以在外部系统上,只要有访问权限就可以。外部表导入文件时不移动文件,仅仅是添加一个 metadata。删除外部表时,仅元数据被删除,HDFS 对应的目录节点不会被删除。外部表指向的数据发生变化的时候会自动更新,不用特殊处理。创建外部表命令添加一个 external 即可,

create external table table_name (xxx);

分辨外部表内部表可以使用 desc formatted table_name; 命令查看。

表操作

进入数据库:use database_name;

查看当前数据库下所有表: show tables;

查看某个数据库下所有表: show tables in db_name;

查看表结构:desc table_name;

向表中插入数据:insert into table_name values(value1,value2,...);

增加一个新列:alter table test add columns (new_column data_type comment 'a comment');

查看表数据:select * from table_name;

创建一张类似表 table_name 结构的表 table_name1:create table table_name1 like table_name;

表的重命名:alter table table_name rename to table_name1;

编程要求

在当前目录下创建一个外部数据文件,其中的内容为:

  1. 2014001,小王1
  2. 2014002,小李2
  3. 2014003,小明3
  4. 2014004,阿狗4
  5. 2014005,姚明5

创建一张名为 student 的内部表,导入上述外部文件的数据。然后插入以下数据。

  1. 2014006,小王6
  2. 2014007,小李7

测试说明

平台会对你的操作结果进行测试。

实验过程

打开vi编辑器

复制代码
vim data.txt

按i在data.txt中加入以下内容

复制代码
2014001,小王1
2014002,小李2
2014003,小明3
2014004,阿狗4
2014005,姚明5

按esc,输入:wq保存退出

打开hive

复制代码
hive

输入以下内容

复制代码
create table student
(
id int ,
a string 
)
row format delimited   
fields terminated by ','
lines terminated by '\n'
stored as textfile;
load data local inpath '/root/data.txt' into table student;
insert into student values(2014006,"小王6");
insert into student values(2014007,"小李7");

最后进行查询

复制代码
select * from student; 

测试通过

相关推荐
Lx35227 分钟前
Hadoop异常处理机制:优雅处理失败任务
大数据·hadoop
小嵌同学39 分钟前
Linux:malloc背后的实现细节
大数据·linux·数据库
IT毕设梦工厂2 小时前
大数据毕业设计选题推荐-基于大数据的国家基站整点数据分析系统-Hadoop-Spark-数据可视化-BigData
大数据·hadoop·spark·毕业设计·源码·数据可视化
江瀚视野2 小时前
苹果要在抖音上卖iPhone了?苹果看上了抖音什么?
大数据
微三云-轩2 小时前
区块链系统:解决549 亿元积分商城是否违法的问题
大数据·小程序·重构·区块链·生活
项目題供诗3 小时前
Hadoop(八)
大数据·hadoop·分布式
在未来等你3 小时前
Kafka面试精讲 Day 7:消息序列化与压缩策略
大数据·分布式·面试·kafka·消息队列
在未来等你3 小时前
Kafka面试精讲 Day 10:事务机制与幂等性保证
大数据·分布式·面试·kafka·消息队列
武子康3 小时前
大数据-91 Spark广播变量:高效共享只读数据的最佳实践 RDD+Scala编程
大数据·后端·spark
deepwater_zone4 小时前
大数据(非结构化数据,Spark,MongoDB)
大数据