url的参数间的分隔符可以修改吗
发布网友
发布时间:2022-04-22 15:31
我来回答
共1个回答
热心网友
时间:2023-10-06 00:20
url的参数间的分隔符可以修改
PIG中输入输出分隔符默认是制表符\t,而到了hive中,默认变成了八进制的\001,
也就是ASCII: ctrl - A
Oct Dec Hex ASCII_Char
001 1 01 SOH (start of heading)
官方的解释说是尽量不和文中的字符重复,因此选用了 crtrl - A,单个的字符可以通过
row format delimited fields terminated by '#'; 指定,PIG的单个分隔符的也可以通过 PigStorage指定,
但是多个字符做分隔符呢?PIG是直接报错,而HIVE只认第一个字符,而无视后面的多个字符。
解决办法:
PIG可以自定义加载函数(load function):继承LoadFunc,重写几个方法就ok了,
而在hive中,自定义多分隔符(Multi-character delimiter strings),有2种方法可以实现:
1、利用RegexSe:
RegexSerDe是hive自带的一种序列化/反序列化的方式,主要用来处理正则表达式。
RegexSerDe主要下面三个参数:
input.regex
output.format.string
input.regex.case.insensitive
下面给出一个完整的范例:
01 add jar /home/june/hadoop/hive-0.8.1-bin/lib/hive_contrib.jar;
02 CREATE TABLE b(
03 c0 string,
04 c1 string,
05 c2 string)
06 ROW FORMAT
07 SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
08 WITH SERDEPROPERTIES
09 ( 'input.regex' = '([^,]*),,,,([^,]*),,,,([^,]*)',
10 'output.format.string' = '%1$s %2$s %3$s')
11 STORED AS TEXTFILE;
12
13 cat b.txt
14 1,,,,2,,,,3
15 a,,,,b,,,,c
16 9,,,,5,,,,7
17 load data local inpath 'b.txt' overwrite into table b;
18 select * from b