

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 创建数据筛选条件
<a name="creating-data-filters"></a>

您可以为每个数据目录表创建一个或多个数据筛选条件。

**为数据目录表创建数据筛选条件（控制台）**

1. 打开 Lake Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.amazonaws.cn/lakeformation/)。

   以数据湖管理员、目标表拥有者或对目标表具有 Lake Formation 权限的主体的身份进行登录。

1. 在导航窗格的**数据目录**下，选择**数据筛选条件**。

1. 在**数据筛选条件**页面上，选择**创建新筛选条件**。

1. 在**创建数据筛选条件**对话框中，输入以下信息：
   + 数据筛选条件名称 
   + 目标数据库 - 指定包含表的数据库。
   + 目标表 
   + 列级访问 - 将此设置保留为**访问所有列**以仅指定行筛选。选择**包括列**或**排除列**以指定列或单元格筛选，然后指定要包含或排除的列。

     嵌套列 - 如果要对包含嵌套列的表应用筛选条件，则可以在数据筛选条件中显式指定嵌套结构列的子结构。

     当您向某个主体授予对此筛选条件的 SELECT 权限时，执行以下查询的主体将只能看到 `customer.customerName` 的数据，而看不到 `customer.customerId` 的数据。

     ```
     SELECT "customer" FROM "example_db"."example_table";
     ```  
![列级访问设置显示 “包括选中的列”，选中 11 列中的 4 列。](http://docs.amazonaws.cn/lake-formation/latest/dg/images/nested-column-filter.png)

      当您授予对 `customer` 列的权限时，该主体将获得对该列和该列下的嵌套字段（`customerName` 和 `customerID`）的访问权限。
   + 行筛选表达式 – 输入筛选表达式以指定行或单元格筛选。有关支持的数据类型和运算符，请参阅[行筛选表达式支持 PartiQL](partiql-support.md)。选择**访问所有行**以授予对所有行的访问权限。

     您可以在行筛选条件表达式中包含嵌套列中的部分列结构，以筛选包含特定值的行。

     当主体被授予对带有行筛选条件表达式 `Select * from example_nestedtable where customer.customerName <>'John'` 的表的权限并且**列级别**访问权限设置为**访问所有列**时，查询结果仅会显示 `customerName <>'John'` 的计算结果为 true 的行。

   以下屏幕截图显示了实现单元格筛选的数据筛选条件。在针对 `orders` 表的查询中，它拒绝对 `customer_name` 列的访问，并且仅显示 `product_type` 列中包含“pharma”的行。  
![数据筛选条件窗口包含以下垂直排列的字段：“数据筛选条件名称”；“目标数据库”；“目标表”；选项按钮组，其中包含“访问所有列”、“包括列”和“排除列”选项；“选择列”（下拉列表）；“行筛选表达式”（多行文本框）。选择“排除列”选项，选择“customer_name”列进行排除，并且“行筛选表达式”字段包含“product_type='pharma”。](http://docs.amazonaws.cn/lake-formation/latest/dg/images/data-filter-sample-pharma.png)

1. 选择**创建筛选条件**。

**对嵌套字段使用单元格筛选条件策略创建数据筛选条件**

 本部分使用以下示例架构来演示如何创建数据单元格筛选条件：

```
[
    { 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 的单元格除外。