`
刘小小尘
  • 浏览: 67568 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Hadoop Hive sql语法详解

 
阅读更多
1. DDL Operations
创建表:

hive> CREATE TABLE pokes (foo INT, bar STRING);
创建表并创建索引字段ds

hive> CREATE TABLE invites (foo INT, bar STRING) PARTITIONED BY (ds STRING);
显示所有表:

hive> SHOW TABLES;
按正条件(正则表达式)显示表,

hive> SHOW TABLES '.*s';
表添加一列 :

hive> ALTER TABLE pokes ADD COLUMNS (new_col INT);
添加一列并增加列字段注释

hive> ALTER TABLE invites ADD COLUMNS (new_col2 INT COMMENT 'a comment');
更改表名:

hive> ALTER TABLE events RENAME TO 3koobecaf;
删除列:

hive> DROP TABLE pokes;
2. 元数据存储:
将文件中的数据加载到表中

hive> LOAD DATA LOCAL INPATH './examples/files/kv1.txt' OVERWRITE INTO TABLE pokes;
加载本地数据,同时给定分区信息

hive> LOAD DATA LOCAL INPATH './examples/files/kv2.txt' OVERWRITE INTO TABLE invites PARTITION (ds='2008-08-15');
加载DFS数据 ,同时给定分区信息

hive> LOAD DATA INPATH '/user/myname/kv2.txt' OVERWRITE INTO TABLE invites PARTITION (ds='2008-08-15');
The above command will load data from an HDFS file/directory to the table. Note that loading data from HDFS will result in moving the file/directory. As a result, the operation is almost instantaneous.
3. SQL 操作
按先件查询

hive> SELECT a.foo FROM invites a WHERE a.ds='<DATE>';
将查询数据输出至目录:

hive> INSERT OVERWRITE DIRECTORY '/tmp/hdfs_out' SELECT a.* FROM invites a WHERE a.ds='<DATE>';
将查询结果输出至本地目录:

hive> INSERT OVERWRITE LOCAL DIRECTORY '/tmp/local_out' SELECT a.* FROM pokes a;
选择所有列到本地目录 :

hive> INSERT OVERWRITE TABLE events SELECT a.* FROM profiles a;
hive> INSERT OVERWRITE TABLE events SELECT a.* FROM profiles a WHERE a.key < 100;
hive> INSERT OVERWRITE LOCAL DIRECTORY '/tmp/reg_3' SELECT a.* FROM events a;
hive> INSERT OVERWRITE DIRECTORY '/tmp/reg_4' select a.invites, a.pokes FROM profiles a;
hive> INSERT OVERWRITE DIRECTORY '/tmp/reg_5' SELECT COUNT(1) FROM invites a WHERE a.ds='<DATE>';
hive> INSERT OVERWRITE DIRECTORY '/tmp/reg_5' SELECT a.foo, a.bar FROM invites a;
hive> INSERT OVERWRITE LOCAL DIRECTORY '/tmp/sum' SELECT SUM(a.pc) FROM pc1 a;
将一个表的统计结果插入另一个表中:

hive> FROM invites a INSERT OVERWRITE TABLE events SELECT a.bar, count(1) WHERE a.foo > 0 GROUP BY a.bar;
hive> INSERT OVERWRITE TABLE events SELECT a.bar, count(1) FROM invites a WHERE a.foo > 0 GROUP BY a.bar;
JOIN
hive> FROM pokes t1 JOIN invites t2 ON (t1.bar = t2.bar) INSERT OVERWRITE TABLE events SELECT t1.bar, t1.foo, t2.foo;
将多表数据插入到同一表中:

FROM src
INSERT OVERWRITE TABLE dest1 SELECT src.* WHERE src.key < 100
INSERT OVERWRITE TABLE dest2 SELECT src.key, src.value WHERE src.key >= 100 and src.key < 200
INSERT OVERWRITE TABLE dest3 PARTITION(ds='2008-04-08', hr='12') SELECT src.key WHERE src.key >= 200 and src.key < 300
INSERT OVERWRITE LOCAL DIRECTORY '/tmp/dest4.out' SELECT src.value WHERE src.key >= 300;
将文件流直接插入文件:

hive> FROM invites a INSERT OVERWRITE TABLE events SELECT TRANSFORM(a.foo, a.bar) AS (oof, rab) USING '/bin/cat' WHERE a.ds > '2008-08-09';
This streams the data in the map phase through the script /bin/cat (like hadoop streaming). Similarly - streaming can be used on the reduce side (please see the Hive Tutorial or examples)
4. 实际示例:
创建一个表

CREATE TABLE u_data (
userid INT,
movieid INT,
rating INT,
unixtime STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '/t'
STORED AS TEXTFILE;


下载示例数据文件,并解压缩
wget http://www.grouplens.org/system/files/ml-data.tar__0.gz
tar xvzf ml-data.tar__0.gz
加载数据到表中:

LOAD DATA LOCAL INPATH 'ml-data/u.data'
OVERWRITE INTO TABLE u_data;
统计数据总量:

SELECT COUNT(1) FROM u_data;
现在做一些复杂的数据分析:

创建一个 weekday_mapper.py: 文件,作为数据按周进行分割
import sys
import datetime

for line in sys.stdin:
line = line.strip()
userid, movieid, rating, unixtime = line.split('/t')
生成数据的周信息

weekday = datetime.datetime.fromtimestamp(float(unixtime)).isoweekday()
print '/t'.join([userid, movieid, rating, str(weekday)])
使用映射脚本

//创建表,按分割符分割行中的字段值
CREATE TABLE u_data_new (
userid INT,
movieid INT,
rating INT,
weekday INT)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '/t';
//将python文件加载到系统
add FILE weekday_mapper.py;
将数据按周进行分割

INSERT OVERWRITE TABLE u_data_new
SELECT
TRANSFORM (userid, movieid, rating, unixtime)
USING 'python weekday_mapper.py'
AS (userid, movieid, rating, weekday)
FROM u_data;

SELECT weekday, COUNT(1)
FROM u_data_new
GROUP BY weekday;
处理Apache Weblog 数据

将WEB日志先用正则表达式进行组合,再按需要的条件进行组合输入到表中
add jar ../build/contrib/hive_contrib.jar;

CREATE TABLE apachelog (
host STRING,
identity STRING,
user STRING,
time STRING,
request STRING,
status STRING,
size STRING,
referer STRING,
agent STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
"input.regex" = "([^ ]*) ([^ ]*) ([^ ]*) (-|//[[^//]]*//]) ([^ /"]*|/"[^/"]*/") (-|[0-9]*) (-|[0-9]*)(?: ([^ /"]*|/"[^/"]*/") ([^ /"]*|/"[^/"]*/"))?",
"output.format.string" = "%1$s %2$s %3$s %4$s %5$s %6$s %7$s %8$s %9$s"
)
STORED AS TEXTFILE;


原文地址:http://blog.csdn.net/hguisu/article/details/7256833


分享到:
评论

相关推荐

    Hive中SQL详解

    Hive SQL语法与关系型数据库的SQL语法类似,但也有一些差异。 Hive SQL支持绝大多数的语句,如DDL、DML、聚合函数、连接查询、条件查询等。 * SELECT:选择表中的数据。 * FROM:指定表名。 * WHERE:指定条件。 * ...

    Hive SQL 编译过程详解

    - **Phase1 SQL词法,语法解析**:Hive使用Antlr工具解析SQL,生成抽象语法树(AST Tree)。Antlr是一个强大的解析工具,能够解析特定的语言结构,如HiveQL。 - **Phase2 AST Tree到QueryBlock**:接下来,Hive...

    Hive语法详解

    ### Hive SQL语法详解 #### 一、Hive简介与特性 Hive是一个建立在Hadoop之上的数据仓库工具,主要用于对存储在Hadoop文件系统(HDFS)中的数据进行数据分析和处理。它提供了类似SQL的查询语言——Hive SQL,使得...

    Hive SQL练习题库

    ### Hive SQL练习题库知识点详解 #### 一、Hive SQL概述 Hive 是一个基于 Hadoop 的数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的 SQL 查询功能,使不熟悉 MapReduce 的用户可以利用 SQL...

    HiveSQL解析原理.docx

    ### HiveSQL解析原理详解 #### 一、引言 Hive作为一款建立在Hadoop之上的数据仓库系统,被广泛应用于大数据处理场景中。对于众多企业和组织而言,它不仅是存储和管理海量数据的有效手段,同时也是进行数据分析的...

    Hive语法详解.docx (排版清晰,覆盖全面,含目录)

    ### Hive语法详解 #### 一、安装和配置 **1.1 要求** - **硬件需求**:为了高效地运行Hive,推荐至少具备4GB内存,并且Hive服务器应该有足够的磁盘空间来存储元数据。 - **软件需求**:Hive需要Java环境支持,...

    基于Hadoop的数据仓库Hive学习指南.doc

    2. **Hive的出现原因**:Hive的诞生是为了应对SQL技术人员在Hadoop上进行大数据分析的需求,以及传统数据库格式向Hadoop的迁移,同时也满足了数据库设计人员在Hadoop上使用SQL技术的需求。此外,Hive旨在通过数据...

    Hive 入门教程-Apache Hive入门介绍与HQL语法解析

    ### Apache Hive 入门教程详解 #### 一、Hive简介与背景 Hive 是一个构建在 Hadoop 之上的数据仓库基础设施。它的设计目的是为了简化大数据的存储、查询和分析过程。通过引入类似 SQL 的查询语言(HQL),使得传统...

    深入云计算:Hadoop应用开发实战详解 源代码

    Java是常见的编程语言,但也有如Hadoop Streaming和Pig、Hive等高级工具,它们允许使用Python、Perl等其他语言或SQL语法进行编程,简化开发过程。 5. **实战详解与源代码**:"深入云计算:Hadoop应用开发实战详解 ...

    二万字讲解HiveSQL技术原理、优化与面试.pdf

    ### HiveSQL技术原理详解 #### 一、HiveSQL技术概览 HiveSQL作为大数据处理框架中的一个重要组成部分,主要用于处理存储在Hadoop文件系统(HDFS)中的大规模数据集。它通过提供一种类似SQL的查询语言(HiveQL),...

    Hive技术平台详解.pptx

    Hive 的优点在于较低的学习曲线,因为它的语法接近 SQL,适合进行数据仓库的 ETL(Extract, Transform, Load)过程。此外,它适用于大规模的数据统计分析,尤其是在不需要实时响应的场景下。然而,Hive 的缺点是它的...

    Hadoop-2.8.0-Day08-Hive函数与HQL详解-课件与资料.zip

    Hadoop是一个开源框架,主要用于分布式存储和计算大规模数据集,而Hive则是建立在Hadoop之上的一种数据仓库工具,它提供了一种SQL-like的语言(称为HiveQL或HQL)来方便数据查询和分析。在这个"Day08-Hive函数与HQL...

    Hive2--Hive和Hadoop关系.pdf

    《Hive与Hadoop的关系详解》 Hive和Hadoop之间的关系密切且相互依赖,它们共同构成了大数据处理的重要组成部分。Hive,作为一种基于Hadoop的数据仓库框架,旨在为大规模数据集提供灵活的数据查询和分析能力,尤其...

    hive开发规范

    ### Hive开发规范详解 #### 一、概述 在大数据领域,Apache Hive(简称Hive)是一种数据仓库工具,可以用于对存储在Hadoop文件系统(HDFS)中的数据集进行数据整理、特殊查询和分析存储。为了确保Hive SQL的编写...

    DBeaver链接hive驱动包下载: hive-jdbc-uber-2.6.5.0-292.jar

    《DBeaver与Hive连接:hive-jdbc-uber-2.6.5.0-292.jar驱动详解》 在大数据处理领域,Hive作为一个基于Hadoop的数据仓库工具,广泛用于数据查询和分析。而DBeaver,作为一款跨平台的数据库管理工具,以其用户友好的...

    【63课时完整版】大数据实践HIVE详解及实战

    17.Hive中HQL的基本语法(一) 18.Hive中HQL的基本语法(二) 19.Hive中order by、sort by、distribute by与cluster by的使用 20.Hive中分析函数与窗口函数 21.Hive中UDF的介绍 22.Hive中使用自定义UDF实现日期格式...

    hive编程入门课程

    ### Hive编程入门课程知识点详解 #### 一、Hive概览 Hive是建立在Hadoop之上的数据仓库基础设施,由Facebook赞助开发。它通过提供SQL-like查询语言(HiveQL),使用户能够轻松地对存储在Hadoop分布式文件系统(HDFS...

    Impala和Hive的关系(详解)

    Impala是基于Hive的大数据实时分析查询引擎,直接使用Hive的元数据库Metadata,意味着impala元数据都存储在Hive...据、ODBC/JDBC驱动、SQL语法、灵活的文件格式、存储资源池等。Impala与Hive在Hadoop中的关系如下图所示

Global site tag (gtag.js) - Google Analytics