wns9778.com_威尼斯wns.9778官网

热门关键词: wns9778.com,威尼斯wns.9778官网
wns9778.com > 计算机教程 > 知道hive的这些ddl和dml操作语句,离从一个小白变

原标题:知道hive的这些ddl和dml操作语句,离从一个小白变

浏览次数:161 时间:2019-11-05

1、hive属于java体系,数据编码是unicode,所以从生产库抽过来的GB18030极其子编码集的数据,load到hive是可能出现乱码的。幸好有mapreduce的存在,我们可以写一个数据清洗程序,不仅可以完成转码功能,还可以格式化为hive可用的数据,比如行分隔符,列分隔符的替换,记录字段个数的检查等。

DDL:

文件小的话也可以使用命令:iconv -f GBK -t UTF8 cui.dat > cui2.dat_utf8

库操作:

2、hive表的分割符只支持一个字符,默认是\001,即asc码的第一个字符。

创建库:

3、hive语法类似mysql,但没有查看创建表语句功能,可以通过元数据表之间的关联来拼接一个建表语句,做成以脚本命令运行的方式。

create database 库名;

4、hive ql 中不存在写法为 exist not ,而非关系型库的not exist。

create database if not exists 库名;

5、hive中的函数均为java实现的方法,扩展此功能需要写一个UDF的子类,覆盖evaluate方法,重新编译hive即可。

查看库的列表:

6、hive中使用多个union all时最外面还要包一层select,否则会报错。

show databases;

7、hive以hdfs文件的方式存在,不支持追加的功能,但可以通过建表时指定多个分区变通实现追加功能。

show databases like 's*'; 查看以s开头的数据库;

8、hive中alter开头的命令格式为:use database;alter 语句 。而不能写成这样:alter table  database.tablename...

使用库:

9、hive 两个表join操作,on 后面只能有 “=” 关系,不能有大于,小于,like等其他的,可以用子查询变通。

use database;

10、hive 中,对于select count(distinct   c1)  ......group by  c1 语句,会导致执行的错误,在这里写count(distinct   c1) 实际上等于1

查看正在使用的库:

wns9778.com 1

select current_database(); --是一个函数

查看库信息:

desc database 库名;

删除库:

drop database 库名; 只能删除空库,里面没有表的

drop database if exists 库名;

drop database 库名 cascade; 删除库 非空库

drop database 库名 restrict; 默认情况下的删除库的操作

修改库:基本不用

if not exists

if exists 避免错误 同样适用于表的操作

表的操作:

创建表

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]

1) [EXTERNAL] 关键字:是否创建外部表 不加创建的是内部表 加上创建的是外部表

2) [PARTITIONED BY (col_name data_type [COMMENT col_comment],...]

PARTITIONED BY:指定分区字段

注意:分区字段一定不是建表字段中的某一个或多个 是一个全新的字段

3)[CLUSTERED BY (col_name,col_name,...) 指定分桶字段

[SORTED BY (col_name [ASC|DESC],...)] INTO num_buckets BUCKETS] 指定排序字段

注意:分桶字段一定是建表语句中的某一个字段或多个字段

排序规则指定的是在桶一个分桶内的排序规则

INTO num_buckets BUCKETS 指定分桶个数

4)[ROW FORMAT row_format] 指定分隔符

delimited fields terminated by '' 指定列分隔符

lines terminated by '' 指定行分隔符

5)[STORED as file_format] 指定最终表数据的存储格式

textfile 文本格式 默认的格式

rcfile 行列结合各式

parquet 压缩格式

6)[LOCATION hdfs_path] 指定最终表数据的存储格式

不指定这个默认在我们配置的路径下存储 /user/hive/warehouse

指定了则存储在指定的路径下

建表

1)内部表

create table if not exists manage_table

(id int

,age int

)

row format delimited fields terminated by ','

;

2)外部表

create external table if not exists external_table

(id int

,age int

,name string

)

row format delimited fields terminated by ','

;

3)分区表

create table if not exists ptn_table

(id int

,age int

)

partitioned by (city string)

row format delimited fields terminated by ','

;

分区表中的数据存储在不同的目录下

分区表在添加数据之前先添加分区

alter table pnt_table add if not exists partition(city='beijing');

alter table pnt_table add if not exists partition(city='wuhan');

add partition 添加分区

4)分桶表 ------hadoop中的分区的概念 默认分区按照hash分区

create table if not exists buk_table

(id int

,age int

,name string

)

clustered by

sorted by

into 4 buckets

row format delimited fields terminated by ','

;

clustered by :相当于指定map端发出的key id.hashCode()

into 4 buckets: 相当于指定numreducetasks id.hashCode() %4 :对id取hashcode值%4

分桶表的作用:

wns9778.com,获得更高的查询处理效率。桶为表加上了额外的结构,Hive在处理有些查询时候利用这个结构。具体而言,连接两个在相同列上划分了桶的表,可以使用Map端连接高效的实现。比如Join操作。对于Join操作两个表有一个相同的列,如果对这两个表都进行了桶操作。那么将保存相同列值得桶进行Join操作就可以,可以大大减少Join的数据量。

使取样更高效。在处理大规模数据集时,在开发和修改查询的阶段,如果能在数据集的 一小部分数据上试运行查询,会带来很多方便。

5)复制表 like关键字

create table copy_table01 like external_table;

在复制表的时候复制出来的表到底是内部表还是外部表跟你在复制的时候是否指定了external关键字有关

注意:复制表 只能复制表结构并不能复制表数据

6) 创建查询表

create table as select...from table;

7)查看表

show tables;

show tables in 库名; 查看某个库的表

show tables like 's*'

查看表信息

desc 表名:显示表的字段信息

desc formatted 表名:格式化显示表的详细信息

desc extended 表名:显示表的详细信息

8)删除表

drop table if exists 表名

清空表

truncate table 表名;

仅仅是清空表中的数据,表结构仍然保留

9)修改表 alter

修改表名字

alter table 表名 rename to 新表名

修改表字段信息

添加字段

alter table 表名 add columns();

例如:alter table copy_table01 add columns(sex string,department string);

所有的新的字段一定要指定类型

修改字段 修改字段类型

alter table 表名 change 原始字段 新字段 新字段类型

例如:alter table copy_table01 change age age01 string

alter table copy_table01 change sex sex int 类型转换错误

注意:在进行修改表字段定义的时候一定要注意表字段类型之间的匹配,只能小类型转大类型

string类型相对于数值类型属于大类型

但是hive1.2.2中没有限制 各种类型之间都可以相互修改

本文由wns9778.com发布于计算机教程,转载请注明出处:知道hive的这些ddl和dml操作语句,离从一个小白变

关键词: wns9778.com

上一篇:Fuduntu 2013.1 发布,支持 Netflix, Steam 和 E17

下一篇:没有了