内部表与外部表——头歌

任务描述

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

相关知识

为了完成本关任务,你需要掌握: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; 

测试通过

相关推荐
zskj_qcxjqr5 小时前
七彩喜艾灸机器人:当千年中医智慧遇上现代科技
大数据·人工智能·科技·机器人
洛克大航海8 小时前
Ubuntu安装Hbase
大数据·linux·数据库·ubuntu·hbase
GIOTTO情9 小时前
媒介宣发的技术革命:Infoseek如何用AI重构企业传播全链路
大数据·人工智能·重构
ApacheSeaTunnel10 小时前
新兴数据湖仓手册·从分层架构到数据湖仓架构(2025):数据仓库分层的概念与设计
大数据·数据仓库·开源·数据湖·dataops·白鲸开源·底层技术
落雪财神意10 小时前
股指10月想法
大数据·人工智能·金融·区块链·期股
柳贯一(逆流河版)10 小时前
ElasticSearch 实战:全文检索与数据聚合分析的完整指南
大数据·elasticsearch·全文检索
白鲸开源10 小时前
最佳实践:基于Apache SeaTunnel从MySQL同步到PostgreSQL
大数据·mysql·postgresql
QYResearch10 小时前
2025年全球移动变电站市场占有率及行业竞争格局分析报告
大数据
字节跳动数据平台10 小时前
为何底层数据湖决定了 AI Agent 的上限?
大数据
QYResearch10 小时前
自主机器人扫雪机行业现状与分析
大数据