文章讨论了如何将Oracle中的replace函数,转换为Hive的regexp_replace函数进行字符串替换。在Oracle中,replace函数接受2个参数,而在Hive中需要3个参数,第三个参数可设为空字符串。同时,文章还提到了在使用concat函数时,处理转义符需要使用6个反斜杠进行转义。 摘要由CSDN通过智能技术生成

oracle2个参数的replace转换成hive实现

replace(abcedf, 'edf') = 'efls'  ---原oracl格式
regexp_replace(abcedf, 'edf','') ='efls'   ----hive格式

总结:oracle支持传入2个参数,但是hive支持传入3个参数,那么可以将第三个参数写为空字符串

转义符处理

concat('STAVAL','\\\\\\', substr(acctte_code, 1, 3))  

对于concat函数中加“\”分隔符需要使用6转义符

searchvalue 必须。规定子字符串或要替换的模式的 RegExp 对象。请注意,如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不是首先被转换为 RegExp 对象。 newvalue 必需。一个字符串值。规定了替换文本或生成替换文本的函数。 String 一个... size(列名):求array、map长度 map_keys(列名):拿map里所有key值 , map_values 拿所有value值 array_contains(列名,'足球'):查看array中是否包含 sort_array(列名):对array排序 类型转换函数 cast(列名as int):列转为int类型 日期函数 from_unixtime(1632384337,'yyyy-MM-dd HH:mm:ss'), --时间戳转年月日 unix_timesta.. A <=> B 所有原始类型 对于非空操作数,使用EQUAL(=)运算符返回相同的结果,但如果两个均为NULL,则返回TRUE,如果其中之一为NULL,则返回FALSE。(从0.9.0版开始。) 所有原始类型 ```java import org.apache.hadoop.hive.ql.exec.UDFArgumentException; import org.apache.hadoop.hive.ql.exec.UDFArgumentLengthException; import org.apache.hadoop.hive.ql.metadata.HiveException; import org.apache.hadoop.hive.ql.udf.generic.GenericUDTF; import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.StructObjectInspector; import org.apache.hadoop.io.Text; import java.util.ArrayList; public class MyUDTF extends GenericUDTF { @Override public StructObjectInspector initialize(ObjectInspector[] args) throws UDFArgumentException { // 检查参数个数是否正确 if (args.length != 2) { throw new UDFArgumentLengthException("MyUDTF函数需要传入两个参数"); // 检查参数类型是否正确 if (!args[0].getCategory().equals(ObjectInspector.Category.PRIMITIVE) || !args[1].getCategory().equals(ObjectInspector.Category.PRIMITIVE)) { throw new UDFArgumentException("MyUDTF函数需要传入两个原始类型参数"); // 定义输出列名和类型 ArrayList<String> fieldNames = new ArrayList<String>(); ArrayList<ObjectInspector> fieldOIs = new ArrayList<ObjectInspector>(); fieldNames.add("output_col1"); fieldNames.add("output_col2"); fieldOIs.add(args[0]); fieldOIs.add(args[1]); return ObjectInspectorFactory.getStandardStructObjectInspector(fieldNames, fieldOIs); @Override public void process(Object[] args) throws HiveException { Text input1 = (Text) args[0]; Text input2 = (Text) args[1]; // 处理逻辑 String output1 = input1.toString() + "_processed"; String output2 = input2.toString() + "_processed"; // 输出结果 forward(new Object[]{output1, output2}); @Override public void close() throws HiveException { // 关闭操作 这是一个简单的示例代码,你可以根据自己的需求进行修改和补充。在使用过程中,需要将该代码编译成 jar 包,并在 Hive 中注册该 UDTF 函数,才能够使用。 Hive beeline客户端启动报错Could not open client transport with JDBC Uri: jdbc:hive2://hadoop101:10000: Fail Exception in thread “main“ java.net.ConnectException: Call From hadoop101/192.168.10.12 to hadoop101 Exception in thread “main“ java.net.ConnectException: Call From hadoop101/192.168.10.12 to hadoop101 改完报9000的错 使用SparkStreaming时Jackson报错java lang ClassNotFoundException com fasterxml jackson core 记得在哪里看到databind默认依赖其他两个包,所以只用导入databind就可以,但是要保证databind和其他两个包的版本一致,例如databind是2,那么其他两个包也只能用2,不能用1.99 Exception in thread “main“ java.net.ConnectException: Call From hadoop101/192.168.10.12 to hadoop101 Pluto538: 改完又报9000的错了