Regex 其他记录之间的字符串列表加载错误配置单元
我被一个问题困住了,真的需要帮助 下面是我的数据集Regex 其他记录之间的字符串列表加载错误配置单元,regex,hadoop,hive,load,Regex,Hadoop,Hive,Load,我被一个问题困住了,真的需要帮助 下面是我的数据集 "counter","qid","i","qs","qt","tags","qvc","qac","aid","j","as","at" "1",563355,62701,0,1235000081,"php,error,gd,image-processing",220,2,563372,67183,2,1235000501 "2",563356,15842,10,1235000140,"lisp,scheme,clojure",1047,16,
"counter","qid","i","qs","qt","tags","qvc","qac","aid","j","as","at"
"1",563355,62701,0,1235000081,"php,error,gd,image-processing",220,2,563372,67183,2,1235000501
"2",563356,15842,10,1235000140,"lisp,scheme,clojure",1047,16,563358,15842,3,1235000177
所有列都用“,”分隔,第六列是标记,这是一个由2到5个标记组成的列表,也用“,”分隔。
我试图创建一个表,将标记作为字符串,也作为字符串数组,这两个表都从标记列表中给了我第一个值(在本例中为php
和lisp
),其余列为空
"1" 563355 62701 0 1235000081 "php NULL NULL NULL 220 2 563372
"2" 563356 15842 10 1235000140 "lisp NULL NULL NULL 1047 16 563358
期望输出:
"1" 563355 62701 0 1235000081 "php,error,gd,image-processing" 220 2 563372
"2" 563356 15842 10 1235000140 "lisp,scheme,clojure" 1047 16 563358
我做了一些研究,发现我可以编写一个REGEXSERDE模式来读取数据,我对这方面还不熟悉,我不知道如何编写regex模式。除了正则表达式还有别的方法吗。如果没有,有人能帮我写一个正则表达式模式吗
先谢谢你 最简单的方法是使用其他内容更改“,”分隔符 另一种方法是使用
这将帮助您做到这一点您可以使用配置单元外部表
create external table try3.tablename(
counter string,
qid int,
i int,
qs int,
qt int,
tags string,
qac int,
aid int )
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
'input.regex' = '(.*?),(.*?),(.*?),(.*?),(.*?),(\".*\"),(.*?),(.*?),.*'
)
STORED AS TEXTFILE
LOCATION '/somelocation'
更改分隔符并非易事,因为我的表有近50万条记录。然后使用serde将qouted数据作为输入使用serde将qouted数据作为输入