hive的数据定义之创建数据库和表
1、对数据库的操作
create database hive_db //创建数据库hive_db
create table hive_db.test(字段内容及其格式省略) //在数据库hive_db中创建test表
create database student_db location '/user/hive/student.db' //创建数据库student_db,但是在hdfs中显示student.db,在hive控制端中显示studentdb(在有location的情况下)
create database if not exists hive_db
show databases like 'hive*' //结果为hive_db
drop database hive_db //这种方式只能删除空数据库
drop database studentdb casecade //强制删除非空数据库
describe database hive_db //显示数据库的信息
create database teacherdb comment "数据库teacherdb的备注"
2、对表的操作
create table if not exists hive_db.t1(字段) //在数据库hive_db中创建表t1
show tables in hive_db like "t*" //在数据库hive_db中寻找以t开头的表。
create table student1 as select * from stu; //复制表及其数据
describe extended records; //查看表信息
describe formatted records //查看表详细信息
2.1、内部表与外部表的相互转换:
alter table student set tblproperties("EXTERNAL"="TRUE"); //内部表转换为外部表
alter table student set tblproperties("EXTERNAL"="FALSE"); //外部表转换为内部表
2.2、分区表(分区在hdfs上其实是目录,分区名不是表结构中的字段名而是在创建表和分区时另外加的):
create table stu_partition(id int,name string)
partitioned by (month string)
row format delimited fields terminated by '\t';
此表名为stu_partition按照月份来分区。
上传数据到分区表:
load data local inpath '/home/hdc/Document/student1.txt' into table stu_partition partition(month="201906");
分区表查找:
select * from stu_partition; //查找分区表中的所有记录;
select * from stu_partition where month="201906" //查找分区表中分区名201906中的所有记录
查看分区:
show partitions stu_partition;
增加分区:
alter table stu_partition add partition (month="201908");
alter table stu_partition add partition (month="201909") partition (month="201910");
删除分区:
alter table stu_partition drop partition(month="201908");
alter table stu_partition drop partition(month="201909"),partition (month="201910");
ps:二级分区指的是2个分区字段,按照字段的顺序来设置分区顺序,例如:partition(month="201909",day="01")就是一个二级分区,其目录结构是day文件夹是month文件夹的子文件夹。
利用Hadoop和hive命令创建分区的区别:
其实Hadoop命令创建分区就是在数据仓库中的表下创建一个文件夹,若将数据导入Hadoop命令创建的分区,再利用hive的select语句查询,将查询不到结果。这是因为Hadoop命令创建的分区在hive中没有关于此分区的元数据信息。
而利用hive命令创建的分区不仅会在hdfs上的hive数据仓库中创建相应的文件夹,而且还将此文件夹在hdfs上的信息(元数据)存储在hive中的matestore数据库中。
解决方法:
(1)msck repair table stu_partition;
(2)alter table stu_partition add partition(month="201911");
//此方法为分区表在hdfs上创建文件夹和在hive中创建此文件夹的元数据,之前因为利用Hadoop命令手动创建了文件夹故现在只需创建元数据。
(3)正常上传数据即load data local inpath '/home/hdc/Document/student1.txt' into table stu_partition partition(month="201911");
2.3、分桶表
分区表是针对数据的存储路径,分桶表针对的是数据文件。其中分区字段是表外字段,而分桶字段是表内字段。
create table stu_bucket(
id int,
name string
)clustered by (id) into 4 buckets
row format delimited fields terminated by '\t';
上传数据到分桶表只能通过insert方法如下例所示:
insert into table stu_bucket
select *from stu_temp;
利用分桶表对数据进行抽样查询(桶数为z):
select * from stu_bucket tablesample(bucket x out of y on id)
注意:x<=y,z%y==0 || y%z==0
抽样数n=z/y
从第x桶开始抽取n桶,第一个抽取的是第x桶,第二个桶是x+y
注意:数据块抽样,按照数据块的百分比抽样,若表的数据大小小于普通的块大小,那么将会返回所有行。
3、对表的操作
删除表:
drop table if exists stu_partition;
修改表:
表重命名:alter table stu_partition rename to student_partition;
修改表中列信息:alter table student_partition change columns id student_id int;
增加列:alter table student_partition add columns(
ClassId int commet "备注信息",
ClassName string comment "备注信息"
);
删除或者替换列:alter table student_partition replace columns(
id string commet "备注信息",
name string commet "备注信息"
);//此种替换是指将所用列全部删除再来新建以上两列。、
PS:alter语句改变的是表的元数据信息而不是真正的数据。
hive的数据定义之创建数据库和表的更多相关文章
- Hive 官方手册翻译 -- Hive DDL(数据定义语言)
Hive DDL(数据定义语言) Confluence Administrator创建, Janaki Lahorani修改于 2018年9月19日 原文链接 https://cwiki.apache ...
- 初学者使用MySQL_Workbench 6.0CE创建数据库和表,以及在表中插入数据。
标签: mysqlworkbench数据库 2013-10-09 20:17 19225人阅读 评论(14) 收藏 举报 分类: mysql(1) 版权声明:本文为博主原创文章,未经博主允许不得转 ...
- 第16课-数据库开发及ado.net-数据库SQl,创建数据库和表,增删改语句,约束,top和Distinct,聚合函数介绍
第16课-数据库开发及ado.net 数据库SQl,创建数据库和表,增删改语句,约束,top和Distinct,聚合函数介绍 SQL语句入门(脚本.命令) SQL全名是结构化查询语言(Structur ...
- 创建数据库和表的SQL语句【转】
创建数据库和表的SQL语句 转至http://www.cnblogs.com/philanthr/archive/2011/08/09/2132398.html 创建数据库的SQL语句: 1 crea ...
- ylb:创建数据库、表,对表的增查改删语句
ylbtech-SQL Server:SQL Server-创建数据库.表,对表的增查改删语句 SQL Server 创建数据库.表,对表的增查改删语句. 1,ylb:创建数据库.表,对表的增查改删语 ...
- sqliteExpert软件使用(创建数据库和表)
sqliteExpert是sqlite数据库的可视化操作软件,通过该软件可以进行可视化的创建数据库以及表,免去了复杂的建表语句.首先在下面地址下载该软件http://www.ddooo.com/sof ...
- Adobe AIR中使用Flex连接Sqlite数据库(1)(创建数据库和表,以及同步和异步执行模式)
系列文章导航 Adobe AIR中使用Flex连接Sqlite数据库(1)(创建数据库和表) Adobe AIR中使用Flex连接Sqlite数据库(2)(添加,删除,修改以及语句参数) Adobe ...
- centos环境下创建数据库和表的方法
centos环境下创建数据库和表的方法 //查询数据库的命令: mysql> SHOW DATABASES; +--------------------+ | Database ...
- MySQL数据库实验:任务一 创建数据库和表
目录 任务一 创建数据库和表 [实训目的与要求] [实训原理] [实训步骤] 一.熟悉MySQL环境 二.利用MySQL命令行窗口创建数据库及表 三.利用界面工具创建数据库及表 任务一 创建数据库和表 ...
随机推荐
- 【HDOJ6625】three arrays(Trie树,贪心)
题意:给定两个长均为n的序列a和b,要求两两配对,a[i]和b[j]配对的值为a[i]^b[j],求字典序最小的配对后的值序列 n<=1e5,a[i],b[i]<2^30 思路: 做法一: ...
- AT3576 E Popping Balls——计数思路
题目:https://code-festival-2017-qualb.contest.atcoder.jp/tasks/code_festival_2017_qualb_e 题解:https://w ...
- Java 设计模式之 策略模式
思维导图: 我们先来看 STRATEGY 设计模式的通俗解释: 跟不同类型的MM约会,要用不同的策略,有的请电影比较好,有的则去吃小吃效果不错,有的去海边浪漫最合适,但目的都是为了得到 MM 的芳心, ...
- SpringMVC-设计模式
MVC 设计不仅限于 Java Web 应用,还包括许多应用,比如前端.PHP..NET 等语言.之所以那么做的根本原因在于解耦各个模块. MVC 是 Model.View 和 Controller ...
- sqlalchemy.exc.NoForeignKeysError:Can't find any foreign key relationships between
这句话的意思是,两张表之间的外键找不到,首先看看外键设置正确了没,如果外键没问题,看看是不是_tablename_设置了没,就是再model中,定义类的时候,表格名称要_tablename_设置一下, ...
- 51nod 1205 流水线调度
1205 流水线调度 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 N个作业{1,2,…,n}要在由2台机器M1和M2组成的流水线上完成加工.每个 ...
- 利用Fiddler对手机应用抓包
1.启动Fiddler,打开菜单栏中的 Tools > Fiddler Options,打开“Fiddler Options”对话框. 2.在Fiddler Options”对话框切换到“Con ...
- Spring MVC处理
1.首先,用户发送请求,DispatcherServlet会拦截请求,但DispatcherServlet收到请求后不进行处理,而对URL进行解析得到相应的URI(资源标识符). 2.Dispatch ...
- 利用正则表达式模拟计算器进行字符串的计算实现eval()内置函数功能
代码感觉有点绕,刚开始学习python,相关知识点还没全部学习到,还请各位大神多多指教 import re # 定义乘法 def mul(string): mul1 = re.search('-?\d ...
- Requests爬取网页的编码问题
Requests爬取网页的编码问题 import requests from requests import exceptions def getHtml(): try: r=requests.get ...