Hive中常用的查询命令

日志数据的统计处理在这里反倒没有什么特别之处,就是一些 SQL 语句而已,也没有什么高深的技巧,不过还是列举一些语句示例,以示 hive 处理数据的方便之处,并展示 hive 的一些用法。

a)           hive 添加用户定制功能,自定义功能都位于 hive_contrib.jar 包中

add jar /opt/hadoop/hive-0.5.0-bin/lib/hive_contrib.jar;

b)          统计每个关键词的搜索量,并按搜索量降序排列,然后把结果存入表 keyword_20100603 

create table keyword_20100603 as select keyword,count(keyword) as count from searchlog_20100603 group by keyword order by count desc;

c)          统计每类用户终端的搜索量,并按搜索量降序排列,然后把结果存入表 device_20100603 

create table device_20100603 as select device,count(device) as count from searchlog_20100603 group by device order by count desc;

d)          创建表 time_20100603 ,使用自定义的 INPUTFORMAT  OUTPUTFORMAT ,并指定表数据的真实存放位置在 '/LogAnalysis/results/time_20100603'  HDFS 路径),而不是放在 hive 自己的数据目录中

create external table if not exists time_20100603(time string, count int) stored as INPUTFORMAT 'com.aspire.search.loganalysis.hive.XmlResultInputFormat' OUTPUTFORMAT 'com.aspire.search.loganalysis.hive.XmlResultOutputFormat' LOCATION '/LogAnalysis/results/time_20100603';

e)          统计每秒访问量 TPS ,按访问量降序排列,并把结果输出到表 time_20100603 中,这个表我们在上面刚刚定义过,其真实位置在 '/LogAnalysis/results/time_20100603' ,并且由于 XmlResultOutputFormat 的格式化,文件内容是 XML 格式。

insert overwrite table time_20100603 select time,count(time) as count from searchlog_20100603 group by time order by count desc;

f)           计算每个搜索请求响应时间的最大值,最小值和平均值

insert overwrite table response_20100603 select max(responsetime) as max,min(responsetime) as min,avg(responsetime) as avg from searchlog_20100603;

g)          创建一个表用于存放今天与昨天的关键词搜索量和增量及其增量比率,表数据位于'/LogAnalysis/results/keyword_20100604_20100603' ,内容将是 XML 格式。

create external table if not exists keyword_20100604_20100603(keyword string, count int, increment int, incrementrate double) stored as INPUTFORMAT 'com.aspire.search.loganalysis.hive.XmlResultInputFormat' OUTPUTFORMAT 'com.aspire.search.loganalysis.hive.XmlResultOutputFormat' LOCATION '/LogAnalysis/results/keyword_20100604_20100603';

h)          设置表的属性,以便 XmlResultInputFormat  XmlResultOutputFormat 能根据 output.resulttype 的不同内容输出不同格式的 XML 文件。

alter table keyword_20100604_20100603 set tblproperties ('output.resulttype'='keyword');

i)            关联今天关键词统计结果表( keyword_20100604 )与昨天关键词统计结果表( keyword_20100603 ),统计今天与昨天同时出现的关键词的搜索次数,今天相对昨天的增量和增量比率,并按增量比率降序排列,结果输出到刚刚定义的 keyword_20100604_20100603 表中,其数据文件内容将为 XML 格式。

insert overwrite table keyword_20100604_20100603 select cur.keyword, cur.count, cur.count-yes.count as increment, (cur.count-yes.count)/yes.count as incrementrate from keyword_20100604 cur join keyword_20100603 yes on (cur.keyword = yes.keyword) order by incrementrate desc;

### 常用Hive命令列表及使用示例 #### 1. **创建表** Hive支持创建内部表(管理表)和外部表。创建表的基本语法如下: ```sql -- 创建内部表 CREATE TABLE student ( id INT, name STRING, age INT ); -- 创建外部表 CREATE EXTERNAL TABLE IF NOT EXISTS logs ( id STRING, event STRING ) LOCATION '/user/hive/logs'; ``` - 外部表在删除时不会删除数据文件,仅删除元数据[^3]。 #### 2. **删除表** 删除表的操作会移除表的元数据以及表中的数据(如果是管理表)。 ```sql -- 删除内部表 DROP TABLE IF EXISTS student; -- 删除外部表(仅删除元数据) DROP TABLE IF EXISTS logs; ``` #### 3. **加载数据** Hive支持从本地文件系统或HDFS加载数据到表中。 ```sql -- 从本地加载数据到表中 LOAD DATA LOCAL INPATH '/path/to/student.csv' INTO TABLE student; -- 从HDFS加载数据到表中 LOAD DATA INPATH '/user/hive/input/student.csv' INTO TABLE student; ``` #### 4. **导出数据** Hive支持将表数据导出到HDFS路径中。 ```sql -- 导出数据到HDFS EXPORT TABLE student TO '/user/hive/warehouse/export/student'; ``` #### 5. **导入数据** Hive支持从HDFS路径导入数据到表中,前提是已经通过`EXPORT`导出数据。 ```sql -- 导入数据到指定Hive表中 IMPORT TABLE student2 FROM '/user/hive/warehouse/export/student'; ``` #### 6. **查询操作** Hive支持类SQL的查询语法,包括过滤、聚合、连接等操作。 ```sql -- 查询所有数据 SELECT * FROM student; -- 条件查询 SELECT * FROM student WHERE age > 20; -- 聚合查询 SELECT age, COUNT(*) AS count FROM student GROUP BY age; -- 连接查询 SELECT a.id, a.name, b.score FROM student a JOIN scores b ON a.id = b.student_id; ``` #### 7. **修改表结构** Hive支持对表结构进行修改,例如添加列或修改列名。 ```sql -- 添加列 ALTER TABLE student ADD COLUMNS (email STRING); -- 修改列名 ALTER TABLE student CHANGE COLUMN name full_name STRING; ``` #### 8. **分区表操作** Hive支持分区表,用于提高查询性能。 ```sql -- 创建分区表 CREATE TABLE sales ( product_id INT, amount DOUBLE ) PARTITIONED BY (country STRING); -- 加载数据到指定分区 INSERT INTO TABLE sales PARTITION (country='US') SELECT product_id, amount FROM sales_data WHERE country = 'US'; ``` #### 9. **Hive Shell命令** Hive Shell支持一些常用命令,如查看表结构、显示数据库等。 ```bash # 查看表结构 DESCRIBE student; # 显示所有表 SHOW TABLES; # 显示数据库 SHOW DATABASES; # 切换数据库 USE mydatabase; ``` #### 10. **HiveServer2连接** HiveServer2允许通过JDBC或Beeline连接Hive服务。 ```bash # 启动HiveServer2 hive --service hiveserver2 # 使用Beeline连接HiveServer2 beeline -u jdbc:hive2://localhost:10000 -n username ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值