xml—存储在字段中的html被拆分为多行

nvbavucw  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(318)

我有一张放Parquet文件的Hive桌。这些行要么保存一个html页面,要么保存一个简单的字符串。当我尝试一个简单的选择

select text from table

我把整个html作为一行。

1 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"     "http://www.w3.org/


但当我使用任何过滤器时

select text from table where text rlike 'xml';

html中的每个标记都显示为一个单独的行。这样地

1 <?xml version="1.0" encoding="UTF-8"?>
2   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4   <html xmlns="http://www.w3.org/1999/xhtml">

为什么会这样?
编辑
我认为这与换行符有关,但在本例中,第一个select应该返回与第二个select相同的结果,而第二个select没有返回。
也。这篇文章说,这应该不是一个问题的Parquet地板无论如何。

hpcdzsge

hpcdzsge1#

好像是新台词。更换后

regexp_replace(text, '\n', '') as text

我可以将html作为一个字符串来处理。

vaj7vani

vaj7vani2#

rlike是基于正则表达式的。
reference:如果a或b为null,则为rlike b null;如果a的任何子字符串(可能为空)与java正则表达式b匹配,则为true;否则为false。例如,“foobar”rlike“foo”的计算结果为true,“foobar”rlike“^f.*r$”的计算结果也是true。
所以声明 select text from table where text rlike 'xml'; 将很可能检索包含字符“x”、“m”、“l”的文本的所有子字符串,同时将标记之间的空格视为分隔符。

select text from table where text like '%xml%'

相关问题