Hive---分区表和分桶表

2023-11-12

分区表和分桶表区别如下:

 1、分区使用的是表外字段,需要指定字段类型;分桶使用的是表内字段,已经知道字段类型,不需要再指定。

 2、分区通过关键字partitioned by(partition_name string)声明,分桶表通过关键字clustered by(column_name) into 3 buckets声明。

 3、分区划分粒度较粗,分桶是更细粒度的划分、管理数据,可以对表进行先分区再分桶的划分策略。

 4、分区是个伪列,只对应着文件存储路径上的一个层级。

一、hive分区表

  hive表分区是一种逻辑上的数据划分,分区字段使用的是表外字段,并且不保存数据,只是hdfs文件存储目录的一个层级。一个表可以指定多个分区,我们在插入数据的时候指定分区,就是新建一个子目录,或者在原来目录的基础上来添加数据。分区目的主要是避免全表扫描,从而提升查询和计算效率。按分区类型划分,可以分为静态分区、动态分区和混合分区。
分区表创建:

create table if not exists tab_partition(
id int,
name string,
age int
)
PARTITIONED BY (year string , month string)
row format delimited 
fields terminated by ','
stored as orc
;

静态分区加载数据时要指定分区:

load data local inpath '/data/test.txt' into table tab_partition partition(year='2019',month='05'); 

  在使用静态分区的时候,加载数据要指定分区,这个操作过程比较麻烦;而动态分区不会有这些不必要的操作,动态分区可以根据查询得到的数据动态地分配到分区中去,动态分区与静态分区最大的区别是不指定分区目录,由系统自己进行过选择。
  动态分区模式可以分为严格模式(strict)和非严格模式(non-strict),二者的区别是:严格模式在进行插入的时候至少指定一个静态分区,而非严格模式在进行插入的时候可以不指定静态分区。

首先启动动态分区的功能,在hive-site.xml文件中进行如下的配置:

<property>
    <name>hive.support.concurrency</name>
    <value>true</value>
</property>
<property>
    <name>hive.exec.dynamic.partition.mode</name>
    <value>nonstrict</value>
</property>
<property>
    <name>hive.txn.manager</name>
    <value>org.apache.hadoop.hive.ql.lockmgr.DbTxnManager</value>
</property>
<property>
    <name>hive.compactor.initiator.on</name>
    <value>true</value>
</property>
<property>
    <name>hive.compactor.worker.threads</name>
    <value>1</value>
</property>
<property>
    <name>hive.enforce.bucketing</name>
    <value>true</value>
</property>

动态分区加载数据不能使用load,要使用insert into方式:

insert into tab_partition partition(year,month) select id,name,age,year,month from part_tmp;

混合分区加载数据方式:

insert into tab_partition partition(year='2019',month) select id,name,age,month from part_tmp;

二、hive分桶表

  单个分区或者表中的数据量越来越大,当分区不能更细粒的划分数据时,所以会采用分桶技术将数据更细粒度的划分和管理。分桶表使用的是表内字段。

分桶表创建:

create table if not exists tab_bucket(
id int,
name string,
age int
)
clustered by (id) into 4 buckets
row format delimited
fields terminated by ','
stored as orc
;

分桶表加载数据要使用insert into方式:

需要确保reduce 的数量与表中的bucket 数量一致,有如下两种方式:

//方式一:让hive强制分桶,自动按照分桶表的bucket进行分桶(推荐)
set hive.enforce.bucketing = true;
insert into table tab_bucket select id,name,age from tmp;
//方式二:手动设置reduce数量,并在 SELECT 后增加CLUSTER BY 语句
set mapreduce.job.reduces = num;
set mapreduce.reduce.tasks = num;
insert into table tab_bucket select id,name,age from tmp cluster by id;

分桶表数据查询:

//查询全部数据
select * from tab_bucket;
//抽样查询,按id的哈希值对4取余,查询桶1的数据
select * from tab_bucket tablesample(bucket 1 out of 4 on id);

分区分桶表创建:

create table if not exists tab_partition_bucket(
id int,
name string,
age int
)
partitioned by (province string)
clustered by (id) sorted by (id desc) into 3 buckets
row format delimited 
fields terminated by ','
stored as orc
;

原文:https://www.cnblogs.com/jvStarBlog/p/10890957.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hive---分区表和分桶表 的相关文章

  • 公网远程访问宝塔面板和网页【内网穿透】

    1 ngrok 限制带宽 不限制流量 进入ngrok官网 Sunny Ngrok内网转发内网穿透 国内内网映射服务器 1 注册 2 开通隧道 3 穿透网页 1 配置ngrok 输入网页本地地址和端口号 2 运行ngrok sunny cli
  • IntelliJ IDEA下载安装教程(超详细图解)

    1 IDEA的下载 官网链接 https www jetbrains com idea l 1 点击上面链接进入官网 点击Developer Tools 再点击 Intellij IDEA 2 点击Download 进入IDEA下载界面 3
  • Vue:数据双向绑定和v-系列指令

    Vue js是当下最火的一款前端框架了 学习的时候要多动手实践以帮助理解 我是通过例子来学习的 这样记的快一些 目录 Vue js介绍 如何引入Vue 何为声明式渲染 如何实现 文本插值 message v html v bind 绑定元素
  • 数组的添加和删除过滤方法总结es6 filter()

    es6 filter 数组过滤方法总结 Array every x gt x 是每一个都要满足 Array some x gt x 是有一个满足 Array find findIndex 返回符合条件的第一个值 Array filter 过
  • C语言,文件定位问题详解

    最近在完成上机题碰到文件操作 要求能够修改某一行的数据 关于这个问题 我们自然就会想到用fseek来定位然后修改这一行的内容 可是问题就来了 具体啥问题请往下看 比如说text txt的内容为 这时我想把第二内容改为24 很明显用fseek
  • union关键字,理解-应用场景-优点

    C语言共用体 C语言union用法 详解 biancheng net 理解为 需求场景 某变量可具有多重身份 然而在使用某变量时 它只能确定为其中一种身份 union关键字 这种好处是 既可以满足需求 又可以不浪费内存 union关键字创建
  • Spring MVC 起步

    一 MVC 首先http的请求到达前端控制器 前端知道具体的请求 将代理给到控制器 控制器了解具体的业务细节 因此调用业务逻辑 生成业务数据 并将业务数据返回给前端控制器 然后前端控制器将数据分发给我们的业务视图 由业务视图来呈现业务页面返
  • JS对于字符串的切割截取

    1 slice start end 方法 start 起始索引 开始位置 end 终止索引 结束位置 如果某个参数为负 则从字符串的结尾开始计数 如果省略第二个参数 则该方法将裁剪字符串的剩余部分 var str Apple Banana
  • Hash 函数及其重要性

    不时会爆出网站的服务器和数据库被盗取 考虑到这点 就要确保用户一些敏感数据 例如密码 的安全性 今天 我们要学的是 hash 背后的基础知识 以及如何用它来保护你的 web 应用的密码 申明 密码学是非常复杂的一门学科 我不是这方面的专家
  • 如何在 Python 中开始机器学习?(小白必看)

    其实学习机器学习的最好方法是设计和完成小项目 Python 是一种流行且功能强大的解释型语言 与 R 不同 Python 是一种完整的语言和平台 可用于研究和开发以及开发生产系统 还有很多模块和库可供选择 提供多种方式来完成每项任务 开始使
  • INTERNALERROR> AttributeError: ‘CollectReport‘ object has no attribute ‘description‘问题解决

    隔一段时间没写脚本 今天又写新的脚本 写完之后执行报错 INTERNALERROR gt AttributeError CollectReport object has no attribute description 执行了下之前写的脚本
  • adadelta算法_机器学习中的优化算法(3)-AdaGrad, Adadelta(附Python示例)

    import math import numpy as np import matplotlib pyplot as plt RATIO 3 椭圆的长宽比 LIMIT 1 2 图像的坐标轴范围 class PlotComparaison o
  • 在分页式管理方式下实现主存空间的分配和回收

    转自 在分页式管理方式下采用位示图来表示主存分配情况 实现主存空间的分配和回收 呱呱乐编程 CSDN博客 方便学习 如有侵权 联系本人 立即删除 include
  • 5e服务器信息被拦截,5e登陆csgo总被拦截什么意思(5e进csgo提示被拦截)

    办法1 验证游戏完整性重启steam 2 重启计算机 3 可能是系统兼容性问题win10 64 建议更换系统 4 到游戏目录里用管理员身份启动试试 希望能够帮助你 望采纳 好像是进程里有多个steam客户端进程 或者你5e配置的游戏路径不对
  • Vue使用AntV/G2例子

  • vue项目文件导入导出的方法总结

    文件导入 点击文件上传时点击按钮的结构 用element ui组件的el upload组件 点击时的方法需要传入一个file文件的参数下来 按钮结构
  • vue3全局引入element-plus后使用 Message 消息提示

    import ElementPlus from element plus const app createApp App app use ElementPlus mount app 使用confirm的方式 proxy confirm
  • 毕业设计-基于深度学习的实例分割研究

    目录 前言 课题背景和意义 实现技术思路 一 实例分割研究现状 二 实例分割的特殊应用 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个学
  • Python爬取头像网站图片

    import urllib request from urllib import request from bs4 import BeautifulSoup x 1 url https www woyaogexing com touxian

随机推荐

  • Spring SringMVC之配置文件配置学习

    废话不多说 先来一个web项目web xml实际例子 web xml
  • 学习如何使用github

    转载自 http www open open com lib view open1396580186465 html 以提交的一次开源代码为例 教会你步入开源的世界 1 首先登陆到https github com平台上注册一个自己的账号 这
  • [图像处理]YUV图像处理入门3

    5 yuv420格式的灰阶测试图 本程序中的函数主要是为YUV420P视频数据流的第一帧图像添加边框 函数的代码如下所示 file 5 yuv graybar cpp author luohen brief gray scale bar o
  • 【云原生之Docker实战】容器的资源限制使用方法

    云原生之Docker实战 容器的资源限制使用方法 一 容器资源限制介绍 二 检查本地Docker状态 三 查看本地容器系统相关文件 1 查看容器配置目录 2 查看内存相关文件 3 查看cpu相关文件 四 容器内存资源的限制 1 查看内存限制
  • Linux下Shell脚本编程简介

    最近经常使用Linux 感觉太频繁地敲击键盘有些累了 于是想到了Shell脚本 可以把太多的命令写成一个脚本 这样每次执行一遍sh文件 就可以省去了敲击键盘的时间 还可以保护键盘哦 于是在网上搜了一些有关Linux下脚本编程的内容 Shel
  • Spring Data MongoDB 更新整个对象

    第一步 在pom xml文件中引入下述依赖 当前Spring Boot的版本为 2 7 6
  • 益聚星荣:一文看懂,为什么有的投资人讨厌元宇宙,有的却爱死它了

    元宇宙里没有新东西 或许十年之后 它就会成为未来的互联网 在我们身边无处不在 再一次 周鸿祎对热潮中的科技新概念表达了不看好 11月20日 周鸿祎做客央视 对话 节目时 直言元宇宙 代表着人类的没落 在他的理解中 元宇宙的一切东西都还是虚幻
  • VS2019下OpenCV3.4.9的环境搭建

    VS2019下OpenCV3 4 9的环境搭建 目录 VS2019下OpenCV3 4 9的环境搭建 1 首先下载OpenCV3 4 9 2 配置环境变量 1 修改用户变量 2 修改系统变量 3 新建VS工程并进行设置 1 设置包含目录 2
  • 如何查看服务器端屏蔽的网站,服务器怎么查看和屏蔽端口号

    服务器怎么查看和屏蔽端口号 内容精选 换一换 Linux云服务器一般采用SSH连接方式 使用密钥对进行安全地无密码访问 但是SSH连接一般都是字符界面 有时我们需要使用图形界面进行一些复杂操作 本文以Ubuntu 18 04操作系统为例 介
  • Makefile 与 GCC G++ 入门

    Makefile和g 学习笔记 g 部分 学习C和C 的同学应该都知道 gcc是一款跨平台的C C 编译器 可以在Linux Windows平台下使用 具有十分强大的功能 结构也十分灵活 并且可以通过不同的前端模块来支持各种语言 如Java
  • HTTPS详细总结

    最近学习htpps 下面来总结一下 以下内容多来源于网上 出错不详了 仅仅当做自己做笔记用 HTTPS详解 很多人可能不能很好的理解HTTPS 不能理解为什么HTTPS的代码要那样写 因此我写了这片博客 希望能让更多人了解HTTPS 密码
  • java Excel文件上传 解析入库

    ApiOperation 上传文件 RequestMapping value uploadFile method RequestMethod POST public BusinessResult uploadFile RequestPara
  • 贪心算法之背包问题

    贪心算法之背包问题 背包问题是算法的经典问题 分为部分背包和0 1背包 主要区别如下 部分背包 某件物品是一堆 可以带走其一部分 0 1背包 对于某件物品 要么被带走 选择了它 要么不被带走 没有选择它 不存在只带走一部分的情况 部分背包问
  • Linux下的命令学习--dd命令

    Linux dd 命令用于读取 转换并输出数据 dd 可从标准输入或文件中读取数据 根据指定的格式来转换数据 再输出到文件 设备或标准输出 使用方法 dd if xx of xx bs xx count xx skip xx seek xx
  • AcWing 482. 合唱队形

    N位同学站成一排 音乐老师要请其中的 N K 位同学出列 使得剩下的K位同学排成合唱队形 合唱队形是指这样的一种队形 设K位同学从左到右依次编号为1 2 K 他们的身高分别为T1 T2 TKT1 T2 TK 则他们的身高满足T1 lt
  • c语言中e的n次方怎么打,C语言中N次方怎么打

    满意答案 lawq0364t 2020 05 11 采纳率 52 等级 7 已帮助 2761人 有两个函数可以实现 double pow double x double y double pow10 int p 下面是这两个函数的使用方法
  • Codeium的使用

    官网 CodeiumCodeium offers best in class AI code completion search all for free It supports over 40 languages and integrat
  • 连续型随机变量密度函数与累积密度函数

    1 连续性随机变量的概率密度函数 注意 f x 是非负的可积函数 以及在负无穷到正无穷区间内的累积概率为1 累积概率的取值区间是从负无穷到正无穷 但是概率密度函数的取值并不是从负无穷到正无穷 尤其是在实际问题中 比如说报童模型中的报纸订购量
  • Python异常值预警

    coding utf 8 基于3sigma的异常值检测 import numpy as np import pandas as pd import matplotlib pyplot as plt 导入绘图库 n 3 n sigma cat
  • Hive---分区表和分桶表

    分区表和分桶表区别如下 1 分区使用的是表外字段 需要指定字段类型 分桶使用的是表内字段 已经知道字段类型 不需要再指定 2 分区通过关键字partitioned by partition name string 声明 分桶表通过关键字cl