142.5. Spring Boot Auto-Configuration
コンポーネントは、以下に記載される 4 つのオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.hbase.configuration | 共有設定を使用するには、以下を行います。オプションは org.apache.hadoop.conf.Configuration タイプです。 | String | |
camel.component.hbase.enabled | hbase コンポーネントを有効にします | true | Boolean |
camel.component.hbase.pool-max-size | HTable プール内のテーブルごとに保持する参照の最大数。デフォルト値は 10 です。 | 10 | Integer |
camel.component.hbase.resolve-property-placeholders | 起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。 | true | Boolean |
142.5.1. Put 操作
HBase は列ベースのストアであり、特定の行の特定の列にデータを格納できます。列はファミリーにグループ化されるため、列を指定するには、列ファミリーとその列の修飾子を指定する必要があります。特定の列にデータを格納するには、列と行の両方を指定する必要があります。
camel ルートから HBase にデータを格納する最も単純なシナリオは、メッセージボディーの一部を指定された HBase 列に格納することです。
<route> <from uri="direct:in"/> <!-- Set the HBase Row --> <setHeader headerName="CamelHBaseRowId"> <el>${in.body.id}</el> </setHeader> <!-- Set the HBase Value --> <setHeader headerName="CamelHBaseValue"> <el>${in.body.value}</el> </setHeader> <to uri="hbase:mytable?operation=CamelHBasePut&family=myfamily&qualifier=myqualifier"/> </route>
上記のルートは、メッセージボディーに id および value プロパティーを持つオブジェクトが含まれていることを前提としており、id で指定された行の HBase 列 myfamily:myqualifier に value の内容を格納します。複数の列/値のペアを指定する必要がある場合は、追加の列マッピングを指定するだけで済みます。RowId2、RowId3、RowId4 など、2 番目のヘッダー以降の数字を使用する必要があることに注意してください。最初のヘッダーのみ番号 1 がありません。
<route> <from uri="direct:in"/> <!-- Set the HBase Row 1st column --> <setHeader headerName="CamelHBaseRowId"> <el>${in.body.id}</el> </setHeader> <!-- Set the HBase Row 2nd column --> <setHeader headerName="CamelHBaseRowId2"> <el>${in.body.id}</el> </setHeader> <!-- Set the HBase Value for 1st column --> <setHeader headerName="CamelHBaseValue"> <el>${in.body.value}</el> </setHeader> <!-- Set the HBase Value for 2nd column --> <setHeader headerName="CamelHBaseValue2"> <el>${in.body.othervalue}</el> </setHeader> <to uri="hbase:mytable?operation=CamelHBasePut&family=myfamily&qualifier=myqualifier&family2=myfamily&qualifier2=myqualifier2"/> </route>
uri オプション、メッセージヘッダー、または両方の組み合わせを使用できることを覚えておくことが重要です。uri の一部として定数を指定し、ヘッダーとして動的な値を指定することをお勧めします。ヘッダーと uri の両方で何かが定義されている場合は、ヘッダーが使用されます。
142.5.2. Get 操作
Get 操作は、指定された HBase 行から 1 つ以上の値を取得するために使用される操作です。取得する値を指定するには、それらを uri の一部またはメッセージヘッダーとして指定するだけです。
<route> <from uri="direct:in"/> <!-- Set the HBase Row of the Get --> <setHeader headerName="CamelHBaseRowId"> <el>${in.body.id}</el> </setHeader> <to uri="hbase:mytable?operation=CamelHBaseGet&family=myfamily&qualifier=myqualifier&valueType=java.lang.Long"/> <to uri="log:out"/> </route>
上記の例では、get 操作の結果は CamelHBaseValue という名前のヘッダーとして保存されます。
142.5.3. Delete 操作
また、camel-hbase を使用して HBase の削除操作を実行することもできます。削除操作は行全体を削除します。指定する必要があるのは、メッセージヘッダーの一部として 1 つ以上の行だけです。
<route> <from uri="direct:in"/> <!-- Set the HBase Row of the Get --> <setHeader headerName="CamelHBaseRowId"> <el>${in.body.id}</el> </setHeader> <to uri="hbase:mytable?operation=CamelHBaseDelete"/> </route>
142.5.4. スキャン操作。
スキャン操作は、HBase のクエリーに相当します。スキャン操作を使用して、複数の行を取得できます。結果の一部にする列を指定し、値をオブジェクトに変換する方法を指定するには、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 は選択されたマッピングストラテジーをメッセージに適用し、マッピングをモデル化するオブジェクトを作成し、そのオブジェクトをフィルターに渡します。
たとえば、メッセージヘッダーを条件として使用してスキャンを実行するには、以下に示すように 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 にプロパティー firstName と lastName がメッセージボディーとして渡されることを想定しており、これらのプロパティーを取得して、メッセージヘッダーの一部として追加します。デフォルトのマッピングストラテジーは、ヘッダーを HBase 列にマップするモデルオブジェクトを作成し、そのモデルに ModelAwareColumnMatchingFilter を渡します。フィルターは、モデルに一致する列を含まない行を除外します。例によるクエリーのようなものです。