134.4.7. スキャン操作。
スキャン操作は 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>
この場合、結果を制限するためのフィルターの一覧も指定する必要があります。フィルターのリストを uri の一部として指定でき、Camel は すべて のフィルターを満たす行のみを返します。
メッセージに含まれる情報を認識するフィルターを設定するために、camel は ModelAwareFilter を定義します。これにより、フィルターはメッセージとマッピングストラテジーで定義されるモデルを考慮に入れることができます。
ModelAwareFilter camel-hbase を使用すると、選択したマッピングストラテジーが in メッセージに適用されます。これは、マッピングをモデル化するオブジェクトを作成し、そのオブジェクトを Filter に渡します。
たとえば、基準としてメッセージヘッダーとして使用してスキャンを実行するには、以下のように 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>
上記のルートは、pojo に properties firstName と lastName がメッセージボディーとして渡されることを想定し、これらのプロパティーを取得し、メッセージヘッダーの一部として追加します。デフォルトのマッピングストラテジーは、ヘッダーを HBase 列にマッピングし、そのモデルを ModelAwareColumnMatchingFilter に渡すモデルオブジェクトを作成します。このフィルターは、モデルに一致する列を含まない行を除外します。これは、たとえばクエリーと同様です。