HIve常用的基本语句总结

1、HIve基本数据类型

Hive 数据类型 长度 例子
TINYINT 1byte 有符号整数 20
SMALINT 2byte 有符号整数 20
INT 4byte 有符号整数 20
BIGINT 8byte 有符号整数 20
BOOLEAN 布尔类型, true 或者
false
TRUE FALSE
FLOAT 单精度浮点数 3.14159
DOUBLE 双精度浮点数 3.14159
STRING 字符系列。可以指定
字符集。可以使用单
引号或者双引号。
‘now is the time’ “for
all good men”
TIMESTAMP 时间类型  
BINARY 字节数组  

对于 Hive 的 String 类型相当于数据库的 varchar 类型,该类型是一个可变的字符串,不过它不能声明其中最多能存储多少个字符,理论上它可以存储 2GB 的字符数。

2、集合数据类型

数据类型 描述 语法示例
STRUCT 和 c 语言中的 struct 类似,都可以通过“点”符号访问元素内容。例如,如果某个列的数据类型是 STRUCT{first STRING, lastSTRING},那么第 1 个元素可以通过字段.first 来引用。 struct()
MAP

MAP 是一组键-值对元组集合,使用数组表示法可以访问数据。例如,如果某个列的数据类型是 MAP,其中键 ->值对是’first’->’John’和’last’->’Doe’,那么可以通过字段名[‘last’]获取最后一个元素

map()

ARRAY

数组是一组具有相同类型和名称的变量的集合。这些变量称为数组的元素,每个数组元素都有一个编号,编号从零开始。例如,数组值为[‘John’, ‘Doe’],那么第 2 个元素可以通过数组名[1]进行引用。

Array()

Hive 有三种复杂数据类型 ARRAY、 MAP 和 STRUCT。 ARRAY 和 MAP 与 Java 中的 Array 和 Map 类似,而 STRUCT 与 C 语言中的 Struct 类似,它封装了一个命名字段集合,复杂数据类型允许任意层次的嵌套。

3、简单的hive sql语句

#查询数据库
show databases;

#查询表
show tables;

#使用数据库
use database_name;

#查看表结构
desc table_name;

#删除表
drop table table_name;

4、创建表

格式:
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]

# 字段解释:
[external] # 申明是否为外部表

[if not exists] # 如果表存在,则不创建了

[(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] # 在clustered by 里的字段上建立 num_buckets个桶,记录是由 sorted by里的字段排序的。

[ROW FORMAT row_format] # 指定分隔符,可以是以下几个:
        : DELIMITED [FIELDS TERMINATED BY char] 
                    [COLLECTION ITEMS TERMINATED BY char] 
                    [MAP KEYS TERMINATED BY char] 

[STORED AS file_format] # 指定load文件的类型,分为:
            textfile 是 纯文本文件
            sequence 是 压缩文件

[LOCATION hdfs_path] # 向表里加载数据,hdfs_path是一个hdfs上的目录,不能是文件,hive会依据默认配置的hdfs路径,自动将整个目录下的文件都加载到表中。

2)案例实操
(1)普通创建表

create table if not exists student2(
id int, name string
)
row format delimited fields terminated by '\t'
stored as textfile
location '/user/hive/warehouse/student2';


(2)根据查询结果创建表(查询的结果会添加到新创建的表中)

create table if not exists student3
as select id, name from student;


(3)根据已经存在的表结构创建表

create table if not exists student4 like student;

(4)查询表的类型
hive (default)> desc formatted student2;
Table Type: MANAGED_TABLE

5、 外部表

1)理论
因为表是外部表,所有 Hive 并非认为其完全拥有这份数据。 删除该表并不会删除掉这
份数据,不过描述表的元数据信息会被删除掉。
2)管理表和外部表的使用场景:
每天将收集到的网站日志定期流入 HDFS 文本文件。在外部表(原始日志表)的基础
上做大量的统计分析,用到的中间表、结果表使用内部表存储,数据通过 SELECT+INSERT
进入内部表

6、使用复杂类型创建表

create external table if not exists T2(
    id int,
    course array<string>,
    score  map<string,int>
)
row format
delimited fields terminated by ',' 
          collection items terminated by '|'
          map keys terminated by ':'
stored as textfile;
# 数据文件内容
1001,语文|数学|英语,语文|56,语文:102|数学:2033|英语:30
1002,语文|数学|英语,语文|156,语文:120|数学:2033|英语:30
1003,语文|数学|英语,语文|1156,语文:210|数学:3320|英语:30
1004,语文|数学|英语,语文|1156,语文:2210|数学:203|英语:30
1005,语文|数学|英语,语文|5116,语文:22210|数学:230|英语:30
# 导入数据文件
load data local inpath '/home/datanode/hiveTest/test01' overwrite  into table t2;

创建一个带分区的内部表

create table if not exists T3(
    id int,
    name string
)
partitioned by (classid int)
row format
delimited fields terminated by ','
stored as textfile;

创建一个带桶的内部表

create table T4(
    id int ,
    name string,
    sex string,
    age int
)
partitioned by (city string)
clustered by(age) sorted by(name) into 5 buckets
row format 
delimited fields terminated by ','
stored as textfile;

猜你喜欢

转载自blog.csdn.net/u013982921/article/details/81088570
今日推荐