本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
创建数据筛选条件
您可以为每个数据目录表创建一个或多个数据筛选条件。
为数据目录表创建数据筛选条件(控制台)
- 
        
打开 Lake Formation 控制台,网址为https://console.aws.amazon.com/lakeformation/
。 以数据湖管理员、目标表拥有者或对目标表具有 Lake Formation 权限的主体的身份进行登录。
 - 
        
在导航窗格的数据目录下,选择数据筛选条件。
 - 
        
在数据筛选条件页面上,选择创建新筛选条件。
 - 
        
在创建数据筛选条件对话框中,输入以下信息:
- 
            
数据筛选条件名称
 - 
            
目标数据库 - 指定包含表的数据库。
 - 
            
目标表
 - 
            
列级访问 - 将此设置保留为访问所有列以仅指定行筛选。选择包括列或排除列以指定列或单元格筛选,然后指定要包含或排除的列。
嵌套列 - 如果要对包含嵌套列的表应用筛选条件,则可以在数据筛选条件中显式指定嵌套结构列的子结构。
当您向某个主体授予对此筛选条件的 SELECT 权限时,执行以下查询的主体将只能看到
customer.customerName的数据,而看不到customer.customerId的数据。SELECT "customer" FROM "example_db"."example_table";
               
            当您授予对
customer列的权限时,该主体将获得对该列和该列下的嵌套字段(customerName和customerID)的访问权限。 - 
            
行筛选表达式 – 输入筛选表达式以指定行或单元格筛选。有关支持的数据类型和运算符,请参阅行筛选表达式支持 PartiQL。选择访问所有行以授予对所有行的访问权限。
您可以在行筛选条件表达式中包含嵌套列中的部分列结构,以筛选包含特定值的行。
当主体被授予对带有行筛选条件表达式
Select * from example_nestedtable where customer.customerName <>'John'的表的权限并且列级别访问权限设置为访问所有列时,查询结果仅会显示customerName <>'John'的计算结果为 true 的行。 
以下屏幕截图显示了实现单元格筛选的数据筛选条件。在针对
orders表的查询中,它拒绝对customer_name列的访问,并且仅显示product_type列中包含“pharma”的行。
           
           
         - 
            
 - 
        
选择创建筛选条件。
 
对嵌套字段使用单元格筛选条件策略创建数据筛选条件
本部分使用以下示例架构来演示如何创建数据单元格筛选条件:
[ { 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" }, ]
- 
        
在创建数据筛选条件页面上,输入数据筛选条件的名称。
 - 
        
接下来,使用下拉列表选择数据库名称和表名称。
 - 
        
在列级别访问部分中,选择包含的列,然后选择嵌套列 (
customer.customerName)。 - 
        
在行级别访问部分中,选择访问所有行选项。
 - 
        
选择创建筛选条件。
当您授予对此筛选条件的
SELECT权限时,主体可以访问customerName列中的所有行。 - 
        
接下来,为同一个数据库/表定义另一个数据筛选条件。
 - 
        
在列级别访问部分中,选择包含的列,然后选择另一个嵌套列 (
customer.customerid)。 - 
        
在行级别访问部分中,选择筛选行,然后输入行筛选条件表达式 (
customer.customerid <> 5)。 - 
          
选择创建筛选条件。
当您授予对此筛选条件的
SELECT权限时,主体将获得对customerName和customerId字段中所有行的访问权限,但customerId列中值为 5 的单元格除外。