在 Hive 中,如何使用“regexp_replace()”对标记值执行通配符搜索,以将其替换为公共值?

Posted

技术标签:

【中文标题】在 Hive 中,如何使用“regexp_replace()”对标记值执行通配符搜索,以将其替换为公共值?【英文标题】:In Hive, how to perform wild card search of a tag value using "regexp_replace()" to replace it with a common value? 【发布时间】:2021-06-12 16:12:58 【问题描述】:

我在多个由不同值组成的 Value 系列中出现了 string 标记。我需要使用 regexp_replace() 进行通配符搜索,读取所有此类 string 出现并用通用值“NULL”替换它们。

下面是一个示例 XML:

<ParentArray>
    <ParentFieldArray>
        <Value>
            <string>123</string>
            <string>234</string>
        </Value>
    </ParentFieldArray>
    <ParentFieldArray>
        <Value>
            <string>345</string>
            <string>456</string>
        </Value>
    </ParentFieldArray>
</ParentArray>

期望是读取所有的String标签值并用NULL替换它们。

【问题讨论】:

你想要 NULL 吗? 【参考方案1】:

使用

 regexp_replace(str,'(<string>)(\\d+)(</string>)','$1NULL$3')

演示:

select "<ParentArray>
    <ParentFieldArray>
        <Value>
            <string>123</string>
            <string>234</string>
        </Value>
    </ParentFieldArray>
    <ParentFieldArray>
        <Value>
            <string>345</string>
            <string>456</string>
        </Value>
    </ParentFieldArray>
</ParentArray>
" as str)

select regexp_replace(str,'(<string>)(\\d+)(</string>)','$1NULL$3') from mydata

结果:

<ParentArray>
        <ParentFieldArray>
            <Value>
                <string>NULL</string>
                <string>NULL</string>
            </Value>
        </ParentFieldArray>
        <ParentFieldArray>
            <Value>
                <string>NULL</string>
                <string>NULL</string>
            </Value>
        </ParentFieldArray>
    </ParentArray>

如果您不仅要替换值中的数字,包括空值,请使用:

select regexp_replace(str,'(<string>)(.*)(</string>)','$1NULL$3') from mydata

【讨论】:

以上是关于在 Hive 中,如何使用“regexp_replace()”对标记值执行通配符搜索,以将其替换为公共值?的主要内容,如果未能解决你的问题,请参考以下文章

在 Zeppelin 中如何使用 Hive

在 Zeppelin 中如何使用 Hive

如何在 Hive 中使用子查询

Flutter & Hive - 如何在 Hive 中保存重新排序的列表

如何在Hive中使用Map类型

如何在 Hive 中使用字典进行映射?