目录
一:内部表和外部表
1:外部表
2:外部表
3:外部表和内部表区别
二:上传数据方式
一:内部表和外部表 1:外部表
内部表基础建表语句一:(默认指定文件类型为TextFile,HDFS路径为/user/hive/warehouse/库/下)
格式:
create table 表名
(
字段名1 字段类型1,
字段名2 字段类型2,
...
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '分隔符'; // 必选指定列之间的分隔符
分隔符与真实数据不一样能读出来数据把第一行数据当成一个字段 其他为null
内部表基础建表语句二:(HDFS路径为/user/hive/warehouse/库/下)
格式:
create table 表名
(
字段名1 字段类型1,
字段名2 字段类型2,
...
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '分隔符' // 必选指定列之间的分隔符
STORED AS file_format;
概述:
STORED AS:指定具体的从HDFS获取数据的格式,格式不匹配无法获取(默认为TextFile)
内部表基础建表语句三:(HDFS路径默认为/user/hive/warehouse/库/下)
格式:
create table 表名
(
字段名1 字段类型1,
字段名2 字段类型2,
...
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '分隔符' // 必选指定列之间的分隔符
STORED AS file_format
location 'HDFS路径';
概述:
location:表示指定hive数据在hdfs的路径, 如果路径不存在会自动创建,存在就直接绑定(并且可以读取下面的数据),不能通过hdfs路径判断是否是hive表
两张表可以绑定同一个路径 看所在位置要从建表详情
注意:
默认情况下 删除表会把数据也删除(先有数据再有表也会将数据删除)
2:外部表外部表external(不将数据与表进行绑定)
格式:
create external table 表名
(
字段名1 字段类型1,
字段名2 字段类型2,
...
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '分隔符' // 必选指定列之间的分隔符
STORED AS file_format
location 'HDFS路径';
注意:
删除外部表不会删除HDFS上的数据
加载数据(上传到hive表)
为什么建表选择外部表
可以避免删除表的时候将数据删除,避免数据丢失。
3:外部表和内部表区别1,外部表的路径可以自定义,内部表的路径需要在 hive/warehouse/目录下
2,删除表后,普通表数据文件和表信息都删除。外部表仅删除表信息
二:上传数据方式上传数据方式1:
格式:
hadoop dfs -put linux路径 hdfs路径
上传数据方式2:(直接在hive命令行 *** 作)
格式:
dfs -put linux路径 hdfs路径
优点:比在hadoop *** 作hdfs快的多
上传数据方式3:(直接在hive命令行 *** 作)
格式:
load data inpath '/HDFS路径' into table 表名(自动找到hdfs的路径)
注意:对于hive来说是加载
对于HDFS来说是移动
简单来说就是将hdfs上的数据mv到了表目录中
上传数据方式4:(直接在hive命令行 *** 作)
格式:
load data local inpath '/HDFS路径' into 表名(自动找到hdfs的路径)
注意:从本地上传数据 不是mv相当于put
从本地复制
上传数据方式5:(直接在hive命令行 *** 作)
格式:
create table 表名 as 查询语句
注意:只能创建内部表
注意新建表不允许是外部表。
select后面表需要是已经存在的表,建表同时会加载数据。
会启动mapreduce任务去读取源表数据写入新表
上传数据方式6:(直接在hive命令行 *** 作)
格式:
insert [overwriter] into 表名 查询语句 追加
insert overwrite table 表名 查询语句 覆盖
注意:数据对数据,会有格式的转化
注意:
1,如果建表语句没有指定存储路径,不管是外部表还是内部表,存储路径都是会默认在hive/warehouse/xx.db/表名的目录下。
加载的数据如果在HDFS上会移动到该表的存储目录下。注意是移动,移动,移动。不是复制
2,删除外部表,文件不会删除,对应目录也不会删除
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)