admin 管理员组

文章数量: 1184232


2024年6月6日发(作者:圆形滑块)

Hadoop Hive sql语法详解

Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析

存储在Hadoop 分布式文件系统中的数据,可以将结构化的数据文件映射为一张数据库表,

并提供完整的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行,通过自己

的SQL 去查询分析需要的内容,这套SQL 简称Hive SQL,使不熟悉mapreduce 的用户很方

便的利用SQL 语言查询,汇总,分析数据。而mapreduce开发人员可以把己写的mapper 和

reducer 作为插件来支持Hive 做更复杂的数据分析。

它与关系型数据库的SQL 略有不同,但支持了绝大多数的语句如DDL、DML 以及常见的聚

合函数、连接查询、条件查询。HIVE不适合用于联机online)事务处理,也不提供实时查询

功能。它最适合应用在基于大量不可变数据的批处理作业。

HIVE的特点:可伸缩(在Hadoop的集群上动态的添加设备),可扩展,容错,输入格式的

松散耦合。

Hive 的官方文档中对查询语言有了很详细的描述,请参考:

/hadoop/Hive/LanguageManual ,本文的内容大部分翻译自该页面,期

间加入了一些在使用过程中需要注意到的事项。

1. DDL 操作

DDL

?建表

?删除表

?修改表结构

?创建/删除视图

?创建数据库

?显示命令

建表:

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可以为表与字段增加描述

?ROW FORMAT

DELIMITED [FIELDS TERMINATED BY char] [COLLECTION ITEMS TERMINATED BY char]

[MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char]

| SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value,

property_name=property_value, ...)]

用户在建表的时候可以自定义 SerDe 或者使用自带的 SerDe。如果没有指定 ROW FORMAT

或者 ROW FORMAT DELIMITED,将会使用自带的 SerDe。在建表的时候,用户还需要为表指

定列,用户在指定表的列的同时也会指定自定义的 SerDe,Hive 通过 SerDe 确定表的具体

的列的数据。

?STORED AS

SEQUENCEFILE

| TEXTFILE

| RCFILE

| INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname

如果文件数据是纯文本,可以使用 STORED AS TEXTFILE。如果数据需要压缩,使用 STORED AS

SEQUENCE 。

创建简单表:

hive> CREATE TABLE pokes (foo INT, bar STRING);

创建外部表:

CREATE EXTERNAL TABLE page_view(viewTime INT, userid BIGINT,

page_url STRING, referrer_url STRING,

ip STRING COMMENT 'IP Address of the User',

country STRING COMMENT 'country of origination')

COMMENT 'This is the staging page view table'

ROW FORMAT DELIMITED FIELDS TERMINATED BY '054'

STORED AS TEXTFILE

LOCATION '';

建分区表

CREATE TABLE par_table(viewTime INT, userid BIGINT,

page_url STRING, referrer_url STRING,

ip STRING COMMENT 'IP Address of the User')

COMMENT 'This is the page view table'

PARTITIONED BY(date STRING, pos STRING)

ROW FORMAT DELIMITED ‘t’

FIELDS TERMINATED BY 'n'

STORED AS SEQUENCEFILE;

建Bucket表

CREATE TABLE par_table(viewTime INT, userid BIGINT,

page_url STRING, referrer_url STRING,

ip STRING COMMENT 'IP Address of the User')

COMMENT 'This is the page view table'

PARTITIONED BY(date STRING, pos STRING)

CLUSTERED BY(userid) SORTED BY(viewTime) INTO 32 BUCKETS

ROW FORMAT DELIMITED ‘t’

FIELDS TERMINATED BY 'n'


本文标签: 查询 数据 用户