Hive关于数据表的增删改(内部表、外部表、分区表、分桶表 数据类型、分隔符类型)

建表

基本语句格式

CREATE [external] TABLE if not exists student #默认建立内部表,加上external则是建立外部表(id int COMMENT'学号',sname string COMMENT'用户名',age int COMMENT'年龄')#字段名称,字段类型,字段描述信息 COMMENT '记录学生学号'#表的描述信息PARTITION BY (department string COMMENT'根据部门分区')#设定分区的字段名称,此字段为全新字段,不得是表中任意字段;clustered BY (id,age)#指定分桶的字段,此字段必须来自表中字段;sorted BY (id ASC, age DESC)#指定一个桶内的排序规则(按照id升序,按照年龄降序);INTO 9 buckets #指定桶的个数为9ROW FORMAT delimited fields terminated BY '\t' #指定逗号为列分隔符collection items terminated by ',' #集合中的元素间的分隔符map keys terminated by ':' #元素内部的分隔符lines terminated BY '\n'#指定换行符为行分隔符stored AS textfile #指定最终表数据的存储格式,默认是textfile,还可以是rcfile(行列结合的格式)/parquet(压缩格式)location '/user/student' #指定hive上表在hdfs上的存储路径,默认的是配置路径下

 

1.内部表

CREATE TABLE if not exists student(id int ,sname string ,age int) 
ROW FORMAT delimited FIELDS terminated BY ','
LINES terminated BY '\n';

 

2.外部表

CREATE external TABLE if not exists student(id int ,sname string ,age int) 
ROW FORMAT delimited FIELDS terminated BY ','
LINES terminated BY '\n' 
location '/user/student';

注意:

建外部表之后,若是从HDFS上加载数据的话(本质上是移动数据),会将数据从原路径移动到建表的路径下,

若两者路径不一致,则会导致其他部门的代码无法获取到数据,

因此,建立外部表的时候一定要location路径,且该路径与数据的原路径保持一致,

否则,会造成工作的重大失误!!!

 

3.分区表

CREATE TABLE if not exists student(id int ,sname string ,age int) 
PARTITION BY (city string ) 
ROW FORMAT delimited FIELDS terminated BY ','
LINES terminated BY '\n';

 

4.分桶表

CREATE TABLE if not exists student(id int ,sname string ,age int) 
clustered BY (id,age) 
sorted BY (id ASC, age DESC) 
INTO 9 buckets 
ROW FORMAT delimited FIELDS terminated BY ','
LINES terminated BY '\n';

 

5.复制表

CREATE TABLE if not exists student01 LIKE student;
  • 复制一个表结构和student一样的表,不复制数据
  • 复制表student01是内部表还是外部表与student没关系,只与创建过程中是否指定了关键字external

 

6.查询表

CREATE TABLE if not exists student01 AS select id,sname FROM student;

查询出student表中的字段存入新建的表中,就叫查询表

 

 

数据类型详解

简单类型:

  • string
  • float
  • int (4个字节的整数)
  • bigint (8个字节的整数)
  • smallint (2个字节的整数)
  • tinyint (1个字节的整数)

 

复杂类型:

1)array:数组,存储多个元素,且元素是相同的数据类型,比如:beijing,shenzhen,wuhan

CREATE TABLE if not exists student(id int ,city array<string>) 
ROW FORMAT delimited fields terminated BY '\t' 
collection items terminated by ',';

查找时通过下标定位

SELECT city[0] FROM student; #输出:beijingSELECT city FROM student; #输出:[beijing,shenzhen,wuhan]

2)map:映射,比如:Chinese:80,math:90

CREATE TABLE if not exists student(id int ,score map<string,int>) 
ROW FORMAT delimited fields terminated BY '\t' 
collection items terminated by ',' 
map keys terminated by ':';

查找时通过key定位

SELECT score FROM student; 
#输出:{Chinese:80,math:90} SELECT score['math'] FROM student; #输出:90

3)struct:结构体,存储多个元素,元素类型可以不同,比如:mengfan,man,180

CREATE TABLE if not exists student(id int ,remarks struct<name:string,sex:string,height:int>) 
ROW FORMAT delimited fields terminated BY '\t' 
collection items terminated by ','

查找时通过.查找具体的信息

SELECT remarks FROM student; #输出:{name:mengfan,sex:man,height:180}SELECT remarks.height FROM student; #输出:180

 

分隔符详解

1)列分隔符、元素分隔符、元素内分隔符、行分隔符的顺序

ROW FORMAT delimited fields terminated BY '\t' #指定空格为列分隔符

collection items terminated by ',' #集合中的元素间的分隔符

map keys terminated by ':' #元素内部的分隔符

lines terminated BY '\n'#指定换行符为行分隔符

 

比如:有一行数据: 0001 黄海霞,孟凡 语文:80,数学:90

空格是两列数据的分隔符,逗号是两个元素之间的分隔符,冒号是元素内部的分隔符

三种分隔符的顺序为:由外到内,顺序不可改变,行分隔符在最后

 

2)多字节的分隔符

hive默认只能解析单字节分隔符,数据:0001::黄海霞::80

 

方法1:修改serde library,默认是lazysimpleserde,改为RegexSerDe

create table stu (id int,sname string,score string) 
row format serde 'org.apache.hadoop.hive.serde2.RegexSerDe' #指定序列化类库,正则表达式 
with serdeproperties('input.regex'='(.*)::(.*)::(.*)' #定义输入的正则表达式 ,'output.format.string'='%1$s %2$S %3$S'); #定义输出的结果

注意:

  • 数据中有多少个分隔符,表达式中就要有多少个(.*)::(.*)::(.*)
  • 分隔符若是|,则需要用\\转义,(.*)\\|\\|(.*)\\|\\|(.*)
  • 输出结果中的 %1$s 个数要与输入中的(.*)的个数对应
  • (.*)代表的是任意字符
  • $s 是占位符

方法2:修改hive底层源码,影响较大,其他使用单字节的文件容易出错,不推荐使用

 

 

查看表

SHOW tables#查看数据表 SHOW tables in hd_hive; #查看hd_hive库中的数据表 SHOW tables LIKE 's*'; #查看表名是以s开头的表 SHOW create table student; #查看student表的建表语句 SHOW PARTITIONS student; #查看student表的分区 SHOW PARTITIONS student PARTITION(city='beijing'); #查看student表的beijing分区DESC student; #查看表的字段信息 DESC formatted student; #查看元数据库中,表的字段信息(已格式化) DESC extended student; #查看元数据库中,表的详细信息(未格式化)

 

删除表

DROP TABLE IF EXISTS student; #删除表,包括表结构和表数据 TRUNCATE TABLE IF EXISTS student; #清空表,保留表结构,删除表数据
  • 内部表:删除的时候,元数据库会删除,且HDFS上的原始数据也会被删除;
  • 外部表:删除的时候,元数据库会删除,但HDFS上的原始数据不会被删除;

 

修改表

1.修改表名

ALTER TABLE student RENAME TO stu; #修改表名,student改为stu

2.修改表字段信息

ALTER TABLE student ADD COLUMNS(department string); #添加字段 ALTER TABLE student REPLACE COLUMNS(id int ,sname string); #替换表的所有列的字段 ALTER TABLE student CHANGE sname tname string; #修改字段名称,需同时指定新字段的类型ALTER TABLE student CHANGE age age string; #修改字段类型(有限制)int能转化成string,只能小转大,不可逆;但是hive1.2.2版本中没有这个限制

 

3.修改表分区信息

ALTER TABLE student ADD if not exists PARTITION (city='shanghai'); #添加分区 ALTER TABLE student ADD if not exists PARTITION (city='shenzhen') location '/user/student/shenzhen';#添加分区的同时指定路径 ALTER TABLE student DROP if exists PARTITION (city='beijing'); #删除分区

 

修改分区:

ALTER TABLE student PARTITION (city='shenzhen') SET location '/user/shenzhen'; #修改分区的路径 ALTER TABLE student PARTITION (city='shenzhen') ENABLE no_drop; #防止分区被删除 ALTER TABLE student PARTITION (city='shenzhen') ENABLE offline; #防止分区被查询

 

 

其他辅助命令

SHOW CREATE TABLE student; # 查看建表语句,将默认语句自动补全后的建表语句

 

 

 

 

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

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

相关文章

LeetCode 1496. 判断路径是否相交(set)

1. 题目 给你一个字符串 path&#xff0c;其中 path[i] 的值可以是 ‘N’、‘S’、‘E’ 或者 ‘W’&#xff0c;分别表示向北、向南、向东、向西移动一个单位。 机器人从二维平面上的原点 (0, 0) 处开始出发&#xff0c;按 path 所指示的路径行走。 如果路径在任何位置上出…

python数据框循环生成_python - 如何在 Pandas 的for循环迭代中创建多个数据框?

我需要在熊猫中创建一个函数&#xff0c;该函数将单个数据框作为输入&#xff0c;并根据特定条件返回多个数据框作为输出。 (请检查下面的示例以了解情况)。我很难弄清楚如何做。我需要一些专家的编码建议。范例1&#xff1a;输入 100列的数据框输出数据帧1的前10&#xff05;列…

除去数组中的空字符元素array_filter()

除去数组中的空字符元素 <?php$str1_arrayarray(电影618,,http://www.movie618.com,,1654,);$str1_arrayarray_filter($str1_array);print_r($str1_array); ?> 显示结果&#xff1a; Array( [0] > 电影618 [2] > http://www.movie618.com [4] > …

Hive的数据加载与导出

普通表的加载 1.load方式 load data [local] inpath [源文件路径] into table 目标表名; 从HDFS上加载数据&#xff0c;本质上是移动文件所在的路径 load data inpath /user/student.txt into table student; 从本地加载数据&#xff0c;本质上是复制本地的文件到HDFS上 lo…

电压压力蕊片_一文让你知道什么是压力变送器

一般来说&#xff0c;压力变送器主要由测压元件传感器(也称作压力传感器)、测量电路和过程连接件三部分组成。它能将测压元件传感器感受到的气体、液体等物理压力参数转变成标准的电信号(如4~20mADC等)&#xff0c;以供给指示报警仪、记录仪、调节器等二次仪表进行测量、指示和…

LeetCode 1497. 检查数组对是否可以被 k 整除(余数配对)

1. 题目 给你一个整数数组 arr 和一个整数 k &#xff0c;其中数组长度是偶数&#xff0c;值为 n 。 现在需要把数组恰好分成 n / 2 对&#xff0c;以使每对数字的和都能够被 k 整除。 如果存在这样的分法&#xff0c;请返回 True &#xff1b;否则&#xff0c;返回 False 。…

C# 多线程编程 ThreadStart ParameterizedThreadStart

原文地址&#xff1a;http://club.topsage.com/thread-657023-1-1.html 在实例化Thread的实例&#xff0c;需要提供一个委托&#xff0c;在实例化这个委托时所用到的参数是线程将来启动时要运行的方法。在.net中提供了两种启动线程的方式&#xff0c;一种是不带参数的启动…

Hive的查找语法

基本语法格式&#xff1a; select [all | DISTINCT ] a.id, a.sname, a.age from student a join student02 b on a.id b.id # 匹配函数 where a.age >18 # 条件语句 group by a.age having a.age >18 # 分组,having:分组后的筛选条件 order by a.age # 全局排序 sort …

动词ing基本用法_动词ing的用法

动词ing的用法2020-09-14 11:41:52文/董月表示现在(指说话人说话时)正在发生的事情&#xff1b;习惯进行&#xff1a;表示长期的或重复性的动作&#xff0c;说话时动作未必正在进行&#xff1b;表示渐变的动词有&#xff1a;get&#xff0c;grow&#xff0c;become&#xff0c;…

LeetCode 1498. 满足条件的子序列数目(排序+二分查找+快速幂)

1. 题目 给你一个整数数组 nums 和一个整数 target 。 请你统计并返回 nums 中能满足其最小元素与最大元素的 和 小于或等于 target 的 非空 子序列的数目。 由于答案可能很大&#xff0c;请将结果对 10^9 7 取余后返回。 示例 1&#xff1a; 输入&#xff1a;nums [3,5,…

Matlab编程学习笔记【待续】

最近想用Matlab进行数据分析&#xff0c;算法性能测试&#xff0c;平时由于用的是C、C&#xff0c;因此很多习惯都一时改不了&#xff0c;这里自己列出来一些Matlab中明显不同的地方。 矩阵单元元素访问方式&#xff1a;A(1,2)---A[1][2]选取矩阵某个行或者列&#xff1a;A(:,1…

Hive的视图

创建视图 create view my_view as select * from student; 注意&#xff1a; hive中的视图仅仅是存储了SQL语句的快捷方式&#xff0c;在查询的时候才执行&#xff1b;hive中的视图只有逻辑视图&#xff0c;没有物化视图&#xff1b;hive中的视图只支持查询&#xff0c;不支…

animation 先执行一次 在持续执行_这一次,彻底弄懂 JavaScript 执行机制

本文来源&#xff1a;ssssyokihttps://juejin.im/post/6844903512845860872不论你是javascript新手还是老鸟&#xff0c;不论是面试求职&#xff0c;还是日常开发工作&#xff0c;我们经常会遇到这样的情况&#xff1a;给定的几行代码&#xff0c;我们需要知道其输出内容和顺序…

[scikit-learn 机器学习] 5. 多元线性回归

文章目录1. 多元线性回归2. 多项式回归3. 正则化4. 线性回归应用举例&#xff08;酒质量预测&#xff09;4.1 数据预览4.2 模型验证5. 梯度下降法本文为 scikit-learn机器学习&#xff08;第2版&#xff09;学习笔记1. 多元线性回归 模型 yαβ1x1β2x2...βnxny \alpha\bet…

mac笔记本修改 mysql 的密码

第一种 mysql版本&#xff1a;5.7.17 1.首先我们要关闭mysql服务 sudo /usr/local/mysql/support-files/mysql.server stop 2.我们要用安全模式启动mysql sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables 3.使用root账号登录mysql服务 /usr/local/mysql/bin/mysql …

LeetCode 831. 隐藏个人信息

1. 题目 给你一条个人信息字符串 S&#xff0c;它可能是一个 邮箱地址 &#xff0c;也可能是一串 电话号码 。 我们将隐藏它的隐私信息&#xff0c;通过如下规则: 电子邮箱 定义名称 name 是长度大于等于 2 &#xff08;length ≥ 2&#xff09;&#xff0c;并且只包含小写…

oa项目经验描述_简历中项目经验模版

项目名称&#xff1a;OA(办公自动化)开发工具&#xff1a;MyEclipse 8.6 , Oracle 11g , Tomcat 6.0.18项目描述(1, SSH框架版)&#xff1a;OA主要功能模块分为首页Portlet展示、协同审批、协同工作、日历、资源管理、知识中心、新闻中心、通讯录、系统管理。是一套很好的办公自…

分离

web2.0到处都是分离与聚合的思想&#xff1a; jquery实现了表现层的行为与内容的分离 zendframework为首的mvc架构实现了逻辑架构的控制、模块、表现层的分离 mysql为例的master-slave架构实现了服务与备份的分离 hadoop为首的虚拟化架构实现了单点计算与群体计算的结合 css实现…

hive-内置函数(常用内置函数汇总)

show functions; #查看所有内置函数&#xff0c;共271个 show function sum; #查看sum函数的描述信息 show function extended sum; #查看内置函数的描述信息和举例的使用方法 举例数据表&#xff1a;stu id name address score credit 01 huang hebi,changzhou,dalian …

LeetCode 828. 统计子串中的唯一字符(中心扩展)

1. 题目 我们定义了一个函数 countUniqueChars(s) 来统计字符串 s 中的唯一字符&#xff0c;并返回唯一字符的个数。 例如&#xff1a;s “LEETCODE” &#xff0c;则其中 “L”, “T”,“C”,“O”,“D” 都是唯一字符&#xff0c;因为它们只出现一次&#xff0c;所以 coun…