HIVE: Transform应用实例

数据文件内容

steven:100;steven:90;steven:99^567^22
ray:90;ray:98^456^30
Tom:81^222^33

期望最终放到数据库的数据格式如下:

steven    100    567     22
steven    90      567     22
steven    99      567     22
ray       90      456    30
ray       98      456    30
Tom       81      222    33

Specifically, if you want to return a different number of columns, or a different number of rows for a given input row, then yu need to perform what hive calls a transform.

1.创建表存储原始数据

create table u_data(col1 string, code int, age int) ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘^‘ STORED AS TEXTFILE;

2.加载数据

load data local inpath ‘/home/stevenxia/data1‘ overwrite into table u_data;

3.编写transform脚本

#!/usr/bin/python
import sys
for line in sys.stdin:
 values = line.split()
 tmp = values[0]
 key_values = tmp.split(";")
 for kv in key_values:
  k = kv.split(":")[0]
  v = kv.split(":")[1]
  print ‘\t‘.join([k,v,values[1],values[2]])

4.把脚本部署到node节点, 位置 /home/stevenxia/u.py

5.这样hive就可以使用了

select transform(u.col1, u.code, u.age) using ‘/home/stevenxia/u.py‘ as (col1, col2, col3, col4) from (select * from u_data) as u;

运行结果

时间: 2024-07-30 13:42:48

HIVE: Transform应用实例的相关文章

HIVE Transform using 用法

select TRANSFORM(*, *, *) using 'python filter.py' as (*, *, *) from t_1 HIVE支持pipe操作,将select出来的字段,用我们的脚本进行“操作” 1, 分隔符为 \t 并没有采用hive原有的分隔符 \x01 之类的.

hive transform函数介绍

hive 提供了通过脚本定制 mapper 和 reducer 的功能,这一功能需要用到 transform 函数. 默认情况下, transform 函数中带入的参数会被用 '\t 分隔开,并且以字符串对方式传入到用户脚本中.输入中 NULL 值会被转换成字符串 '\N'.脚本的输出使用的分隔符也是 '\t',同时 '\N' 会再次被转化为 NULL.需要注意的是,当 transform 当参数中含有 '\t' 的时候,用户需要手动处理这些 '\t' 以免脚本里面出错.这里是一个使用样例: F

HIVE: UDF应用实例

数据文件内容 TEST DATA HERE Good to Go 我们准备写一个函数,把所有字符变为小写. 1.开发UDF package MyTestPackage; import org.apache.hadoop.hive.ql.exec.UDF; import org.apache.hadoop.io.Text; public class ToLowerCase extends UDF { public Text evaluate(final Text s) { return new T

hive 文件系统学习实例

Hive存储是基于hadoop hdfs文件系统的,通过默认内嵌的Derby 数据库或外部数据库系统(如mysql)组织元数据访问,下面就通过实际案例描述其存储过程. 1, 在hive 中创建表,然后把外部csv文件导入其中(外部文件为Batting.csv, 内部表为temp_batting): hive>create table temp_batting(col_value STRING); hive> show tables;OKtemp_batting... hive>LOAD

Hive学习之路 (二十)Hive 执行过程实例分析

一.Hive 执行过程概述 1.概述 (1) Hive 将 HQL 转换成一组操作符(Operator),比如 GroupByOperator, JoinOperator 等 (2)操作符 Operator 是 Hive 的最小处理单元 (3)每个操作符代表一个 HDFS 操作或者 MapReduce 作业 (4)Hive 通过 ExecMapper 和 ExecReducer 执行 MapReduce 程序,执行模式有本地模式和分 布式两种模式 2.Hive 操作符列表 3.Hive 编译器的

hive操作DML

-- 向数据表中加载文件,不会对数据进行任何转换,load操作只是复制(本地到hdfs).移动(hdfs上的文件)-- 如果表包含分区,则必须指定每个分区的分区名,filepath可以引用一个文件或一个目录-- 如果数据在hdfs上,且filepath不是绝对的,则hive会相对于/user/进行解释,会移动(记住)-- 如果指定了overwrite,会先删除目标表,再移动数据.如果没有且有文件名冲突,那么现有的文件会被新文件替换.load data [local] inpath 'filepa

Hive项目开发环境搭建(Eclipse\MyEclipse + Maven)

写在前面的话 可详细参考,一定得去看 HBase 开发环境搭建(Eclipse\MyEclipse + Maven) Zookeeper项目开发环境搭建(Eclipse\MyEclipse + Maven) 我这里,相信,能看此博客的朋友,想必是有一定基础的了.我前期写了大量的基础性博文.可以去补下基础. 步骤一:File  ->  New  -> Project   ->  Maven Project 步骤二:自行设置,待会创建的myHBase工程,放在哪个目录下. 步骤三: 步骤四:

《Unity_API解析》 第十二章 Transform类

Transform类继承自Component类,并实现了IEnumberable接口.Transform是GameObject必须拥有的一个组件,用来管理所在GameObject对象的坐标位置.旋转角度和大小缩放.由于Transform实现了Ienumberable接口,于是可以在程序中使用foreach()方法快速遍历子物体的Transform结构.即: void Start() { foreach (Transform item in transform) { } } Transform类实

hive三种方式区别和搭建、HiveServer2环境搭建、HWI环境搭建和beeline环境搭建

说在前面的话 以下三种情况,最好是在3台集群里做,比如,master.slave1.slave2的master和slave1都安装了hive,将master作为服务端,将slave1作为服务端. hive三种方式区别和搭建 Hive中metastore(元数据存储)的三种方式: a)内嵌Derby方式 b)Local方式 c)Remote方式 1.本地derby这种方式是最简单的存储方式,只需要在hive-site.xml做如下配置便可<?xml version="1.0"?&g