河北网站开发报价,二手车 网站开发,发帖推广哪个平台好,搭建网站平台1#xff0c;Hive数据表操作
1#xff0c;建表语句和内外部表 ①创建内部表
create [external] table [if not exists] 表名(
字段名 字段类型 [comment 注释],
字段名 字段类型 [comment 注释],
...
)
[row format delimited
fields terminated by 指定分隔符];#xff0…1Hive数据表操作
1建表语句和内外部表 ①创建内部表
create [external] table [if not exists] 表名(
字段名 字段类型 [comment 注释],
字段名 字段类型 [comment 注释],
...
)
[row format delimited
fields terminated by 指定分隔符];1直接使用create table创建表时默认创建内部表而当添加external后表示创建外部表 2当要查看表类型与详细信息时使用语法[desc formatted 表名;] 2外部表(EXTERNAL_TABLE) 外部表External是指被external关键字修饰的表 也可称为关联表。 要创建一个外部表需要添加external关键字语法
create external table 数据表名 ......[location]......1.1请说一说内部表和外部表有什么区别
在Hive中内部表和外部表的区别主要有如下几点 1通过external关键字区分内外部表 内部表内部表直接使用create table 内部表名 的形式创建即可 外部表外部表需要使用external 关键字来修饰因此创建外部表语法时create external table table 外部表名 2内部表和外部表再Hive中的管理范围不一样 内部表表类型表示为Manage_table ,Hive在管理内部表时当使用drop删除表既能删除内部表的元数据也能删除在HDFS中的实际数据因此Hive能完全控制和管理内部表所以内部表也可以称为管理表 外部表表类型表示为external_taable,Hive在管理外部表时只能删除元数据信息而不能删除HDFS中的实际数据当使用drop删除外部表时只能删除外部表的元数据而不能删除外部表位于HDFS中的真实数据因此Hive仅能管理外部表的部分内容所以外部表也可以称为关联表。 3更改表结构与两类表操作有所不同 内部表更改内部表结构时HDFS中可以同步更改数据结果 外部表当对外部表更改结构后HDFS中不能立马同步结果而需要进行对外部表进行修复操作 4存储路径可能不同 内部表当在设计内部表时一般对于存储路径是默认的即/user/hive/warehose目录下 外部表一般在创建外部表时为了数据的安全可能会设定存储路径名。 以上就是我对内部表和外部表区别的一些个人理解。 3,字段类型 对于字段类型整体可以分为两个大类别 1原生数据类型primitive data type 原生数据类型包括数值类型、时间类型、字符串类型、杂项数据类型 在原生数据类型中较为常见的有int、double、string、varchar、timestamp、 date。 2复杂数据类型complex data type 复杂数据类型包括array数组、map映射、struct结构、union联合体。 4,关于Hive的数据类型需要注意 1Hive的数据类型不区分大小写或者说对大小写不敏感 2除SQL数据类型外还支持Java数据类型比如string 3int和string是使用最多的大多数函数都支持 4复杂数据类型的使用时通常需要和分隔符指定语法并配合使用 5如果定义的数据类型和文件不一致hive会尝试自动转换类型但是不保证成 功。
1.2 创建表
1创建表 create 2查看表 desc/show 3删除表 drop 4修改表 alter 1默认分隔符 默认分隔符应该是“\001”。在某些文本编辑器中这类特殊符号会显示为SOH。 2常见的建表语句 1基于查询结果建表 create table 表名 as select 语句; 2基于已存在的表结构建表相当于复制一张和已存在的表一摸一样的表 create table 表名 like 已存在的表名;
-- 了解快速建表操作
create table computer(
brand string,
price double,
size int
) row format delimited
fields terminated by \t;
insert into computer values (苹果,19999.99,8);
-- _copy
create table phone_copy as select * from phone;
create table computer_copy like computer;1.3查看表与删除表
1查看表 在Hive中DESC TABLE语句可用于显示Hive中表的元数据信息。
-- 查看字段基本信息
desc [数据库名.]表名;
-- 以序列化形式查看字段更多信息
desc extended [数据库名.]表名;
-- 以表格形式查看字段所有信息
desc formatted [数据库名.]表名;2删除表 drop table 表名; 当使用删除表命令删除内部表时元数据及数据表内容等都会删除。
1.4修改表
1添加一列 给数据表添加一列新字段
alter table 表名 add columns(字段名 数据类型);2修改字段名 当数据表的某字段名有误时可以修改字段名语法
alter table 表名 change 原字段 新字段名 类型;3修改表名 一般地给数据表命名时一般会添加前缀tb或tbl或table字样。语法
alter table 表名 rename to 新的表名;4修改表位置路径 也可以修改表的存储位置语法
alter table 表名 set location 路径;1.5操作内部表数据
在Hive中的内部表操作数据语法 1插入数据 insert into 表名[(字段名, 字段名, …)] values(值, 值, …); 2查看数据 select * from 表名; 3清空数据 truncate table 表名;
-- ------------------操作数据--------------------------
use sz41db_machine;
create table teacher(
id int,
name string,
gender string
) row format delimited
fields terminated by \t;
insert into teacher values (1,fangGE,Man),(2,文
文,Woman);
select * from teacher;
truncate table teacher;1.6上传文件映射表
-- ---------------映射文件-----------------------
use sz41db_machine;
show tables ;
create table student(
id int,
stu_name string
)row format delimited
fields terminated by ,;
select * from student;1当数据表字段内容与表目录下的文件数据有对应则会自动映射数据内容 到Hive表中 2我们会发现当把数据表导入到HDFS对应目录后这类插入数据的方式 比直接insert要更高效。
2外部表操作
1创建外部表
create external table [if not exists] 表名(
字段名 字段类型 [comment 注释],
字段名 字段类型 [comment 注释],
...
)
[comment 注释]
[row format delimited
fields terminated by 指定分隔符]
[location HDFS路径名]
[tblproperties (属性名值, 属性名值, ...)];desc 表名; – 查看字段基本信息 1 desc formatted 表名; – 以表格形式查看信息 1 desc extended 表名; – 以序列化形式查看更多信息
2.1修改表信息
1查看创建表语句 为了查看建表的具体信息可以使用创建表语句
show create table 表名;2修改字段类型 当要修改表中的字段类型时语句
alter table 表名 replace columns (字段名 类型, 字段名 类型, ...);3修改表属性 在创建表时我们看到可以添加一个[tblproperties属性]选项。其实也是可以修改 的。语法
alter table 表名 set tblproperties (属性名值, ...);说明 1当修改属性且修改表中不存在的属性信息时则表示添加一个表属性 2当修改表中已有属性名时仅需设定属性名一致并把值修改即可。 2切换内部表与外部表 1当仅需要临时使用数据时可以临时使用外部表其他时候通常建议使用内部表 2一般情况下不建议修改表的存储路径地址因此修改表路径仅作了解。 alter table 表名 set tblproperties (“EXTERNAL”“TRUE”);
2.2 内部表与外部表的区别
再Hive中内部表和外部表的区别主要有如下几点 1通过external关键字区分内外部表 内部表内部表直接使用create table 内部表名 的形式创建即可 外部表外部表需要使用external 关键字来修饰因此创建外部表语法时create external table table 外部表名 2内部表和外部表再Hive中的管理范围不一样 内部表表类型表示为Manage_table ,Hive在管理内部表时当使用drop删除表既能删除内部表的元数据也能删除在HDFS中的实际数据因此Hive能完全控制和管理内部表所以内部表也可以称为管理表 外部表表类型表示为external_taable,Hive在管理外部表时只能删除元数据信息而不能删除HDFS中的实际数据当使用drop删除外部表时只能删除外部表的元数据而不能删除外部表位于HDFS中的真实数据因此Hive仅能管理外部表的部分内容所以外部表也可以称为关联表。 3更改表结构与两类表操作有所不同 内部表更改内部表结构时HDFS中可以同步更改数据结果 外部表当对外部表更改结构后HDFS中不能立马同步结果而需要进行对外部表进行修复操作 4存储路径可能不同 内部表当在设计内部表时一般对于存储路径是默认的即/user/hive/warehose目录下 外部表一般在创建外部表时为了数据的安全可能会设定存储路径名。 以上就是我对内部表和外部表区别的一些个人理解。
3数据的导入与导出
1.1添加数据
1在HDFS访问页面导入文件 首先进入HDFS访问页面中然后把外部文件导入存储数据的路径。 2直接使用insert into插入数据 采用SQL语法insert来插入数据到数据表中语法
insert into 表名[(字段名, 字段名, ...)] values(值, 值, ...);3从已有数据的表中导入数据到新表 当表A中已存在数据要把表内数据复制到另一张表B时语法
-- 追加数据
insert into [table] 表名A select * from 表名B;
-- 数据覆盖
insert overwrite table 表名A select * from 表名B;1.2数据的加载
1使用hdfs put命令上传文件 2使用load语法加载数据 1使用hdfs put命令上传文件 -put命令用于将本地系统的文件上传到HDFS系统中语法 hdfs dfs -put /本地文件路径 /hdfs文件路径 2使用load语法加载数据 load可以翻译为加载。可以用于给数据表中导入数据语法
load data [local] inpath 文件路径名 [overwrite] into table 表
名;1.3数据的导出
1从HDFS页面导出文件 到HDFS访问页面中直接Download下载文件。 2使用hdfs get命令下载文件 -get命令用于将HDFS系统中的文件下载到本地语法 3使用类SQL命令导出数据 也可以将hive表中的数据导出到其他任意目录例如linux本地目录、hdfs路径等。
insert overwrite [local] directory 存放目录路径名 select 语句;将查询的结果导出到本地且使用默认列分隔符。
insert overwrite local directory /home/hadoop/export1 select
* from test_load ;将查询的结果以指定列分隔符\t形式导出到本地Linux目录。
insert overwrite local directory /home/hadoop/export2 row
format delimited fields terminated by \t select * from
test_load;将查询的结果导出到HDFS上(不带local关键字)。
insert overwrite directory /tmp/export row format delimited
fields terminated by \t select * from test_load;