Hadoop 如何在配置单元中使用双分隔符?
假设我有一些数据样本行Hadoop 如何在配置单元中使用双分隔符?,hadoop,hive,Hadoop,Hive,假设我有一些数据样本行 site1^http://article1.com?datacoll=5|4|3|2|1&test=yes site1^http://article1.com?test=yes site1^http://article1.com?datacoll=5|4|3|2|1&test=yes 我想创建一个这样的表 创建表clicklogs(sitename字符串、url字符串) 以“^”结尾的行格式分隔字段 如您所见,我想提取url参数中的一些数据,即 data
site1^http://article1.com?datacoll=5|4|3|2|1&test=yes
site1^http://article1.com?test=yes
site1^http://article1.com?datacoll=5|4|3|2|1&test=yes
我想创建一个这样的表
创建表clicklogs(sitename字符串、url字符串)
以“^”结尾的行格式分隔字段
如您所见,我想提取url参数中的一些数据,即
datacoll=5 | 4 | 3 | 2 | 1
我还想处理那些由管道分隔的单独元素,这样我就可以对它们进行分组,例如,显示有多少URL的第二个位置为“4”,在本例中为2行。因此,在本例中,我有一个“url”字段,其中包含我想解析出来并在查询中使用的其他数据
问题是,在蜂箱中做这件事的最佳方式是什么
谢谢 这看起来与我几周前做的事情非常相似,我认为对您来说,最好的方法是应用预处理步骤(可能使用hadoop流),并将表的原型更改为:
create table clicklogs(sitename string, datacol Array<int>) row format delimited fields terminated by '^' collection items terminated by '|'
这看起来与我几周前做的事情非常相似,我认为在您的情况下,最好的方法是应用预处理步骤(可能使用hadoop流),并将表的原型更改为:
create table clicklogs(sitename string, datacol Array<int>) row format delimited fields terminated by '^' collection items terminated by '|'
首先,使用parse_url(string-urlString,string-partToExtract[,string-keyToExtract])
获取相关数据:
parse_url('http://article1.com?datacoll=5|4|3|2|1&test=yes', 'QUERY', 'datacol1')
这将返回'5 | 4 | 3 | 2 | 1'
,这使我们走到了一半。现在,使用split(string str,string pat)
将每个子分隔符中的分隔符拆分为一个数组:
split(parse_url(url, 'QUERY', 'datacol1'), '\|')
这样做的结果是,您应该能够获取所需的列
有关更多内置函数,请参阅
注意:我无法在我所在的配置单元中验证这一点,如果有一些小问题,很抱歉。首先,使用parse\u url(string-urlString,string-partToExtract[,string-keyToExtract])
获取相关数据:
parse_url('http://article1.com?datacoll=5|4|3|2|1&test=yes', 'QUERY', 'datacol1')
这将返回'5 | 4 | 3 | 2 | 1'
,这使我们走到了一半。现在,使用split(string str,string pat)
将每个子分隔符中的分隔符拆分为一个数组:
split(parse_url(url, 'QUERY', 'datacol1'), '\|')
这样做的结果是,您应该能够获取所需的列
有关更多内置函数,请参阅
注意:我无法在我所在的蜂巢中验证这一点,如果有一些小问题,很抱歉