hive concat_ws源代码
其他相关源码可以到以下链接查看: https://github.com/apache/hive/tree/master/ql/src/java/org/apache/hadoop/hive/ql/udf/generic
package org.apache.hadoop.hive.ql.udf.generic; import org.apache.hadoop.hive.ql.exec.Description; import org.apache.hadoop.hive.ql.exec.UDFArgumentException; import org.apache.hadoop.hive.ql.exec.UDFArgumentLengthException; import org.apache.hadoop.hive.ql.exec.UDFArgumentTypeException; import org.apache.hadoop.hive.ql.metadata.HiveException; import org.apache.hadoop.hive.serde.serdeConstants; import org.apache.hadoop.hive.serde2.objectinspector.ListObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector.Category; import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector.PrimitiveCategory; import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory; import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorUtils; import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorUtils.PrimitiveGrouping; import org.apache.hadoop.hive.serde2.objectinspector.primitive.StringObjectInspector; import org.apache.hadoop.io.Text; /** * Generic UDF for string function * <code>CONCAT_WS(sep, [string | array(string)]+)</code>. * This mimics the function from * MySQL http://dev.mysql.com/doc/refman/5.0/en/string-functions.html# * function_concat-ws * * @see org.apache.hadoop.hive.ql.udf.generic.GenericUDF */ @Description(name = "concat_ws", value = "_FUNC_(separator, [string | array(string)]+) - " + "returns the concatenation of the strings separated by the separator.", extended = "Example:\n" + " > SELECT _FUNC_('.', 'www', array('facebook', 'com')) FROM src LIMIT 1;\n" + " 'www.facebook.com'") public class GenericUDFConcatWS extends GenericUDF { private transient ObjectInspector[] argumentOIs; @Override public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumentException { if (arguments.length < 2) { throw new UDFArgumentLengthException( "The function CONCAT_WS(separator,[string | array(string)]+) " + "needs at least two arguments."); } // check if argument is a string or an array of strings for (int i = 0; i < arguments.length; i++) { switch(arguments[i].getCategory()) { case LIST: if (isStringOrVoidType( ((ListObjectInspector) arguments[i]).getListElementObjectInspector())) { break; } case PRIMITIVE: if (isStringOrVoidType(arguments[i])) { break; } default: throw new UDFArgumentTypeException(i, "Argument " + (i + 1) + " of function CONCAT_WS must be \"" + serdeConstants.STRING_TYPE_NAME + " or " + serdeConstants.LIST_TYPE_NAME + "<" + serdeConstants.STRING_TYPE_NAME + ">\", but \"" + arguments[i].getTypeName() + "\" was found."); } } argumentOIs = arguments; return PrimitiveObjectInspectorFactory.writableStringObjectInspector; } protected boolean isStringOrVoidType(ObjectInspector oi) { if (oi.getCategory() == Category.PRIMITIVE) { if (PrimitiveGrouping.STRING_GROUP == PrimitiveObjectInspectorUtils.getPrimitiveGrouping( ((PrimitiveObjectInspector) oi).getPrimitiveCategory()) || ((PrimitiveObjectInspector) oi).getPrimitiveCategory() == PrimitiveCategory.VOID) { return true; } } return false; } private final Text resultText = new Text(); @Override public Object evaluate(DeferredObject[] arguments) throws HiveException { if (arguments[0].get() == null) { return null; } String separator = PrimitiveObjectInspectorUtils.getString( arguments[0].get(), (PrimitiveObjectInspector)argumentOIs[0]); StringBuilder sb = new StringBuilder(); boolean first = true; for (int i = 1; i < arguments.length; i++) { if (arguments[i].get() != null) { if (first) { first = false; } else { sb.append(separator); } if (argumentOIs[i].getCategory().equals(Category.LIST)) { Object strArray = arguments[i].get(); ListObjectInspector strArrayOI = (ListObjectInspector) argumentOIs[i]; boolean strArrayFirst = true; for (int j = 0; j < strArrayOI.getListLength(strArray); j++) { if (strArrayFirst) { strArrayFirst = false; } else { sb.append(separator); } sb.append(strArrayOI.getListElement(strArray, j)); } } else { sb.append(PrimitiveObjectInspectorUtils.getString( arguments[i].get(), (PrimitiveObjectInspector)argumentOIs[i])); } } } resultText.set(sb.toString()); return resultText; } @Override public String getDisplayString(String[] children) { assert (children.length >= 2); return getStandardDisplayString("concat_ws", children); } }
hive concat_ws源代码的更多相关文章
- hive UDAF源代码分析
sss /** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license a ...
- 037 对于HIVE架构的理解
0.发展 在hive公布源代码之后 公司又公布了presto,这个比较快,是基于内存的. impala:3s处理1PB数据. 1.Hive 能做什么,与 MapReduce 相比优势在哪里 关于hi ...
- Hive Web Interface的安装
Hive Web Interface,简称hwi,是Hive的Web接口. 首先,安装ant,下载ant,解压,并在/etc/profile中设置: export ANT_HOME=/opt/apac ...
- Hive内置函数和自定义函数的使用
一.内置函数的使用 查看当前hive版本支持的所有内置函数 show function; 查看某个函数的使用方法及作用,比如查看upper函数 desc function upper; 查看upper ...
- CIA Hive Beacon Infrastructure复现1——使用Apache mod_rewrite实现http流量分发
0x00 前言 2017年11月9日维基解密公布一个代号为Vault8的文档,包含服务器远程控制工具Hive的源代码和开发文档.开发文档中的框架图显示Hive支持流量分发功能,若流量有效,转发至Hon ...
- 远程调试hadoop各组件
远程调试对应用程序开发十分有用.例如,为不能托管开发平台的低端机器开发程序,或在专用的机器上(比如服务不能中断的 Web 服务器)调试程序.其他情况包括:运行在内存小或 CUP 性能低的设备上的 Ja ...
- 【转】大数据分析(Big Data OLAP)引擎Dremel, Tenzing 以及Impala
引自:http://blog.csdn.net/xhanfriend/article/details/8434896 对于数据分析师来说,SQL是主要的语言. Hive为Hadoop提供了支持SQL运 ...
- hive源代码解析之一hive主函数入口
hive其实做的就是解析一条sql然后形成到mapreduce任务,就是一个代码解释器.hive源代码本身就可以分为ql/metasotre/service/serde 这几块:其中 对于Hive来说 ...
- concat_ws 使用在hive spark-sql上的区别
concat_ws() 在hive中,被连接对象必须为string或者array<string>,否则报错如下: hive> select concat_ws(',',unix_ti ...
随机推荐
- HDU - 1232 畅通工程【并查集】
畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- Android 设置ImageView全屏
Android 设置ImageView全屏代码如下: <ImageView android:id="@+id/iv_image" android:scaleType=&quo ...
- 阿里百川HotFix2.0热修复初体验
博客原地址:http://blog.csdn.net/allan_bst/article/details/72904721 一.什么是热修复 热修复说白了就是"打补丁",比如你们公 ...
- hmm隐马尔可夫真的那么难吗?
hmm隐马尔可夫真的那么难吗? 首先上代码 这里是github上的关于hmm的:链接 概率计算问题:前向-后向算法 学习问题:Baum-Welch算法(状态未知) 预测问题:Viterbi算法 htt ...
- linux初学者-DNS集群篇
linux初学者-DNS集群篇 DNS服务器一般在使用时,为了缓解服务器的压力,多使用一个主DNS服务器,多个副DNS服务器,这些DNS服务器就组成了一个DNS集群. 在DNS主服务器配置好后,需要另 ...
- 【Machine Learning·机器学习】决策树之ID3算法(Iterative Dichotomiser 3)
目录 1.什么是决策树 2.如何构造一棵决策树? 2.1.基本方法 2.2.评价标准是什么/如何量化评价一个特征的好坏? 2.3.信息熵.信息增益的计算 2.4.决策树构建方法 3.算法总结 @ 1. ...
- 关于定时器Scheduled(cron)的问题
定时器配置步骤参考:http://blog.csdn.NET/sd4000784/article/details/7745947 下面给出cron参数中各个参数的含义: CRON表达式 含义 & ...
- go 学习笔记之工作空间
搭建好 Go 的基本环境后,现在可以正式开始 Go 语言的学习之旅,初学时建议在默认的 GOPATH 工作空间规范编写代码,基本目录结构大概是这个样子. . |-- bin | `-- hello.e ...
- SpringMvc新建实例配置
一.创建项目: 1.建立新的动态web项目: 2.为项目命名为:SpringMVC_01 3.添加tomcat运行时环境\依赖库 如果是MyEclipse的话创建web项目时就不需要此步骤 右键项目 ...
- x32下PsSetLoadImageNotifyRoutine的逆向
一丶简介 纯属兴趣爱好.特来逆向玩玩. PsSetLoadImageNotifyRoutine 是内核中用来监控模块加载.操作系统给我们提供的回调. 我们只需要填写对应的回调函数原型即可进行加监控. ...