一百一十一、Hive——从HDFS到Hive的数据导入(静态分区、动态分区)

news2024/10/4 21:03:01

一、分区的定义

分区表实际上就是对应一个 HDFS 文件系统上的独立的文件夹, Hive 中的分区就是分目录 ,把一个大的数据集根据业务需要分割成小的数据集。
在查询时通过 where 子句中的表达式选择查询所需要的指定的分区,这样的查询效率
会提高很多,所以我们需要把常常用在where 语句中的字段指定为表的分区字段。
而分区又分为静态分区、动态分区两种。

二、静态分区、动态分区对比

静态分区与动态分区的主要区别在于静态分区是手动指定,是编译时进行分区。支持load和insert两种插入方式。适合于分区数少、分区名可以明确的数据

而动态分区是通过数据来进行判断,是在SQL执行时进行分区。只支持inset这一种插入方式。需要先开启动态设置。实际项目里按日期进行分区的数据一般都是动态分区

三、HDFS数据准备

(一)HDFS文件后缀名以日期区分

(二)查看数据样式

四、Hive建普通外部表  不分区

(一)建表语句

create external table if not exists ods_evaluation(
    device_no  string         COMMENT '设备编号',
    cycle  int                COMMENT '评价数据周期',
    lane_num  int,
    create_time  timestamp    COMMENT '创建时间',
    lane_no int               COMMENT '车道编号',
    volume int                COMMENT '车道内过停止线流量(辆)',
    queue_len_max float       COMMENT '车道内最大排队长度(m)',
    sample_num int            COMMENT '评价数据计算样本量',
    stop_avg int              COMMENT '车道内平均停车次数(次)',
    delay_avg float           COMMENT '车道内平均延误时间(s)',
    stop_rate float           COMMENT '车道内一次通过率',
    travel_dist float         COMMENT '车道内检测行程距离(m)',
    travel_time_avg float     COMMENT '车道内平均行程时间'
)
comment '评价数据表'
row format delimited fields terminated by ','
stored as  textfile  location '/rtp/evaluation'
tblproperties("skip.header.line.count"="1")  ;

(二)结果展示  共9076条数据

 

五、静态分区

(一)建表语句

create external table if not exists ods_evaluation_static(
    device_no  string         COMMENT '设备编号',
    cycle  int                COMMENT '评价数据周期',
    lane_num  int,
    create_time  timestamp    COMMENT '创建时间',
    lane_no int               COMMENT '车道编号',
    volume int                COMMENT '车道内过停止线流量(辆)',
    queue_len_max float       COMMENT '车道内最大排队长度(m)',
    sample_num int            COMMENT '评价数据计算样本量',
    stop_avg int              COMMENT '车道内平均停车次数(次)',
    delay_avg float           COMMENT '车道内平均延误时间(s)',
    stop_rate float           COMMENT '车道内一次通过率',
    travel_dist float         COMMENT '车道内检测行程距离(m)',
    travel_time_avg float     COMMENT '车道内平均行程时间'
)
comment '评价历史数据表 静态分区'
partitioned by (day string)   --分区字段不能是表中已经存在的数据,可以将分区字段看作表的伪列。
row format delimited fields terminated by ','
tblproperties("skip.header.line.count"="1")  ;

注意点:

1、指定的分区字段不能是表中已经存在的数据  我这边分区字段为day  而表中没有这个字段

2、建表没有指定文件路径

(二)加载数据(有坑

注意:从HDFS中加载数据到Hive,如果直接load HDFS中的数据到Hive中,那么原HDFS数据文件就会消失在原路径,而是去了一个hive的新地方。直接load,这种行为它类似于剪切,而不是我们所希望的复制文件。 这是一个坑!!!

所以如果我们希望既可以load数据到hive,还能够保存HDFS的原文件,那么必须采用迂回策略,从HDFS先到本地,再load到Hive。比如加载HDFS中2023-05-09的数据

先从HDFS到l本地  /opt/hdfs_rtp/

[root@hurys22 conf]# hdfs dfs -get /rtp/evaluation/evaluation2023-05-09.csv /opt/hdfs_rtp/

从本地加载到Hive

load data local inpath '/opt/hdfs_rtp/evaluation2023-05-09.csv'
into  table  ods_evaluation_static
partition(day='2023-05-09');

(三)查看分区

show partitions ods_evaluation_static;

(四)查看数据

 

 六、动态分区

(一)建表语句

create external table if not exists ods_evaluation_trends(
    device_no  string         COMMENT '设备编号',
    cycle  int                COMMENT '评价数据周期',
    lane_num  int,
    create_time  timestamp    COMMENT '创建时间',
    lane_no int               COMMENT '车道编号',
    volume int                COMMENT '车道内过停止线流量(辆)',
    queue_len_max float       COMMENT '车道内最大排队长度(m)',
    sample_num int            COMMENT '评价数据计算样本量',
    stop_avg int              COMMENT '车道内平均停车次数(次)',
    delay_avg float           COMMENT '车道内平均延误时间(s)',
    stop_rate float           COMMENT '车道内一次通过率',
    travel_dist float         COMMENT '车道内检测行程距离(m)',
    travel_time_avg float     COMMENT '车道内平均行程时间'
)
comment '评价历史数据表 动态分区'
partitioned by (day string)
row format delimited fields terminated by ','
tblproperties("skip.header.line.count"="1")  ;

(二)开启动态分区

--开启动态分区功能(默认 true,开启)
set hive.exec.dynamic.partition=true;
--设置为非严格模式   nonstrict 模式表示允许所有的分区字段都可以使用动态分区
set hive.exec.dynamic.partition.mode=nonstrict;
--在每个执行 MR 的节点上,最大可以创建多少个动态分区
set hive.exec.max.dynamic.partitions.pernode=1000;
--在所有执行 MR 的节点上,最大一共可以创建多少个动态分区。默认 1000
set hive.exec.max.dynamic.partitions=1500;

(三)动态加载数据(insert overwrite)

insert  overwrite table ods_evaluation_trends partition(day)
select device_no, cycle, lane_num, create_time, lane_no, volume, queue_len_max, sample_num, stop_avg, delay_avg, stop_rate,
       travel_dist, travel_time_avg,date(create_time) day
from ods_evaluation;

注意insert overwrite的用法

insert into 与 insert overwrite 都可以向hive表中插入数据,但是insert into是直接追加到目前表中数据的尾部,而insert overwrite则会重写数据,即先删除数据,再写入数据。如果存在分区的情况,insert overwrite只重写当前分区

(四)查看动态分区

show  partitions ods_evaluation_trends;

 (五)查看数据

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/514933.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【教程】手把手教你用Clion进行STM32开发【如何优雅の进行嵌入式开发】

通过Clion进行嵌入式开发 一、工具安装 1、安装Clion 因为众所周知的原因,Clion的安装就不解释了,有需要的同学自行检索 2、安装STM32CubeMX 正常去官网下载最新版的安装就行了:STM32CubeMX - STM32Cube initialization code generator …

2673. 使二叉树所有路径值相等的最小代价(dfs+bfs)

题目描述 评论 (23) 题解 (54) 提交记录 2673. 使二叉树所有路径值相等的最小代价 难度 中等 14 给你一个整数 n 表示一棵 满二叉树 里面节点的数目,节点编号从 1 到 n 。根节点编号为 1 ,树中每个非叶子节点 i 都有两个孩子,分别是左孩子 2 …

image adaptive 3dlut based on deep learning

文章目录 image adaptive 3dlut based on deep learning1. Learning Image-adaptive 3D Lookup Tables for High Performance Photo Enhancement in Real-time2. CLUT-Net: Learning Adaptively Compressed Representations of 3DLUTs for Lightweight Image Enhancement2.1 3d…

平安大视野解读主动健康:以运动改变生命轨迹,以名医权益为健康保驾护航

“每个人都会老,这不可避免,但是能不能老的迟一点?让我们能够活到一百岁还能够运动,不需要别人照顾,这是最大的成功;而科学运动是最关键的方式。”5月6日,在平安私人银行联合平安健康举办的“平…

Echarts使用本地JSON文件加载不出图表的解决方法以及Jquery访问本地JSON文件跨域的解决方法

前言 最近需要做一个大屏展示,需要用原生html5cssjs来写,所以去学了一下echarts的使用。在使用的过程中难免碰到许多BUG,百度那是必不可少的,可是这些人写的牛头不对马嘴,简直是标题党一大堆,令我作呕&…

使用pytest和allure框架实现自动化测试报告优化

目录 -x出现一条测试用例失败就退出测试 生成测试报告json pytest: 需要安装pytest和pytest-html(生成html测试报告) pip install pytest 和 pip install pytest-html 命名规则 Pytest单元测试中的类名和方法名必须是以test开头,执行中只能找到test开头…

DeepLab v1

SEMANTIC IMAGE SEGMENTATION WITH DEEP CONVOLUTIONAL NETS AND FULLY CONNECTED CRFS 基于深度卷积网络和全连通CRFS的语义图像分割 ABSTRACT 深度卷积神经网络(DCNNs)最近在高级视觉任务中表现出了最新的性能,如图像分类和物体检测。这…

Docker | docker安装MySQL

知识目录 一、前言二、安装Docker镜像2.1 什么是docker2.2 为什么安装docker2.3 安装docker 三、Docker安装MySQL3.1 常用docker命令3.2 docker安装MySQL 四、结语 一、前言 大家好!这篇文章主要讲解 如何在Centos7中安装Docker以及Docker安装MySQL:5.7.42 。 ✨本…

深度学习模型复杂度评估(时间复杂度、空间复杂度)

目录 1、两个指标 2、复杂度对模型的影响 1、两个指标 时间复杂度和空间复杂度是衡量一个算法的两个重要指标,用于表示算法的最差状态所需的时间增长量和所需辅助空间. 在深度学习神经网络模型中我们也通过: 计算量/FLOPS(时间复杂度)即…

VS Code 常用插件推荐

VS Code 常用插件推荐 1. Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code 适用于 VS Code 的中文(简体)语言包 2. Auto Rename Tag 自动关闭标签,写 html 标签的时候可以重命名标签名。 现在 vscode 已经内置了&…

大项目内训 2023.5.11

目录 分别介绍一下消息处理相关的MQ、WebSocket、分布式事务 介绍一下异步消息传输 如何配置websocket ​编辑 oatpp是什么? cinatra是什么? 我们教育最大的缺失, 是缺乏阅读、写作和逻辑训练 佳作推荐 分别介绍一下消息处理相关的MQ、WebSocket、…

CTF-PWN学习-为缺少指导的同学而生

很抱歉,博主也是个PWN的入门者。PWN的入门不可能是无痛的。能做到的只是减少一点初学者的痛苦。这篇博客会长期维护,也会越来越好。后期还可能会在B站出视频(博主社恐,要迈出这一步可能需要好长时间)。 PWN是个啥&…

QT + OpenGL + FFmpeg写的一个全景视频播放器

临时被分配了一个任务 写一个C版本的全景视频播放器 网上搜了搜 基于前辈的基础上 写的差不多了 测试视频源是用ffmpeg拉RTSP的流 最终是要嵌入到别的一个视频播放器模块 所以解码这块我不用太关注 只要实现渲染就可以了 效果如下 左边的窗口用于输入视频源 以及显示…

dtb展开成device_node

dtb展开成device_node 文章目录 dtb展开成device_node设备树是如何传递给内核的?设备树相关结构体举例of操作函数与查找节点有关的 OF 函数1、of_find_node_by_name 函数2、of_find_node_by_type 函数3、of_find_compatible_node 函数4、of_find_matching_node_and_…

5个PPT素材、模板网站,免费下载,赶紧马住了~

推荐几个可以免费下载PPT素材的网站,建议收藏! 1、菜鸟图库 https://www.sucai999.com/search/ppt/0_0_0_1.html?vNTYwNDUx 菜鸟图库网有非常丰富的免费素材,像设计类、办公类、自媒体类等素材都很丰富。PPT模板种类很多,全部都…

Unity 坐标系

一、左手坐标系与右手坐标系 常见的三维软件都采用笛卡尔坐标系,也就是常见的xyz轴坐标系。笛卡尔坐标系可以是左手坐标系也可以是右手坐标系,如下图所示 两种坐标系是镜像对称的。而Unity采用左手系,且xyz轴的默认方向与图中的左手系完全一…

Java【网络编程1】什么是 TCP/IP 五层模型? 数据传输的封装和分用?

文章目录 前言一、网络协议分层二、数据的网络传输1, 封装2, 分用3, 实际情况 总结 前言 📕各位读者好, 我是小陈, 这是我的个人主页 📗小陈还在持续努力学习编程, 努力通过博客输出所学知识 📘如果本篇对你有帮助, 烦请点赞关注支持一波, 感…

Python+Selenium入门级自动化测试脚本编写

一、安装Selenium 安装selenium有三种方式,主要有python下的pip命令安装或者是直接下载安装包进行安装本地文件夹以及直接用pycharm直接安装相应的selenium版本。推荐使用pycharm直接配置安装相应selenium版本(此办法比pip更好用,且不用担心报…

大数据 | (六)Hadoop集群启停脚本

知识目录 一、前言二、Hadoop集群启停脚本2.1 启停脚本及其背景2.2 使用方法 三、jps脚本四、关机脚本五、结语 一、前言 hello,大家好!这篇文章是我在使用Hadoop集群时使用到的启停脚本的详细内容与感想,希望能帮助到大家! 本篇…

【ENVI】SEBS模型计算蒸散发

详细内容请关注微信公众号:夫也的笔记 #01. ENVI软件SEBS插件介绍 ENVI是利用一种能够提供完整图像处理的功能强大的结构性程序设计语言,ENVI的运行需要IDL的支持,IDL可以为数据的交互式分析和可视化提供一个计算环境,在IDL开发环…