スキャン操作は HBase のクエリーと同じです。scan 操作を使用して、複数の行を取得できます。結果の一部となる列を指定し、値をオブジェクトに変換する方法を指定するには、URI オプションまたはヘッダーを使用します。
<route>
<from uri="direct:in"/>
<to uri="hbase:mytable?operation=CamelHBaseScan&family=myfamily&qualifier=myqualifier&valueType=java.lang.Long&rowType=java.lang.String"/>
<to uri="log:out"/>
</route>
<route>
<from uri="direct:in"/>
<to uri="hbase:mytable?operation=CamelHBaseScan&family=myfamily&qualifier=myqualifier&valueType=java.lang.Long&rowType=java.lang.String"/>
<to uri="log:out"/>
</route>
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
たとえば、基準としてメッセージヘッダーとして使用してスキャンを実行するには、以下のように ModelAwareColumnMatchingFilter を使用できます。
<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&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>
<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&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>
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
上記のルートは、pojo に properties firstName と lastName がメッセージボディーとして渡されることを想定し、これらのプロパティーを取得し、メッセージヘッダーの一部として追加します。デフォルトのマッピングストラテジーは、ヘッダーを HBase 列にマッピングし、そのモデルを ModelAwareColumnMatchingFilter に渡すモデルオブジェクトを作成します。このフィルターは、モデルに一致する列を含まない行を除外します。これは、たとえばクエリーと同様です。