Hive(七):HQL DML
- HQL DML 主要涉到对Hive表中数据操作,包含有:load、INSERT、DELETE、EXPORT and IMPORT,详细资料参见:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML
目录:
- Loading files into tables
- Inserting data into Hive Tables from queries
- Writing data into the filesystem from queries
- Inserting values into tables from SQL
- Delete
- 应用Demo
Loading files into tables:
- 语法:LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]
- 示例代码如下:
#创建表
CREATE TABLE web_log(viewTime INT, userid BIGINT, url STRING, referrer STRING, ip STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'; #导入文件数据
LOAD DATA LOCAL INPATH '/usr/zhu/table.txt' OVERWRITE INTO TABLE web_log; - OVERWRITE:
- 目标表(或者分区)中的内容(如果有)会被删除,然后再将 filepath 指向的文件/目录中的内容添加到表/分区中
- 如果目标表(分区)已经有一个文件,并且文件名和 filepath 中的文件名冲突,那么现有的文件会被新文件所替代
Inserting data into Hive Tables from queries:
- 语法:INSERT OVERWRITE TABLE tablename1 [PARTITION] select_statement1 FROM from_statement;
INSERT INTO TABLE tablename1 [PARTITION] select_statement1 FROM from_statement; - 示例代码:
#创建结构相同的表
create table empDemo as employee; #插入数据
insert into table empDemo select * from employee; #覆盖插入数据
insert overwrite table empDemo select * from employee;
Writing data into the filesystem from queries:
- 语法:INSERT OVERWRITE [LOCAL] DIRECTORY directory1 SELECT ... FROM ...
- 示例代码:
INSERT OVERWRITE LOCAL DIRECTORY './tmp/zhu' SELECT * FROM employee;
Inserting values into tables from SQL:
- 语法:INSERT INTO TABLE tablename VALUES values_row [, values_row ...]
示例代码:
#单行插入
insert into table employee values('','','tgzhu'); #多行插入
insert into table employee values('','','WangWu'),('','','ZhaoZhao');
Delete:
- 语法:DELETE FROM tablename [WHERE expression]
应用Demo:
- 以一个实际的应用Demo对Hive 的 DDL、DML 进行说明,过程如下
- 创建与HBase关联的外部表,HQL如下:
CREATE EXTERNAL TABLE if not exists Hive_CM_EvcRealTimeData(
Rowkey string,
RealTimeData_CarNo string,
RealTimeData_Time string,
RealTimeData_Speed decimal(20,8),
RealTimeData_Mileage decimal(20,8),
RealTimeData_HighestVoltageBatteryOrd int,
RealTimeData_Latitude decimal(20,8),
RealTimeData_Longitude decimal(20,8)
)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES('hbase.columns.mapping' = ':key,d:RealTimeData_CarNo, ata_Time,d:RealTimeData_Speed,d:RealTimeData_Mileage,d:RealTimeData_HighestVoltageBatteryOrd,d:RealTimeData_Latitude,d:RealTimeData_Longitude')
TBLPROPERTIES('hbase.table.name' = 'CM_EvcRealTimeData') - 创建一个用来保存计算结果的hive实表,如下:
CREATE TABLE if not exists Hive_CM_CarDailyRpt(
CarNo string,
DTime string,
OnLineCount int,
RunCount int,
Mileage decimal(20,8),
MaxSpeed decimal(20,8),
totalPower decimal(20,8),
AverageSpeed decimal(20,8),
CDI_BatteryFlag string,
CDI_CoordinatorFlag string
)
STORED AS TEXTFILE
- 计算并将结果插入实表,如下:
set hive.execution.engine = tez; Insert overwrite table Hive_CM_CarDailyRpt
select
CarNo,DTime,
CONVERT(int,SUM(CT)) as OnLineCount ,
CONVERT(int,SUM(CTSPEED)) as RunCount,
CONVERT(decimal(18,2),MAX(MILE)-MIN(MILE)) as Mileage ,
CONVERT(decimal(18,2),MAX(SPEED)) as MaxSpeed,
((MAX(MILE)-MIN(MILE))*0.2) as totalPower,
case when SUM(CTSPEED)>0 then CONVERT(decimal(18,2),((MAX(MILE)-MIN(MILE))/SUM(CTSPEED)))
else 0 end as AverageSpeed,
case when SUM(RealTimeData_HighestVoltageBatteryOrd)>0 then '' else '' end as BatteryFlag,
case when (SUM(RealTimeData_Latitude) + SUM(RealTimeData_Longitude)) >0 then '' else '' end as LatitudeFlag,
from
(
SELECT REALTIMEDATA_CARNO AS CARNO,
substring(RealTimeData_Time,1,8) as DTime,
1 AS CT,
CASE WHEN REALTIMEDATA_SPEED>0 THEN 1 ELSE 0 END AS CTSPEED,
CASE WHEN REALTIMEDATA_MILEAGE=0 THEN NULL ELSE REALTIMEDATA_MILEAGE END AS MILE,
CASE WHEN REALTIMEDATA_SPEED>200 then 0 else REALTIMEDATA_SPEED end AS SPEED,
RealTimeData_HighestVoltageBatteryOrd,
RealTimeData_Latitude,RealTimeData_Longitude
FROM CM_EvcRealTimeData
) t
group by CarNo,DTime
- 再将计算结果转存关系型数据库或HBase
Hive(七):HQL DML的更多相关文章
- Hive的HQL(2)
Hive基础(1) Hive的HQL(2) 1. HQL的数据定义,HQL是一种SQL方言,支持绝大部分SQL-92标准.但是和SQL的差异为:不支持行级别的操作,不支持事务等.HQL的语法接近于My ...
- Hive DDL、DML操作
• 一.DDL操作(数据定义语言)包括:Create.Alter.Show.Drop等. • create database- 创建新数据库 • alter database - 修改数据库 • dr ...
- Hive(六):HQL DDL
HQL语法基于 SqlLine(http://sqlline.sourceforge.net/),DDL主要包含数据库.函数.视图的创建.修改.删除,参考资料:(https://cwiki.apach ...
- Hive的HQL语句及数据倾斜解决方案
[版权申明:本文系作者原创,转载请注明出处] 文章出处:http://blog.csdn.net/sdksdk0/article/details/51675005 作者: 朱培 ID ...
- Apache Hive 执行HQL语句报错 ( 10G )
# 故障描述: hive > , ) as uuid, count(distinct(request_body["uuid"])) as count from log_bft ...
- Hive之 Hql语法解析
Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,可以将结构 化的数据文件映射为一张数据库表,并提供完整的SQL查 ...
- hive 标准hql建表语法格式
一.标准hql建表语法格式1.官方标准语法:(hql不区分大小写,下面[]里的属性是可选属性) 具体参考官网界面:HIVE官网建表说明文档 CREATE [EXTERNAL] TABLE [IF NO ...
- Hive DDL及DML操作
一.修改表 增加/删除分区 语法结构 ALTER TABLE table_name ADD [IF NOT EXISTS] partition_spec [ LOCATION 'location1' ...
- 将hive的hql执行结果保存到变量中
这里分别针对shell脚本和python脚本举例: shell脚本如下: 注意:在hive语句左右两边使用的是ESC键下面的点号,不是单引号. #!/usr/bin/env bash test1=`h ...
随机推荐
- 【转】Paxos算法深入分析
http://blog.csdn.net/anderscloud/article/details/7175209 在分布式系统设计领域,Paxos可谓是最重要一致性的算法.Google的大牛们称 ...
- 表视图控制器(TableViewController)(一)
1 创建一个UITableViewController并展示简单数据 1.1 问题 有很多移动客户端的应用都是采用表的形式来展示数据,因为表视图能使数据看起来更规整.更有调理,比如微信界面就是使用的表 ...
- C语言Makefile文件使用
C语言中代码Makefile文件的写法 单文件,例: #定义变量 CFLAGS=gcc #具体命令都需要一个入口,all: 这个就相当于入口,默认情况,执行第一次入口, #后面执行其他入口进行依赖,如 ...
- log4j常见问题
1.日志文件不能生成日期后缀 需求:想要生成的文件是以日期格式为后缀或者结尾的. 设置: log4j.appender.appenderName.DatePattern='.'yyyy-MM-dd 也 ...
- codeforce Error Correct System
题目大意: 给出两串n(1 ≤ n ≤ 200 000)个字母的字符串, 求出最多交换一对数, 使得不相同对数变少,求出不相同的对数以及交换的数的位置,若不需交换则输出-1,-1. 分析: 用矩阵记录 ...
- Sqlserver CheckPoint 在三种恢复模式中的不同表现
准备: 日志截断在下列情况下发生: 1.执行完 BACKUP LOG 语句时.2.在每次处理检查点时(如果数据库使用的是简单恢复模式).这包括 CHECKPOINT 语句所产生的显式检查点和系统生成的 ...
- Android ——Handler相关
layout文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:an ...
- Android—常用组件练习
新建一个文件“practice1.xml” 编写代码如下: <?xml version="1.0" encoding="utf-8"?> <L ...
- Windows && Linux 双系统
使用软件 EasyBCD 添加新条目--->NeoGrub--->安装--->配置 在弹出的文本中输入如下东西: title Install Backbox root (hd0,0) ...
- hdu1003 dp(最大子段和)
题意:给出一列数,求其中的最大子段和以及该子段的开头和结尾位置. 因为刚学过DP没几天,所以还会这题,我开了一个 dp[100002][2],其中 dp[i][0] 记录以 i 为结尾的最大子段的和, ...