hive表基本语法

发布于:2024-05-06 ⋅ 阅读:(28) ⋅ 点赞:(0)

hive表基本语法

青少年是一个美好而又是一去不可再得的时期 是将来一切光明和幸福的开端

目录

hive表基本语法

1.ROW FORMAT用法

2.LOCATION用法

3.EXTERNAL用法 (外部表)

4.STORED AS 用法:设置数据存储格式

5.TBLPROPERTIES 用法

6.PARTITIONED BY 分区

7.扩展:向分区中插入数据时出错


1.ROW FORMAT用法

1)创建一个表

CREATE TABLE IF NOT EXISTS filetest.total_score

(

student_id string COMMENT "学生编号",

score int COMMENT "总分"

)ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t"

STORED AS TEXTFILE;

2)上传一下数据

load data local inpath "/usr/local/soft/hive-3.1.2/data/total_score.txt" into table filetest.total_score;

3)查看内容

select * from filetest.total_score;

ROW FORMAT用于指定Hive表中数据的存储格式 通常在创建表时使用ROW FORMAT具体指定了数据在Hive表中的行格式 包括字段之间的分隔符 行之间的分隔符等

常见的字段分隔符有逗号 制表符(制表符:Tab键 (\t))等 行分隔符一般为换行符

注意:如果数据和分隔符不匹配 则原始数据中的所有数据会变成新表中的一列数据

2.LOCATION用法

在Hive中 LOCATION关键字用于指定Hive表的存储位置 通常情况下 当你创建一个Hive表时 表的数据会存储在HDFS(Hadoop分布式文件系统)上的默认位置 但是你也可以使用LOCATION关键字来指定表的具体存储路径 使得表的数据可以存储在你指定的任意路径下 这为管理和组织数据提供了更大的灵活性

1)我们先创建一个路径

dfs -ls /;

dfs -mkdir /testDatabase/total_score;

2)创建表

CREATE TABLE IF NOT EXISTS filetest.total_score3

(

student_id string COMMENT "学生编号",

score int COMMENT "总分"

)ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t"

STORED AS TEXTFILE

LOCATION "/testDatabase/total_score";

3)上传数据

load data local inpath "/usr/local/soft/hive-3.1.2/data/total_score.txt" into table filetest.total_score3;

4)查看表信息

查看表的字段信息

desc total_score3;

查看表的详细信息

desc formatted total_score3;

5)删除表

drop table total_score3;

删除表的时候 HDFS上的文件也会删除 

那么 如果有重要信息 我们不想轻易删除怎么办?

3.EXTERNAL用法 (外部表)

1)我们先创建一个路径

dfs -ls /;

dfs -mkdir /testDatabase/total_score;

2)创建表

CREATE EXTERNAL TABLE IF NOT EXISTS filetest.total_score3

(

student_id string COMMENT "学生编号",

score int COMMENT "总分"

)ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t"

STORED AS TEXTFILE

LOCATION "/testDatabase/total_score";

3)上传数据

load data local inpath "/usr/local/soft/hive-3.1.2/data/total_score.txt" into table filetest.total_score3;

4)删除表

drop table total_score3;

注: 

外部表与普通内部表的区别在于:外部表删除表时 只能删除hive中的元数据 我们可以看到表被删除了 但是数据依然存在 不会删除对应的数据 并且和表数据的存储位置无关

4.STORED AS 用法:设置数据存储格式

1)使用方法一:

CREATE EXTERNAL TABLE IF NOT EXISTS filetest.total_score4

(

student_id string COMMENT "学生编号",

score int COMMENT "总分"

)ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t"

STORED AS ORC;

--load data local inpath "/usr/local/soft/hive-3.1.2/data/total_score.txt" into table filetest.total_score4;--

注意:如果数据存储格式为压缩格式 那么就不能直接将文本数据加载至表中

insert into table filetest.total_score4 select * from filetest.total_score;

2)使用方法二:

通过查询语句的结果 去创建一个新表

create table if not exists filetest.total_score5 STORED AS ORC AS select student_id,score from filetest.total_score;

5.TBLPROPERTIES 用法

1)创建表

CREATE EXTERNAL TABLE IF NOT EXISTS filetest.total_score6

(

student_id string COMMENT "学生编号",

score int COMMENT "总分"

)ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t"

STORED AS TEXTFILE

TBLPROPERTIES("author"="jhw","application"="学生表 保存学生的总分 如有错请联系:jhw");

2)查看表信息

查看表的字段信息

desc total_score6;

查看表的详细信息

desc formatted filetest.total_score6;

6.PARTITIONED BY 分区

--将学生信息表中不同性别的学生进行分区保存

1)创建表

CREATE TABLE IF NOT EXISTS filetest.partition_student

(

id STRING COMMENT "学生ID",

name STRING COMMENT "学生姓名",

age int COMMENT "年龄”,

clazz STRING COMMENT “班级"

) PARTITIONED BY (gender STRING COMMENT "性别分区")

STORED AS TEXTFILE;

2)查看表结构

3)插入数据

开启动态分区支持 通过动态分区进行数据插入

set hive.exec.dynamic.partition=true;

set hive.exec.dynamic.partition.mode=nostrict;

set hive.exec.max.dynamic.partitions.pernode=1000;

insert into table filetest.partition_student PARTITION(gender="男") select id,name,age,clazz FROM filetest.students where gender="男" limit 10;

注意:动态分区默认把最后一个字段设置为分区字段 

静态分区:

insert into table filetest.partition_student PARTITION(gender="男") select "1500100002","吕金鹏",24,"文科六班";

select * from students limit 10;

7.扩展:向分区中插入数据时出错

我们打开MySQL 修改一下编码就可以啦

  1. 打开数据库

mysql -u root -p123456

2.use hive 

3.输入以下命令

修改hive database 编码alter database hive default character set utf8;修改 table 编码alter table PARTITIONS default character set utf8;alter table PARTITION_KEY_VALS default character set utf8;alter table SDS default character set utf8;修改 字段 编码alter table PARTITIONS modify column PART_name varchar(190) character set utf8;alter table PARTITION_KEY_VALS modify column PART_KEY_VAL varchar(256) character set utf8;alter table SDS modify column LOCATION varchar(4000) character set utf8;