サブスクリプション・レベル、グループ・レベル、またはユーザー・レベルでの水平フィルター操作では、データ・ソースからデータを選択するために SQL 文節を使用します。SQL 文節の内容は、DB2 DataPropagator サブスクリプションの「Advanced Subscription Definition (拡張サブスクリプションの定義)」ノートブックの「Rows (行)」ページおよび JDBC サブスクリプションの「Advanced Replication Subscription (拡張レプリケーション・サブスクリプション)」ノートブックの「Rows (行)」ページでコントロールしています。これらのノートブックをオープンするには、次のようにします。
サブスクリプション・レベルでデータをフィルターに掛けるには、次のようにします
「Subscription (サブスクリプション)」ノートブックの「Rows (行)」ページで、「All rows needed (すべての行)」ボックスに SQL 文節を入力します。次の形式で、SQL 文節全体を 1 行に入力する必要があります。
city='myValue'
SQL 文節の先頭に WHERE を入力しないでください。ボックス内に入力された文節に、WHERE が自動的に付加されます。たとえば、次の文節では、Los Angeles と同じ city の列値を持つ列とだけ同期をとります。
city='Los Angeles, CA 90061'
グループ・レベルでデータをフィルターに掛けるには、次のようにします
city=':fcity.'
ここで、:fcity. は、列値のパラメーターです。
追加テキストを使って、自分のパラメーター名を一意的に識別できるようにすることをお勧めします。たとえば、パラメーター名をコロン (:) で始めて、ピリオド (.) で終わらせる、というようにしてください。
Los Angeles, CA 90061
特殊値も使用できます。値 $USERNAME には、パラメーター値として同期サーバーのユーザー ID が挿入できます。これにより、特定のフィールドで同期サーバー ユーザー ID を使用して、特定のユーザーが作成した行をデータ・ソースの挿入することができます。
このグループに割り当てられた各ユーザーは、VNPERSON 表から、city 列の値が Los Angeles, CA 90061 である行のみを受け取ります。それ以外のグループは、構成されたフィルターに応じて、VNPERSON 表のすべて、または VNPERSON 表の特定のサブセットを受け取ります。
ユーザー・レベルでデータをフィルターに掛けるには、次のようにします
city=':fcity.' and id=':fid.'
ここで、:fcity. は city の列値のパラメーターです。また、:fid. は ID 列値のパラメーターです。
Los Angeles, CA 90061
900000401
このユーザーは、City 列の値が Los Angeles, CA 90061 で、かつ Id 列の値が 900000401 のレコードのみを受け取ります。 VNPERSON には、この値を持つレコードが 1 件あります。同じグループに割り当てられた他のユーザーは、VNPERSON 表から、City 列の値が Los Angeles, CA 90061 で、かつ User 列の値がデータ・フィルターによってセットされたものである行のみを受け取ります。それ以外のグループは、構成されたフィルターに応じて、VNPERSON 表のすべて、または VNPERSON 表の特定のサブセットを受け取ります。
データベースおよびユーザー管理におけるいくつかの状態では、グループまたはユーザーが参照できる行を制限するために、「Subset of rows for individual users (個々のユーザーがもつ行のサブセット)」フィールドの複合 SQL WHERE 文節の定義を呼び出します。フィルターを定義する際は、ミラー・データベース内の表を参照する場合や、グループまたはユーザー用のパラメーターを使用する場合や、あるいはこれらの方法を組み合わせて使用する場合があります。単純水平フィルターを作成するための基本ステップについては、単純水平フィルターの定義を参照してください。
DB2 Everyplace 同期サーバーは、フィルターと共に使用する、SQL WHERE の標準インプリメンテーションのサブセットを提供します。サブセットの構文については、フィルターの構文を参照してください。
次の例は、ミラー・データベース内の他の表を参照する方法と、水平フィルター操作のためのパラメーターの使用方法を示しています。
Ziptab および Business という名前の 2 つの表を管理していて、この両方がミラー・データベースに入っているとします。 Ziptab には特定の市の ZIP コードが入っており (表 4)、Business には企業情報とその企業の ZIP コードが入っています (表 5)。カリフォルニア州サンホセ (San Jose, California) のユーザーには、その市の企業のみを見せたいとします。グループを作成しておき、これらのユーザーをそのグループに割り当てておきます。
City | Zipcode |
---|---|
San Jose | 95141 |
San Jose | 95123 |
Los Angeles | 93002 |
Business | Zip |
---|---|
IBM | 95141 |
My Company | 95123 |
Your Company | 93002 |
Another Company | 94888 |
「Rows (行)」ページの「Subset of rows for individual users (個々のユーザーがもつ行のサブセット)」フィールドに、次の文節を入力します。
(Zip) IN (SELECT Zipcode FROM Ziptab WHERE City = ':fcity.')
:fcity. は、City 列の値のためのパラメーターです。グループに対して、この値を San Jose にセットします。
そして、「Create Subscriptions (サブスクリプションの作成)」ノートブックを完了し、クローズします。その結果、同期の後は、デバイス上の「Business」表に表示される行は、次のものだけになります。
Business | Zip |
---|---|
IBM | 95141 |
My Company | 95123 |
モバイル・デバイス管理センター (MDAC) でレプリケーション・サブスクリプションを作成するときに、SQL の WHERE 文節と似た文節を使用して、個々のユーザーのためにフィルター操作を行うことができます。 DataPropagator サブスクリプションの「Advanced Replication Subscription (拡張レプリケーション・サブスクリプション)」ノートブック、あるいは JDBC サブスクリプションの「Advanced Replication Subscription (拡張レプリケーション・サブスクリプション)」ノートブックの、「Subset of rows for individual users (個々のユーザーがもつ行のサブセット)」フィールドに、文節を入力します。
下記の構文図を使用する際には、制限があります。制限は次のとおりです。
フィルター .-論理演算子 AND または OR-. V | >>---| ディメンション |-------+-------------------------------->< ディメンション |--+-列名--IN--| 副選択 |-----------+---------------------------| | .-,----. | | V | | +-(----列名-+--)--IN--| 副選択 |-+ '-| 単純単項フィルター |---------' 副選択 |--(--| SELECT 文節 |--| FROM 文節 |--+----------------+--)-----| '-| WHERE 文節 |-' SELECT 文節 .-,----. V | |--SELECT----列名-+---------------------------------------------| FROM 文節 |--FROM--| 表参照 |---------------------------------------------| WHERE 文節 |--WHERE--| 単純フィルター |------------------------------------| 表参照 |--+---------------+--表名--------------------------------------| '-スキーマ名--.-' 単純フィルター .-論理演算子 AND または OR-. V | |----| 単純単項フィルター |---+---------------------------------| 単純単項フィルター |--+-NOT--| 単純単項フィルター |-+------------------------------| +-(--| 単純フィルター |--)----+ '-| 単純述部 |----------------' 単純述部 |--| 式 |--| 単純述部終了 |-------------------------------------| 式 |--+-| 関数 |-+-------------------------------------------------| +-列名-----+ '-| 定数 |-' 関数 |--+---------------+--関数名--(--+------------+--)--------------| '-スキーマ名--.-' | .-,------. | | V | | '---| 式 |-+-' 単純述部終了 |--+-+-| 演算子 |-+--| 式 |----------------+--------------------| | '-IN---------' | +-IS--+-----+--NULL---------------------+ | '-NOT-' | '-+-----+--BETWEEN--| 式 |--AND--| 式 |-' '-NOT-' 演算子 |--+-=----+-----------------------------------------------------| +-<>---+ +->----+ +-<----+ +->=---+ +-<=---+ +-!=---+ +-!<---+ +-!>---+ '-LIKE-'