142.5.4. 扫描操作.


扫描操作等同于 HBase 中的查询。您可以使用扫描操作来检索多行。指定结果中的列应当是什么列,同时指定如何使用 uri 选项或标头将值转换为对象。

        <route>
            <from uri="direct:in"/>
            <to uri="hbase:mytable?operation=CamelHBaseScan&amp;family=myfamily&amp;qualifier=myqualifier&amp;valueType=java.lang.Long&amp;rowType=java.lang.String"/>
            <to uri="log:out"/>
        </route>

在这种情况下,您还需要指定过滤器列表来限制结果。您可以将过滤器列表指定为 uri,并且 camel 只返回满足所有过滤器的行。
要有一个可以了解作为消息一部分的信息的过滤器,camel 定义 ModelAwareFilter。这将允许您的过滤器考虑消息和映射策略定义的模型。
当使用 ModelAwareFilter camel-hbase 时,将所选映射策略应用到消息中,这将创建一个对象来建模映射,并将该对象传递到 Filter。

例如,要使用 作为消息标头执行扫描,您可以使用 ModelAwareColumnMatchFilter,如下所示。

        <route>
            <from uri="direct:scan"/>
            <!-- Set the Criteria -->
            <setHeader headerName="CamelHBaseFamily">
                <constant>name</constant>
            </setHeader>
            <setHeader headerName="CamelHBaseQualifier">
                <constant>first</constant>
            </setHeader>
            <setHeader headerName="CamelHBaseValue">
                <el>in.body.firstName</el>
            </setHeader>
            <setHeader headerName="CamelHBaseFamily2">
                <constant>name</constant>
            </setHeader>
            <setHeader headerName="CamelHBaseQualifier2">
                <constant>last</constant>
            </setHeader>
            <setHeader headerName="CamelHBaseValue2">
                <el>in.body.lastName</el>
            </setHeader>
            <!-- Set additional fields that you want to be return by skipping value -->
            <setHeader headerName="CamelHBaseFamily3">
                <constant>address</constant>
            </setHeader>
            <setHeader headerName="CamelHBaseQualifier3">
                <constant>country</constant>
            </setHeader>
            <to uri="hbase:mytable?operation=CamelHBaseScan&amp;filters=#myFilterList"/>
        </route>

        <bean id="myFilters" class="java.util.ArrayList">
            <constructor-arg>
                <list>
                    <bean class="org.apache.camel.component.hbase.filters.ModelAwareColumnMatchingFilter"/>
                </list>
            </constructor-arg>
        </bean>

上面的路由假定 pojo 具有属性 firstName,而 lastName 则作为消息正文传递,它会采用这些属性并将它们作为消息标头的一部分来添加。默认映射策略会创建一个模型对象,它将标头映射到 HBase 列,并将模型用于 ModelAwareColumnMatchingFilter。过滤器将过滤出任何行,它们不包含与模型匹配的列。它类似于以下示例查询。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.