Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop 如何在配置单元中使用双分隔符?_Hadoop_Hive - Fatal编程技术网

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'), '\|')
这样做的结果是,您应该能够获取所需的列

有关更多内置函数,请参阅

注意:我无法在我所在的蜂巢中验证这一点,如果有一些小问题,很抱歉