hive表基本语法

hive表基本语法

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

目录

hive表基本语法

[1.ROW FORMAT用法](#1.ROW FORMAT用法)

2.LOCATION用法

[3.EXTERNAL用法 (外部表)](#3.EXTERNAL用法 (外部表))

[4.STORED AS 用法:设置数据存储格式](#4.STORED AS 用法:设置数据存储格式)

[5.TBLPROPERTIES 用法](#5.TBLPROPERTIES 用法)

[6.PARTITIONED BY 分区](#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;
相关推荐
心灵Haven1 小时前
1_安装JDK和Hadoop
java·开发语言·hadoop
我要用代码向我喜欢的女孩表白5 小时前
hivePB级迁移方案
hive
菜鸟冲锋号5 小时前
Hive SQL中,使用WITH子句和创建临时表性能对比
数据仓库·sql
火龙谷7 小时前
Hadoop第2课(伪分布式集群的搭建)
大数据·hadoop·分布式
不止会JS7 小时前
Hadoop架构详解
大数据·hadoop·架构
小技工丨10 小时前
Hadoop简介
大数据·hadoop·分布式
红豆和绿豆12 小时前
实现实时数据仓库开源项目
数据仓库·开源
不剪发的Tony老师12 小时前
Apache Doris:一款高性能的实时数据仓库
数据库·数据仓库
霍小毛15 小时前
Hive 与 TiDB 在大数据解析场景中的对比分析
大数据·hive·tidb
欧冶渃1 天前
HDFS数据多目录、异构存储、回收站
大数据·hadoop·hdfs