141.4. HBase プロデューサー
前述のように、camel は HBase のプロデューサーエンドポイントを提供します。これにより、camel ルートを使用して HBase からデータを保存、削除、取得、またはクエリーできます。
hbase://table[?options]
ここで、table はテーブル名です。
サポートされている演算は次のとおりです。
- Put
- Get
- Delete
- スキャン
141.4.1. サポートされている URI オプション
HBase コンポーネントは、以下に示す 3 個のオプションをサポートしています。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
configuration (advanced) | 共有設定を使用するには | 設定 | |
poolMaxSize (Common) | HTable プール内のテーブルごとに保持する参照の最大数。デフォルト値は 10 です。 | 10 | int |
resolveProperty Placeholders (advanced) | 起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。 | true | boolean |
HBase エンドポイントは、URI 構文を使用して設定されます。
hbase:tableName
パスおよびクエリーパラメーターを使用します。
141.4.2. パスパラメーター (1 個のパラメーター):
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
tableName | 必須 テーブルの名前 | String |
141.4.3. クエリーパラメーター (16 個のパラメーター):
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
cellMappingStrategyFactory (common) | セルのマッピングを担当するカスタム CellMappingStrategyFactory を使用する場合。 | CellMappingStrategy ファクトリー | |
filters (common) | 使用するフィルターのリスト。 | List | |
mappingStrategyClassName (common) | カスタムマッピング戦略の実装のクラス名。 | String | |
mappingStrategyName (common) | Camel メッセージを HBase 列にマッピングするために使用するストラテジー。サポートされている値: ヘッダーまたはボディー。 | String | |
rowMapping (common) | キー/値を Map から HBaseRow にマップします。次のキーがサポートされています: rowId - 行の ID。行は通常、エクスチェンジごとに変更されるため、これは使用が制限されています。rowType - 行 ID を変換するタイプ。サポートされている操作: CamelHBaseScan。family - 列ファミリー。複数の列を参照するための数値接尾辞をサポートします。qualifier - 列修飾子。複数の列を参照するための数値接尾辞をサポートします。値 - 値。複数の列を参照するための数値接尾辞をサポートします。valueType - 値の型。複数の列を参照するための数値接尾辞をサポートします。サポートされている操作: CamelHBaseGet、および CamelHBaseScan。 | Map | |
rowModel (common) | 各行をモデル化する方法を記述する org.apache.camel.component.hbase.model.HBaseRow のインスタンス | HBaseRow | |
userGroupInformation (common) | kerberos の使用など、HBase と通信するための特権を定義します。 | UserGroupInformation | |
bridgeErrorHandler (consumer) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
maxMessagesPerPoll (consumer) | 各ポーリングのポーリング制限としてメッセージの最大数を取得します。デフォルトは無制限ですが、0 または負の数を使用して無制限として無効にします。 | int | |
operation (consumer) | 実行する HBase 操作 | String | |
remove (consumer) | オプションが true の場合、Camel HBase コンシューマーは処理する行を削除します。 | true | boolean |
removeHandler (consumer) | 行が削除されるときに実行されるカスタム HBaseRemoveHandler を使用するには。 | HBaseRemoveHandler | |
exceptionHandler (consumer) | コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
exchangePattern (consumer) | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 | ExchangePattern | |
maxResults (producer) | スキャンする行の最大数。 | 100 | int |
synchronous (advanced) | 同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。 | false | boolean |
141.4.4. 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 の両方で何かが定義されている場合は、ヘッダーが使用されます。
141.4.5. 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 という名前のヘッダーとして保存されます。
141.4.6. 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>
141.4.7. スキャン操作。
スキャン操作は、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 を渡します。フィルターは、モデルに一致する列を含まない行を除外します。例によるクエリーのようなものです。