我试图创建一个aws雅典娜表使用regexserde。。由于一些导出问题,我不能使用jsonserde。 2019-04-11T09:05:16.775Z {"timestamp":"data0","level":"data1","thread":data2","logger":"data3","message":"data4","context":"data5"}
我试图用regex获取json值,但没有任何运气。
CREATE EXTERNAL TABLE IF NOT EXISTS dsfsdfs.mecs3(
`timestamp` string,
`level` string,
`thread` string,
`logger` string,
`message` string,
`context` string
)
)ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
"input.regex" = "[ :]+(\\"[^\"]*\\")"
)LOCATION 's3://thisisates/'
错误:配置单元\u光标\u错误:匹配组的数目与列的数目不匹配
我不是正则表达式的Maven,这对我会有很大的帮助。
谢谢,比尔。
2条答案
按热度按时间jc3wubiy1#
要让它工作起来可能会非常困难- 即使您可以编写一个regex来捕获json结构中的列,您能保证所有json文档都以相同的顺序呈现属性吗?json本身考虑
{"a": 1, "b": 2}
以及{"b": 2, "a": 1}
等价地,这么多json库不能保证,甚至不关心排序。另一种方法是创建一个包含两列的表:
timestamp
以及data
,作为一个带有正则表达式的正则表达式表,正则表达式包含两个捕获组,时间戳和行的其余部分- 或者,如果时间戳后面的字符是一个制表符(如果是一个空格,它将不起作用,因为json将包含空格),则可能作为csv表:(regex假设时间戳和json结构之间有一个空格,根据需要进行更改)。
该表本身不太可用,但接下来您可以创建一个从json结构中提取属性的视图:
(
mecs3_raw
这张table有table吗timestamp
以及data
(列)这会给你你想要的,而且会少很多错误。
ufj5ltwl2#
尝试正则表达式:
(?<=")[^\"]*(?=\" *(?:,|}))
演示