创建数据筛选条件 - Amazon Lake Formation
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

创建数据筛选条件

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

为数据目录表创建数据筛选条件(控制台)
  1. 通过 https://console.aws.amazon.com/lakeformation/ 打开 Lake Formation 控制台。

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

  2. 在导航窗格的数据目录下,选择数据筛选条件

  3. 数据筛选条件页面上,选择创建新筛选条件

  4. 创建数据筛选条件对话框中,输入以下信息:

    • 数据筛选条件名称

    • 目标数据库 - 指定包含表的数据库。

    • 目标表

    • 列级访问 - 将此设置保留为访问所有列以仅指定行筛选。选择包括列排除列以指定列或单元格筛选,然后指定要包含或排除的列。

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

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

      SELECT "customer" FROM "example_db"."example_table";

      当您授予对 customer 列的权限时,该主体将获得对该列和该列下的嵌套字段(customerNamecustomerID)的访问权限。

    • 行筛选表达式 – 输入筛选表达式以指定行或单元格筛选。有关支持的数据类型和运算符,请参阅行筛选表达式支持 PartiQL。选择访问所有行以授予对所有行的访问权限。

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

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

    以下屏幕截图显示了实现单元格筛选的数据筛选条件。在针对 orders 表的查询中,它拒绝对 customer_name 列的访问,并且仅显示 product_type 列中包含“pharma”的行。

    
            数据筛选条件窗口包含以下垂直排列的字段:“数据筛选条件名称”;“目标数据库”;“目标表”;选项按钮组,其中包含“访问所有列”、“包括列”和“排除列”选项;“选择列”(下拉列表);“行筛选表达式”(多行文本框)。选择“排除列”选项,选择“customer_name”列进行排除,并且“行筛选表达式”字段包含“product_type='pharma”。
  5. 请选择 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. 创建数据筛选条件页面上,输入数据筛选条件的名称。

  2. 接下来,使用下拉列表选择数据库名称和表名称。

  3. 列级别访问部分中,选择包含的列,然后选择嵌套列 (customer.customerName)。

  4. 行级别访问部分中,选择访问所有行选项。

  5. 请选择 Create filter(创建筛选器)

    当您授予对此筛选条件的 SELECT 权限时,主体可以访问 customerName 列中的所有行。

  6. 接下来,为同一个数据库/表定义另一个数据筛选条件。

  7. 列级别访问部分中,选择包含的列,然后选择另一个嵌套列 (customer.customerid)。

  8. 行级别访问部分中,选择筛选行,然后输入行筛选条件表达式 (customer.customerid <> 5)。

  9. 请选择 Create filter(创建筛选器)

    当您授予对此筛选条件的 SELECT 权限时,主体将获得对 customerNamecustomerId 字段中所有行的访问权限,但 customerId 列中值为 5 的单元格除外。