Hive查询

1、hive Web接口的使用

1)在source中打出hive-hwi-1.1.0.war包
进入源码hwi/web执行打包 jar cvf hive-hwi-1.1.0.war ./*

2)将hive-hwi-1.1.0.war拷贝到/home/Hadoop/hive/lib 目录下
将/home/Hadoop/java/jdk1.8.0_40/lib/tools.jar 拷贝到/home/Hadoop/hive/lib 目录下,如果不拷贝,将报错

3)修改hive-site.xml 增加如下配置
<propert>
        <name>hive.hwi.listen.host</name>
        <value>10.211.55.5</value>
        <description></description>
    </propert>
    <propert>
        <name>hive.hwi.listen.port</name>
        <value>7777</value>
        <description></description>
</propert>
<property>
  <name>hive.hwi.war.file</name>
  <value>lib/hive-hwi-1.1.0.war</value>
  <description>This is the WAR file with the jsp content for Hive Web Interface</description>
</property>

4)启动并访问Web界面
cd $HIVE_HOME
./bin/hive --service hwi

5)访问地址:
http://10.211.55.5:7777/hwi

2、hive基本语法练习

数据来源是从之前的数据仓库项目中导出来数据,本实验有4 张表,2张表通过hive命令行创建,2张通过jdbc程序创建
hive语法不区分大小写,函数区分大小写。

1)创建库

CREATE DATABASE RetailDW;

使用库

USE RetailDW;

2)创建表

CREATE EXTERNAL TABLE DemiClass (clscode STRING,cty_big STRING,cty_sml STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,‘
LINES TERMINATED BY ‘\n‘;

3)创建分区表

CREATE TABLE DemiDate (xsdate STRING,year STRING,month STRING,day STRING)PARTITIONED BY (ds STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,‘
LINES TERMINATED BY ‘\n‘;

4)删除表

DROP TABLE DemiClass;

5)显示所有表

SHOW TABLES;

SHOW TABLES ‘.*s‘;

6)删除列(用replace columns 来起到删除的作用)

ALTER TABLE DemiClass REPLACE COLUMNS (clscode STRING,cty_big STRING);

7)表添加一列

ALTER TABLE DemiClass ADD COLUMNS (cty_sml STRING);

ALTER TABLE DemiClass ADD COLUMNS (cty_sml STRING  COMMENT ‘small class type‘);

8)更改表名

ALTER TABLE DemiClass RENAME TO DemiClass1;
ALTER TABLE DemiClass1 RENAME TO DemiClass;

9)清空表数据

INSERT OVERWRITE TABLE DemiClass_copy SELECT * FROM DemiClass_copy dc WHERE 1=0;

10)将本地文件中的数据加载到表中

LOAD DATA LOCAL INPATH ‘/home/Hadoop/Desktop/data/DemiClass.csv‘ OVERWRITE INTO TABLE DemiClass;

LOAD DATA LOCAL INPATH ‘/home/Hadoop/Desktop/data/DemiDate.csv‘ OVERWRITE INTO TABLE DemiDate PARTITION (ds=‘2014‘);

11)加载DFS数据 ,同时给定分区信息

LOAD DATA INPATH ‘/HDTest2/DemiClass.csv‘ OVERWRITE INTO TABLE DemiClass;

12)按先件查询

SELECT * FROM DemiClass dc WHERE dc.cty_big=‘化妆品‘ ;

13)将查询数据输出至HDFS目录

INSERT OVERWRITE DIRECTORY ‘/HDTest2/Hive_output‘ SELECT dc.* FROM DemiClass dc WHERE dc.cty_big=‘电器代销‘ ;

14)将查询结果输出至本地目录

INSERT OVERWRITE LOCAL DIRECTORY ‘/home/Hadoop/Desktop/Hive_output‘ SELECT dc.* FROM DemiClass dc WHERE dc.cty_big=‘电器代销‘ ;

OVERWRITE会将目录给清空,并替代成只有查询结果的目录(甚用OVERWRITE)

15)将一个表的查询结果插入另外一张表

INSERT OVERWRITE TABLE DemiClass_copy SELECT dc.* FROM DemiClass dc;
INSERT OVERWRITE TABLE DemiClass_copy SELECT dc.* FROM DemiClass dc WHERE dc.cty_big=‘钟表‘;
INSERT OVERWRITE DIRECTORY ‘/HDTest2/Hive_output‘  SELECT dc.clscode,dc.cty_big FROM DemiClass dc WHERE dc.cty_big=‘钟表‘;
INSERT OVERWRITE DIRECTORY ‘/HDTest2/Hive_output‘  SELECT count(1) FROM DemiClass dc WHERE dc.cty_big=‘钟表‘;
INSERT OVERWRITE LOCAL DIRECTORY ‘/home/Hadoop/Desktop/Hive_output‘ SELECT count(1) FROM DemiClass dc WHERE dc.cty_big=‘钟表‘;

16)将一个表的统计结果插入另一个表中

CREATE TABLE DemiClass_GP_Result (CTY_BIG STRING,SUM INT)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,‘
LINES TERMINATED BY ‘\n‘;

FROM DemiClass dc INSERT OVERWRITE TABLE DemiClass_GP_Result  SELECT dc.CTY_BIG, count(*) GROUP BY dc.CTY_BIG;

17)将一个表中的数据插入多个表中

FROM DemiClass dc
INSERT OVERWRITE TABLE DemiClass_GP_Result SELECT dc.CTY_BIG, count(*) GROUP BY dc.CTY_BIG
INSERT OVERWRITE TABLE DemiClass_copy  SELECT dc.* WHERE dc.cty_big=‘钟表‘;

18)修改列

ALERT TABLE table_name [COLUMN]
    col_old_name col_new_name column_type
    [comment col_comment]
    [first|after column_name]

eg:

修改列名
ALTER TABLE DemiClass CHANGE CTY_BIG ctyBig STRING;
ALTER TABLE DemiClass CHANGE ctyBig cty_big  STRING;

改变列的位置
ALTER TABLE DemiClass CHANGE cty_big ctyBig STRING after cty_sml;
ALTER TABLE DemiClass CHANGE ctyBig cty_big STRING frist ;

19)增加表信息Alter Table Properties

ALTER TABLE table_name SET TBLPROPERTIES table_properties
table_properties:
  : (property_name = property_value, property_name = property_value, ... )
用户可以用这个命令向表中增加 metadata,目前 last_modified_user,last_modified_time 属性都是由 Hive 自动管理的。
用户可以向列表中增加自己的属性。可以使用 DESCRIBE EXTENDED TABLE 来获得这些信息。

20)Add Serde Properties

ALTER TABLE table_name
    SET SERDE serde_class_name
    [WITH SERDEPROPERTIES serde_properties]
ALTER TABLE table_name
    SET SERDEPROPERTIES serde_properties
serde_properties:
  : (property_name = property_value,
    property_name = property_value, ... )
这个命令允许用户向 SerDe 对象增加用户定义的元数据。Hive 为了序列化和反序列化数据,将会初始化 SerDe 属性,并将属性传给表的 SerDe。如此,用户可以为自定义的 SerDe 存储属性。

21)Alter Table File Format and Organization

ALTER TABLE table_name SET FILEFORMAT file_format
ALTER TABLE table_name CLUSTERED BY (col_name, col_name, ...)
  [SORTED BY (col_name, ...)] INTO num_buckets BUCKETS
这个命令修改了表的物理存储属性。

22) Partitions

增加语法:
ALTER TABLE table_name
      ADD [IF NOT EXISTS]
      PARTITION partition_spec [LOCATION ‘location1‘]
                partition_spec [LOCATION ‘location2‘] ...
partition_spec:
      (partition_col = partition_col_value, partition_col = partiton_col_value, ...)

删除:用户可以用 ALTER TABLE DROP PARTITION 来删除分区。分区的元数据和数据将被一并删除。

ALTER TABLE table_name DROP [IF EXISTS] partition_spec, partition_spec,...
eg:
ALTER TABLE page_view DROP PARTITION (dt=‘2008-08-08‘, country=‘us‘);

时间: 2024-09-29 20:08:00

Hive查询的相关文章

使用shell+awk完成Hive查询结果格式化输出

好久不写,一方面是工作原因,有些东西没发直接发,另外的也是习惯给丢了,内因所致.今天是个好日子,走起! btw,实际上这种格式化输出应该不只限于某一种需求,差不多是通用的. 需求: --基本的:当前Hive查询结果存在数据与表头无法对其的情况,不便于监控人员直接查看,或者导出到excel中,需要提供一个脚本,将查询结果处理下,便于后续的查看或者操作. --额外的:A.每次查询出来的结果字段数.字段长度不固定:B.每个数据文件中可能包含不只一套查询结果,即存在多个schema. 想法: 对于基本需

HAWQ与Hive查询性能对比测试

一.实验目的 本实验通过模拟一个典型的应用场景和实际数据量,测试并对比HAWQ内部表.外部表与Hive的查询性能. 二.硬件环境 1. 四台VMware虚机组成的Hadoop集群.2. 每台机器配置如下:(1)15K RPM SAS 100GB(2)Intel(R) Xeon(R) E5-2620 v2 @ 2.10GHz,双核双CPU(3)8G内存,8GSwap(4)10000Mb/s虚拟网卡 三.软件环境 1. Linux:CentOS release 6.4,核心2.6.32-358.el

python 调用hive查询实现类似存储过程

需求:数据仓库中所有表的定义结构保存到新的文件中,保存后类似下面数据,重复的数据只保留7月份即可 ****************ods_log_info*****************lid string uid string mb_uid string operation string module string result string ts string remark1 string remark2 string remark3 string ****************ods_

hadoop中的hive查询cdn访问日志指定时间段内url访问次数最多的前10位(结合python语言)

hadoop环境描述: master节点:node1 slave节点:node2,node3,node4 远端服务器(python连接hive):node29 需求:通过hive查询到cdn日志中指定时间段内url访问次数最多的前10个url ps:用pig查询可以查询文章: http://shineforever.blog.51cto.com/1429204/1571124 说明:python操作远程操作需要使用Thrift接口: hive源码包下面自带Thrift插件: [[email pr

Hadoop集群中使用Hive查询报错

今天在使用Hive查询某分析数据最大值的时候,出现了一定的问题,hive中现象如下: Caused by: java.io.FileNotFoundException://http://slave1:50060/tasklog?attemptid=attempt_201501050454_0006_m_00001_1 然后查看一下jobtracker的日志: 2015-01-05 21:43:23,724 INFO org.apache.hadoop.mapred.JobInProgress:

sparkf:spark-sql替换hive查询引擎

sparkf:spark-sql替换hive查询引擎 CONSOLE# WARNING: Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases. hive 查询的时候经常会提醒这一句,那就改成 spark-s

使用hive查询把访问网络流量会话化

<Hive编程指南>最后一章的Outbrain案例中,有一个把访问网络流量会话化的简单实现,但按照它的查询出来的结果是错的,于是自己重写了一个. 一.问题提出(摘自书中原文) 为了分析网络流量,我们常常希望能够基于各种各样的标准来测量热度.一种方法就是将用户行为分解到会话中,一次会话代表单一的一次"使用"所包含的一系列操作.一个用户在一天内或者一个月中的某几天可以多次访问某个网站,但每一次访问肯定是不一样的. 那么,什么是一个会话呢?一种定义是指相隔不超过30分钟的一连串的

hive查询详解

查询的一些例子: 1.queryhive> SELECT name,subordinates[0] FROM employees;John Doe Mary SmithMary Smith Bill KingTodd Jones NULL2.expressionhive> SELECT upper(name),salary, deductions["Federal Taxes"],round(salary * (1 -deductions["Federal Tax

hive查询注意及优化tips

Hive是将符合SQL语法的字符串解析生成可以在Hadoop上执行的MapReduce的工具.使用Hive尽量按照分布式计算的一些特点来设计sql,和传统关系型数据库有区别, 所以需要去掉原有关系型数据库下开发的一些固有思维. 基本原则: 1:尽量尽早地过滤数据,减少每个阶段的数据量,对于分区表要加分区,同时只选择需要使用到的字段 select ... from A join B on A.key = B.key where A.userid>10 and B.userid<10 and A.