hive分区、数据加载、数据导出、数据类型
一、hive分区
1、特点:
分区表与其他表不同点在于,分区字段的值为表目录下的子目录格式 ,为: 分区字段=值
2.建表语句
create database learn2;
CREATE TABLE IF NOT EXISTS learn2.partition_student(
id STRING COMMENT "学生ID",
name STRING COMMENT "学生姓名",
age int COMMENT "年龄",
gender STRING COMMENT "性别"
) PARTITIONED BY (clazz STRING COMMENT "班级")
ROW FORMAT DELIMITED FIELDS TERMINATED BY ","
STORED AS TEXTFILE;
3.分区表插入数据
(1)load data local inpath "本地路径" into table 表名 PARTITION(分区字段 = 值)
load data local inpath "/usr/local/soft/hive-3.1.2/data/文科一班.txt" into table learn2.partition_student PARTITION(clazz="文科一班");
load data local inpath "/usr/local/soft/hive-3.1.2/data/文科二班.txt" into table learn2.partition_student PARTITION(clazz="文科二班");
(2)覆盖原先分区中的数据
load data local inpath "本地路径" overwrite into table 表名 PARTITION(分区字段 = 值)
load data local inpath "/usr/local/soft/hive-3.1.2/data/新文科一班.txt" overwrite into table learn2.partition_student PARTITION(clazz="文科一班");
(3)-put 方法上传数据(直接在hdfs上上传数据)
dfs -put /usr/local/soft/hive-3.1.2/data/理科一班.txt /user/hive/warehouse/learn2.db/partition_student2/clazz=理科一班/
(4)增加动态分区操作
set hive.exec.dynamic.partition=true; -- 设置开启动态分区
set hive.exec.dynamic.partition.mode=nostrict; -- 设置动态分区的模式为非严格模式
set hive.exec.max.dynamic.partitions.pernode=1000; --设置分区的最大分区数
插入格式:本质就是把另一个表用查询语句插入表中并动态分区。
INSERT INTO TABLE 表名 PARTITION(分区字段) SELECT查询语句
INSERT INTO TABLE learn2.partition_student3 PARTITION(clazz) SELECT id,name,age,gender,clazz FROM learn2.partition_student2
分区的规则:默认是查询语句中后几列
4、查询分区
(1)show partitions 表名;
show partitions learn2.partition_student;
5、删除分区
(1)alter table 表名 drop PARTITION(分区字段=值)
alter table learn2.partition_student drop PARTITION(clazz="文科二班");
注意: 如果分区表是外部表,那么删除分区操作只能删除HIVE中的元数据 数据依然存在
(2)强制删除分区
dfs -rmr /user/hive/warehouse/learn2.db/partition_student2/clazz=文科二班
alter table learn2.partition_student2 drop PARTITION(clazz="文科二班");
6、恢复被删除分区
msck repair table 表名;
7、添加分区
alter table 表名 add PARTITION(分区字段=值)
alter table learn2.partition_student2 add PARTITION(clazz="理科一班");
8、 创建多级分区
(1) 特点:
1.查询和操作分区时 格式为: clazz=文科一班/gender=女
2.在HDFS上多级分区表现为多层级目录
3.根据具体的数据情况进行区分,尽量将大一级划分放在前
4.多级分区常用来将数据按天进行存储
(2)建表语句
CREATE TABLE IF NOT EXISTS learn2.partition_student4(
id STRING COMMENT "学生ID",
name STRING COMMENT "学生姓名",
age int COMMENT "年龄"
) PARTITIONED BY (clazz STRING COMMENT "班级",gender STRING COMMENT "性别")
ROW FORMAT DELIMITED FIELDS TERMINATED BY ","
STORED AS TEXTFILE;
插入多级分区:
load data local inpath "/usr/local/soft/hive-3.1.2/data/文科一班女.txt" into table learn2.partition_student4 PARTITION(clazz="文科一班",gender="女");
load data local inpath "/usr/local/soft/hive-3.1.2/data/文科二班男.txt" into table learn2.partition_student4 PARTITION(clazz="文科二班",gender="男");
二、数据加载,加载至表中
1、从本地文件系统加载数据至表中
load data local inpath "本地路径" into table 表名
load data local inpath "本地路径" overwrite into table 表名 //overwrite会覆盖原有数据
2、从HDFS上加载数据至表中
dfs -mkdir /data; //在hdfs上创建文件夹
dfs -put "/usr/local/soft/hive-3.1.2/data/理科一班.txt" /data //将文件传输到hdfs
load data inpath "/data/理科一班.txt" into table learn2.partition_student5;
注意: 通过HDFS中的数据加载至表中时,原路径中的数据会移动至表目录下,原路径文件会消失。
3.INSERT 方式:
INSERT INTO:
INSERT INTO TABLE 表名 SELECT 查询语句
INSERT INTO TABLE learn2.partition_student6 SELECT id,name,age,clazz as gender FROM learn2.partition_student5;
注意:查询语句中的字段需要与当前表的字段顺序一致,不然会导致数据错位。
INSERT OVERWRITE:
INSERT OVERWRITE TABLE 表名 SELECT 查询语句
通过查询的数据覆盖表中原有数据
4. AS SELECT
通过查询结果创建表,并输入数据
CREATE TABLE IF NOT EXISTS learn2.partition_student7 AS SELECT id,name,age,clazz as gender FROM learn2.partition_student5;
如果只想创建表而不需要加载数据,那么可以使用 LIKE
CREATE TABLE IF NOT EXISTS learn2.partition_student8 LIKE learn2.partition_student5;
5. LOCATION
通过创建表并指定数据所在位置,然后加载数据(数据已存在于HDFS目录中)
LOCATION "/testDatabase/total_score"; //在hdfs中的存储地址
6.import table
需要搭配export使用,导入表时,可以指定新表名
import table 表名 FROM "路径"
IMPORT TABLE learn2.partition_student6 FROM "/data/export_data";
IMPORT TABLE learn2.partition_student9 FROM "/data/export_data";
三、数据导出
1.INSERT OVERWRITE LOCAL DIRECTORY "路径" SELECT 查询语句
INSERT OVERWRITE LOCAL DIRECTORY "/usr/local/soft/hive-3.1.2/data/output" SELECT * FROM learn2.partition_student6;
导出数据时,通过执行MapReduce任务导出到本地文件系统,查看导出数据,发现数据没有分隔符
INSERT OVERWRITE LOCAL DIRECTORY "/usr/local/soft/hive-3.1.2/data/output" ROW FORMAT DELIMITED FIELDS TERMINATED BY ":" SELECT * FROM learn2.partition_student6;
对导出的数据加个分隔符
2.INSERT INTO LOCAL DIRECTORY "路径" SELECT 查询语句
3. HDFS get 方法
dfs -get 表所在路径 本地路径
dfs -get hdfs://master:9000/user/hive/warehouse/learn2.db/partition_student6 /本地路径
4. hive -e "SQL语句" > 本地文件系统
分析:
hive -e "SQL语句" 表示通过-e 将SQL语句传入CLI并执行,最后退出CLI
> 表示Linux中的重定向
hive -e "SELECT * FROM learn2.partition_student6" > /usr/local/soft/hive-3.1.2/data/output/partition_student6.txt
5. export方法
注:数据导出包括数据及其表的元数据信息
export table 库.表名 to HDFS
export table learn2.partition_student6 to "/data/export_data"
四、数据类型
1、基本数据类型
整型 TINYINT — 微整型,只占用1个字节,只能存储0-255的整数。
SMALLINT– 小整型,占用2个字节,存储范围–32768 到 32767。
INT– 整型,占用4个字节,存储范围-2147483648到2147483647。
BIGINT– 长整型,占用8个字节,存储范围-2^63到2^63-1。
布尔型BOOLEAN — TRUE/FALSE 浮点型FLOAT– 单精度浮点数。
DOUBLE– 双精度浮点数。 字符串型STRING– 不设定长度。
2、日期类型:
Timestamp 格式“YYYY-MM-DD HH:MM:SS.fffffffff”(9位小数位精度)
Date DATE值描述特定的年/月/日,格式为YYYY-MM-DD。
3、复杂数据类型: Structs,Maps,Arrays
(1)ARRAY 使用 (数组)
create table learn2.person(
name string,
work_locations array<string>
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
COLLECTION ITEMS TERMINATED BY ','; --表示Array中的数据是以,作为分隔
ArrayTest.txt文件中的数据:
biansutao beijing,shanghai,tianjin,hangzhou
linan changchu,chengdu,wuhan
上传数据:
dfs -put /usr/local/soft/hive-3.1.2/data/ArrayTest.txt hdfs://master:9000/user/hive/warehouse/learn2.db/person
查询:
SELECT work_locations[0], work_locations[1] FROM learn2.person; //可通过数组形式查询数据
(2)MAP使用 (kv结构)
create table learn2.score(name string, score map<string,int> )
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' --列的分隔符
COLLECTION ITEMS TERMINATED BY ',' -- 集合的分隔符
MAP KEYS TERMINATED BY ':'; -- 每个KV数据对的分隔符
score.txt 文件中的数据:
biansutao '数学':80,'语文':89,'英语':95
jobs '语文':60,'数学':80,'英语':99
上传数据:
dfs -put /usr/local/soft/hive-3.1.2/data/score.txt hdfs://master:9000/user/hive/warehouse/learn2.db/score
SELECT score["'数学'"] FROM learn2.score; //可通过key查询values
3 Struct的使用
创建数据表
CREATE TABLE test(id int,course struct<course:string,score:int> )
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' --列分隔符
COLLECTION ITEMS TERMINATED BY ','; -- 集合分隔符
数据
1 english,80
2 math,89
3 chinese,95
dfs -put /usr/local/soft/hive-3.1.2/data/struct.txt hdfs://master:9000/user/hive/warehouse/learn2.db/test
SELECT course.score FROM learn2.test;
注意:struct就相当于一个对象通过 列名.属性 获取里面的数据
4、数据类型转换
(1)强制转换小数型为int
select cast("1.1" as int);
(2)小数转字符串
select cast(1.1 as STRING);
hive分区、数据加载、数据导出、数据类型相关推荐
- Hive的数据加载与导出
普通表的加载 1.load方式 load data [local] inpath [源文件路径] into table 目标表名; 从HDFS上加载数据,本质上是移动文件所在的路径 load data ...
- hive 如果表不存在则创建_从零开始学习大数据系列(四十七) Hive中数据的加载与导出...
[本文大约1400字,阅读时间5~10分钟] 在<从零开始学习大数据系列(三十八) Hive中的数据库和表>和<从零开始学习大数据系列(四十二)Hive中的分区>文章中,我们已 ...
- Hive的基本操作-表结构修改和数据加载
分桶表 将数据按照指定的字段进行分成多个桶中去,说白了就是将数据按照字段进行划分,可以将数据按照字段划分到多个文件当中去 开启 Hive 的分桶功能 set hive.enforce.bucketin ...
- python录入数据至ppt_利用Python进行数据分析之 数据加载.ppt
利用Python进行数据分析之 数据加载 " " " " 数据加载,存储与文件格式 1,读写文本格式数据: (read_csv,read_table,read_ ...
- CC00053.pbpositions——|HadoopPB级数仓.V11|——PB数仓.v11|核心交易分析|DIM层建表|加载数据|
一.DIM层建表加载数据:DIM层建表加载数据概述 ### --- 首先要确定哪些是事实表.哪些是维表.绿色的是事实表,灰色的维表~~~ 用什么方式处理维表,每日快照.拉链表? ~~~ 小表使用每日快 ...
- Hive中数据的加载和导出
原文:http://blog.javachen.com/2014/06/09/hive-data-manipulation-language.html 关于 Hive DML 语法,你可以参考 apa ...
- Hive加载数据操作
Hive加载数据操作 一.load data 语法结构: load data [local] inpath 'filepath' [overwrite] into table table_name [ ...
- Hive 分区表 数据加载
1. Hive表数据的导入方式 1.1 本地上传至hdfs 命令: hdfs dfs -put [文件名] [hdfs绝对路径] 例如:测试文件 test_001.txt 内容如下 在 hdfs 绝对 ...
- Hive表路径修改和分区表数据加载命令
1.对于同一张表,如果不是分区,那要变更数据来源,就只有改变其hdfs存储路径: 修改tmp_fjs_ftp表的location,两种方式: 方式一:通过修改表DDL alter table tmp_ ...
最新文章
- R语言可视化分面图、单变量分组多水平t检验并指定参考水平、可视化单变量分组多水平分面箱图(faceting boxplot)并添加显著性水平、指定显著性参考水平、添加抖动数据点
- Spads 公式解析系统 - Java
- 朝着理想坚实迈进_坚实原则:开放/封闭原则
- Java面向对象(6)--this关键字使用
- 用webstorm自动编译less产出css和sourcemap
- 在Exchange Server 2007中为出站邮件添加免责声明
- git进入项目目录 windows_Windows下Git 怎么整个文件夹目录上传到代码仓库(不论GitHub、GitLab、Gitee、DevCloud)...
- Linux /etc/login.defs配置文件
- TensorRT:AttributeError: 'module' object has no attribute 'Logger'
- window自动生成数据库连接字符串
- 车载主机企业对Android平台趋之若骛
- 企业微信可以获取用户unionid吗?
- Bandicam v5.2.1.1860 班迪录屏绿色便携版
- APICloud平台使用融云模块实现音视频通话实践经验总结分享
- python画实心圆_任意空实心圆形打印|Python练习系列[8]
- 7个向上管理技巧,让你的职场一路开挂
- OpenCV这么简单为啥不学——1.5、解决putText中文乱码问题
- Linux常用命令——newusers命令
- 计算机专业哀鸿遍野:低代码平台和程序员水火不容,马上被取代
- 2022-2028年中国渗滤液处理行业市场全景评估及发展策略分析报告