

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# データフィルターの作成
<a name="creating-data-filters"></a>

Data Catalog テーブルごとに、1 つ、または複数のデータフィルターを作成できます。

**Data Catalog テーブルのデータフィルターを作成する (コンソール)**

1. Lake Formation コンソール (‭‬[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)‬) を開きます。

   データレイク管理者、ターゲットテーブル所有者、またはターゲットテーブルに対する Lake Formation 許可を持つプリンシパルとしてサインインします。

1. ナビゲーションペインの **[Data catalog]** で **[Data filters]** (データフィルター) を選択します。

1. **[Data filters]** (データフィルター) ページで、**[Create new filter]** (新しいフィルターを作成) を選択します。

1. **[Create data filter]** (データフィルターの作成) ダイアログボックスで、以下の情報を入力します。
   + [Data filter name] (データフィルター名) 
   + [Target database] (ターゲットデータベース) – テーブルが含まれるデータベースを指定します。
   + [Target table] (ターゲットテーブル) 
   + [Column-level access] (列レベルのアクセス) – 行フィルターのみを指定する場合は、**[Access to all columns]** (すべての列にアクセス) のままにしておきます。列またはセルフィルタリングを指定する場合は、**[Include columns]** (列を含める) または**[Exclude columns]** (列を除外する) を選択してから、含める列、または除外する列を指定します。

     ネストされた列 — ネストされた列を含むテーブルにフィルターを適用する場合、データフィルター内でネストされた構造体列のサブ構造を明示的に指定できます。

     このフィルターでプリンシパルに SELECT アクセス許可を付与すると、次のクエリを実行するプリンシパルには、`customer.customerName` のデータのみが表示され、`customer.customerId` のデータは表示されません。

     ```
     SELECT "customer" FROM "example_db"."example_table";
     ```  
![\[Column-level access settings with options to include specific columns and filter rows.\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/nested-column-filter.png)

      `customer` 列にアクセス許可を付与すると、プリンシパルは、列とその列の下にネストされたフィールド (`customerName` と `customerID`) へのアクセス権を受け取ります。
   + [Row filter expression] (行フィルター式) – 行またはセルフィルタリングを指定するフィルター式を入力します。サポートされるデータ型と演算子については、「[行フィルター式での PartiQL のサポート](partiql-support.md)」を参照してください。**[すべての行へのアクセス]** を選択して、すべての行に対するアクセスを許可します。

     ネストされた列の一部の列構造を行フィルター式に含めて、特定の値を含む行をフィルターできます。

     行フィルター式 `Select * from example_nestedtable where customer.customerName <>'John'` を使用してテーブルに対するアクセス許可をプリンシパルに付与し、**列レベル**のアクセスを **[すべての列へのアクセス]** に設定すると、クエリ結果には `customerName <>'John'` が true と評価された行のみが表示されます。

   次のスクリーンショットは、セルフィルタリングを実装するデータフィルターを示しています。`orders` テーブルに対するクエリでは、`customer_name` 列へのアクセスが拒否され、`product_type` 列に 'pharma' がある行のみが表示されます。  
![\[データフィルターウィンドウには、縦向きに配置された [Data filter name] (データフィルター名)、[Target database] (ターゲットデータベース)、[Target table] (ターゲットテーブル)、[Access to all columns] (すべての列にアクセス) と [Include columns] (列を含める) と [Exclude columns] (列を除外する) のオプションがあるオプションボタンのグループ、[Select columns] (列の選択) (ドロップダウンリスト)、および [Row filter expression] (行フィルター式) (複数行のテキストボックス) のフィールドが含まれています。[Exclude columns] (列を除外する) オプションが選択され、customer_name 列が除外対象として選択されて、[Row filter expression] (行フィルター式) フィールドには product_type='pharma' が表示されています。\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/data-filter-sample-pharma.png)

1. **[Create filter]** (フィルターを作成) を選択します。

**ネストされたフィールドでセルフィルターポリシーを使用してデータフィルターを作成するには**

 このセクションでは、次のサンプルスキーマを使用してデータセルフィルターを作成する方法を示します。

```
[
    { name: "customer", type: "struct<customerId:string,customerName:string>" },
    { name: "customerApplication", type: "struct<appId:string>" },
    { name: "product", type: "struct<offer:struct<prodId:string,listingId:string>,type:string>" },
    { name: "purchaseId", type: "string" },
]
```

1. **[データフィルターを作成]** ページで、データフィルターの名前を入力します。

1.  次に、ドロップダウンを使用してデータベース名とテーブル名を選択します。

1. **[列レベルのアクセス]** セクションで、[含まれる列] を選択し、ネストされた列 (`customer.customerName`) を選択します。

1. **[行レベルのアクセス]** セクションで、**[すべての行へのアクセス]** オプションを選択します。

1. **[フィルターを作成]** をクリックします。

   このフィルターで `SELECT` アクセス許可を付与すると、プリンシパルは `customerName` 列内のすべての行にアクセスできるようになります。

1. 次に、同じデータベース/テーブルに別のデータフィルターを定義します。

1. **[列レベルのアクセス]** セクションで、[含まれる列] を選択し、別のネストされた列 (`customer.customerid`) を選択します。

1. **[行レベルのアクセス]** セクションで、**[行をフィルタリングする]** を選択し、**[行フィルター式]** (`customer.customerid <> 5`) を入力します。

1. **[フィルターを作成]** をクリックします。

   このフィルターで `SELECT` アクセス許可を付与すると、プリンシパルは、`customerName` フィールドと `customerId` フィールド (`customerId` 列の値が 5 であるセルを除く) のすべての行にアクセスできるようになります。