hive与mysql的语法区别_HIVE基本语法(创建删除修改表和
表结果)以及分区详细讲解...
HIVE⼩结
HIVE基本语法
HIVE和Mysql⼗分类似
建表规则
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
[(col_name data_type [COMMENT col_comment], ...)]
[COMMENT table_comment]
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
[CLUSTERED BY (col_name, col_name, ...)
[SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
[ROW FORMAT row_format]
[STORED AS file_format]
[LOCATION hdfs_path]
CREATE TABLE 创建⼀个指定名字的表。如果相同名字的表已经存在,则抛出异常;⽤户可以⽤ IF NOT EXIST 选项来忽略这个异常EXTERNAL 关键字可以让⽤户创建⼀个外部表,在建表的同时指定⼀个指向实际数据的路径(LOCATION)
LIKE 允许⽤户复制现有的表结构,但是不复制数据
COMMENT可以为表与字段增加描述
创建表
hive> CREATE TABLE IF NOT EXISTS test1
> (id INT,name STRING);
删除表
drop table test1;
查看表结构
desc test1;
修改表名
alter table test1 rename to test2;
修改表结构
alter table test1 add columns(address string ,grade string);
创建和已知表相同结构的表
create table test3 like test1;
加载本地数据iframe背景颜显示透明
load date local inpath '/home/date/' into table test1;
注意可以在into 前⾯添加overwrite表⽰覆盖之前在test1的数据,如果没有就表⽰加载本地数据在原始数据的后⾯加载hdfs的⽂件
⾸先将⽂件上传到hdfs⽂件系统对对应的⽬录上
hadoop fs -put /home/.txt /usr/
然后加载hdfs中的数据
load data inpath /usr/ into table test1;
插⼊数据
insert overwrite table test2 select * from test1;
查询数据
和mysql语法上没甚没区别
查询单个字段的数据
where条件查询
all和distinct
limit限制查询
group by
order by
sort bu
distribute by
cluster by
HIVE分区
hive分区是为了更⽅便数据管理,常见的有时间分区和业分区
create table t1(
id int
,name string
,hobby array
,add map
)
partitioned by (pt_d string)
mysql面试题及讲解需要注意的是分区字段不能和表中的字段重复,否则就会报错:
FAILED: SemanticException [Error 10035]: Column repeated in partitioning columns
我们在加载数据的时候也可以分区加载
load data local inpath '/home/hadoop/Desktop/data' overwrite into table t1 partition ( pt_d = '201701');之后我们再将同⼀份数据加载到不同的分区中
load data local inpath '/home/hadoop/Desktop/data' overwrite into table t1 partition ( pt_d = '000000');
查询⼀下数据 select * from t1;
男switch什么倾向
1 xiaoming ["book","TV","code"] {"beijing":"chaoyang","shagnhai":"pudong"} 000000
2 lilei ["book","code"] {"nanjing":"jiangning","taiwan":"taibei"} 000000
3 lihua ["music","book"] {"heilongjiang":"haerbin"} 000000
1 xiaoming ["book","TV","code"] {"beijing":"chaoyang","shagnhai":"pudong"} 201701
2 lilei ["book","code"] {"nanjing":"jiangning","taiwan":"taibei"} 201701
3 lihua ["music","book"] {"heilongjiang":"haerbin"} 201701
创建分区除了在创建表的时候启动partition by实现,还可以
alter table t1 add partition (pt_d string)
这样就创建了⼀个分区,这时会看到hive在hdfs中创建了相应的⽂件夹
查询相应的分区的数据
select * from t1 where pt_d = ‘000000’
添加分区,增加⼀个分区⽂件
alter table t1 add partition (pt_d = ‘333333’);
删除分区(删除对应的分区⽂件)
注意,对于外表进⾏drop partition并不会删除hdfs上的⽂件,并且通过msck repair table table_name同步回hdfs上的分区。
alter table test1 drop partition (pt_d = ‘20170101’);
查询分区
show partitions table_name;
修复分区
修复分区就是重新同步hdfs上的分区信息。
msck repair table table_name;
插⼊数据
insert overwrite table partition_test partition(stat_date='2015-01-18',province='jiangsu')
select member_id,name from partition_test_inputopenstack语言
where stat_date='2015-01-18'
and province='jiangsu';
内部表和外部表的区别
Hive中表与外部表的区别:
1、在导⼊数据到外部表,数据并没有移动到⾃⼰的数据仓库⽬录下,也就是说外部表中的数据并不是由它⾃⼰来管理的!⽽表则不⼀样;
2、在删除表的时候,Hive将会把属于表的元数据和数据全部删掉;⽽删除外部表的时候,Hive仅仅删除外部表的元数据,数据是不会删除的!kown
那么,应该如何选择使⽤哪种表呢?在⼤多数情况没有太多的区别,因此选择只是个⼈喜好的问题。
但是作为⼀个经验,如果所有处理都需要由Hive完成,那么你应该创建表,否则使⽤外部表!
>c语言常用函数速查手册

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。