

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 管理資料篩選條件
<a name="managing-filters"></a>

若要實作資料欄層級、資料列層級和儲存格層級的安全性，您可以建立和維護資料篩選條件。每個資料篩選條件都屬於 Data Catalog 資料表。您可以為資料表建立多個資料篩選條件，然後在授予資料表的許可時使用一或多個資料篩選條件。您也可以在具有`struct`資料類型的巢狀資料欄上定義和套用資料篩選條件，讓使用者只能存取巢狀資料欄的子結構。

您需要具有授予選項的`SELECT`許可，才能建立或檢視資料篩選條件。若要允許帳戶中的主體檢視和使用資料篩選條件，您可以授予其`DESCRIBE`許可。

**注意**  
Lake Formation 不支援對從另一個帳戶共用的資料篩選條件授予`Describe`許可。

您可以使用 AWS Lake Formation 主控台、 API 或 () AWS Command Line Interface 來管理資料篩選條件AWS CLI。

如需資料篩選條件的相關資訊，請參閱 [Lake Formation 中的資料篩選條件](data-filtering.md#data-filters-about)

# 建立資料篩選條件
<a name="creating-data-filters"></a>

您可以為每個 Data Catalog 資料表建立一或多個資料篩選條件。

**建立 Data Catalog 資料表的資料篩選條件 （主控台）**

1. 開啟 Lake Formation 主控台，網址為 [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。

   以資料湖管理員、目標資料表擁有者或擁有目標資料表 Lake Formation 許可的主體身分簽署。

1. 在導覽窗格中的資料**目錄**下，選擇**資料篩選條件**。

1. 在**資料篩選條件**頁面上，選擇**建立新篩選條件**。

1. 在**建立資料篩選條件**對話方塊中，輸入下列資訊：
   + 資料篩選條件名稱 
   + 目標資料庫 – 指定包含資料表的資料庫。
   + 目標資料表 
   + 資料欄層級存取 – 將此設定為**存取所有資料欄**，以僅指定資料列篩選。選擇**包含資料**欄或**排除資料欄**以指定資料欄或儲存格篩選，然後指定要包含或排除的資料欄。

     巢狀資料欄 – 如果您要在包含巢狀資料欄的資料表上套用篩選條件，您可以明確指定資料篩選條件中巢狀結構資料欄的子結構。

     當您將 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/zh_tw/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`欄中具有「製藥」的資料列。  
![\[資料篩選條件視窗包含這些垂直排列的欄位：資料篩選條件名稱；目標資料庫；目標資料表；具有選項的選項按鈕群組 存取所有欄、包含欄和排除欄；選取欄 （下拉式清單）；資料列篩選條件表達式 （多行文字方塊）。選取排除資料欄選項，選取 customer_name 資料欄進行排除，且資料列篩選條件表達式欄位包含 'product_type='pharma'。\]](http://docs.aws.amazon.com/zh_tw/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. 選擇 **Create filter (建立篩選條件)**。

   當您授予此篩選條件的`SELECT`許可時，委託人可以存取 `customerName`資料欄中的所有資料列。

1. 接著，為相同的資料庫/資料表定義另一個資料篩選條件。

1. 在**資料欄層級存取**區段中，選擇包含的資料欄，然後選取另一個巢狀資料欄 (`customer.customerid`)。

1. 在**資料列層級存取**區段中，選擇**篩選資料列**，然後輸入**資料列篩選表達**式 (`customer.customerid <> 5`)。

1. 選擇 **Create filter (建立篩選條件)**。

   當您授予此篩選條件的`SELECT`許可時，委託人會收到 中所有資料列的存取權`customerName`，以及資料`customerId`欄中值為 5 的儲存格以外的`customerId`欄位。

# 授予資料篩選條件許可
<a name="granting-filter-perms"></a>

您可以將資料篩選條件的 `SELECT`、 `DESCRIBE`和 `DROP` Lake Formation 許可授予委託人。

一開始，只有您可以檢視為資料表建立的資料篩選條件。若要讓另一個主體檢視資料篩選條件，並使用資料篩選條件授予 Data Catalog 許可，您必須：
+ 使用授予選項將資料表`SELECT`上的 授予委託人，並將資料篩選條件套用至授予。
+ 將資料篩選條件的 `DESCRIBE`或 `DROP`許可授予委託人。

您可以將 `SELECT`許可授予外部 AWS 帳戶。然後，該帳戶中的資料湖管理員可以將該許可授予帳戶中的其他主體。授予外部帳戶時，您必須包含授予選項，外部帳戶的管理員才能進一步將許可串聯至其帳戶中的其他使用者。授予您帳戶中的委託人時，使用授予選項進行授予是選用的。

您可以使用 AWS Lake Formation 主控台、 API 或 AWS Command Line Interface () 授予和撤銷資料篩選條件的許可AWS CLI。

------
#### [ Console ]

1. 登入 AWS 管理主控台 並開啟 Lake Formation 主控台，網址為 https：//[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。

1. 在導覽窗格中的**許可**下，選擇**資料湖許可**。

1. 在**許可**頁面上**的資料許可**區段中，選擇**授予**。

1. 在**授予資料許可**頁面上，選擇要授予許可的委託人。

1. 在 LF 標籤或目錄資源區段中，選擇**具名資料目錄資源**。然後選擇您要授予許可的資料庫、資料表和資料篩選條件。  
![\[\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/images/grant-data-filter-perms-step2.png)

1. 在**資料篩選條件許可**區段中，選擇您要授予所選委託人的許可。  
![\[\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/images/grant-perms-on-filters.png)

------
#### [ AWS CLI ]
+ 輸入`grant-permissions`命令。`DataCellsFilter` 為`resource`引數指定 ，並為`Permissions`引數指定 `DROP` `DESCRIBE`或 ，並選擇性地為`PermissionsWithGrantOption`引數指定 或 。

  下列範例`DESCRIBE`使用授予選項授予 `datalake_user1`使用者`restrict-pharma`，該選項屬於 AWS 帳戶 1111-2222-3333 中`sales`資料庫中的`orders`資料表。

  ```
  aws lakeformation grant-permissions --cli-input-json file://grant-params.json
  ```

  以下是檔案 的內容`grant-params.json`。

  ```
  {
      "Principal": {"DataLakePrincipalIdentifier": "arn:aws:iam::111122223333:user/datalake_user1"},
      "Resource": {
          "DataCellsFilter": {
              "TableCatalogId": "111122223333",
              "DatabaseName": "sales",
              "TableName": "orders",
              "Name": "restrict-pharma"
          }
      },
      "Permissions": ["DESCRIBE"],
      "PermissionsWithGrantOption": ["DESCRIBE"]
  }
  ```

------

# 授予資料篩選條件提供的資料許可
<a name="granting-data-perms-for-filters"></a>

資料篩選條件代表資料表中的資料子集。若要提供資料存取權給委託人，需要將`SELECT`許可授予這些委託人。透過此許可，委託人可以：
+ 在與其帳戶共用的資料表清單中檢視實際的資料表名稱。
+ 在共用資料表上建立資料篩選條件，並授予使用者對這些資料篩選條件的許可。

------
#### [ Console ]

**授予 SELECT 許可**

1. 前往 Lake Formation 主控台中的**許可**頁面，然後選擇**授予**。  
![\[\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/images/permissions-grant-action.png)

1. 選取您要提供存取權的主體，然後選取**具名資料目錄資源**。  
![\[\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/images/grant-data-filter-perms-step2.png)

1. 若要提供篩選條件所代表資料的存取權，請選擇**資料篩選條件許可**下的**選取**。  
![\[\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/images/grant-data-filter-perms-step3.png)

------
#### [ CLI ]

輸入`grant-permissions`命令。`DataCellsFilter` 為資源引數指定 ，並為`SELECT`許可引數指定 。

下列範例`SELECT`使用 授予選項授予資料篩選條件 `datalake_user1`上的使用者`restrict-pharma`，該選項屬於 中`sales`資料庫中的 `orders`資料表 AWS 帳戶 `1111-2222-3333`。

```
aws lakeformation grant-permissions --cli-input-json file://grant-params.json 
```

以下是檔案 的內容`grant-params.json`。

```
{
    "Principal": {
        "DataLakePrincipalIdentifier": "arn:aws:iam::111122223333:user/datalake_user1"
    },
    "Resource": {
        "DataCellsFilter": {
            "TableCatalogId": "111122223333", 
            "DatabaseName": "sales", 
            "TableName": "orders", 
            "Name": "restrict-pharma"
        }
    },
    "Permissions": ["SELECT"]
}
```

------

# 檢視資料篩選條件
<a name="view-data-filters"></a>

您可以使用 Lake Formation 主控台 AWS CLI或 Lake Formation API 來檢視資料篩選條件。

若要檢視資料篩選條件，您必須是 Data Lake 管理員或擁有資料篩選條件所需的許可。

------
#### [ Console ]

1. 登入 AWS 管理主控台 並開啟 Lake Formation 主控台，網址為 https：//[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。

1. 在導覽窗格中的資料**目錄**下，選擇**資料篩選條件**。

   此頁面會顯示您有權存取的資料篩選條件。  
![\[資料篩選條件頁面使用下列資料欄顯示可用的資料篩選條件：篩選條件名稱、資料表、資料庫和資料表目錄 ID。螢幕擷取畫面顯示具有下列值的單一資料篩選條件：test-df、Cloudtrailtest_cloudtrail、lakeformation_cloudtrail、已修訂的帳戶 ID。在資料表上方有四個按鈕 （從左到右）：重新整理/重新載入、檢視 （灰色）、刪除 （灰色） 和「建立新篩選條件」。還有一個搜尋欄位，這是空的。\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/images/list-data-filters.jpg)

1. 若要檢視資料篩選條件詳細資訊，請選擇資料篩選條件，然後選擇檢視。隨即出現新視窗，其中包含資料篩選條件詳細資訊。  
![\[「檢視資料篩選條件」視窗會顯示所選資料篩選條件的其他資訊。顯示的資訊包括名稱、資料庫、資料表、資料欄層級存取設定、資料列篩選條件表達式和資料欄。\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/images/list-data-filters-details.jpg)

------
#### [ AWS CLI ]

輸入`list-data-cells-filter`命令並指定資料表資源。

下列範例列出`cloudtrailtest_cloudtrail`資料表的資料篩選條件。

```
aws lakeformation list-data-cells-filter --table '{ "CatalogId":"123456789012", 
"DatabaseName":"lakeformation_cloudtrail", "Name":"cloudtrailtest_cloudtrail"}'
```

------
#### [ API/SDK ]

使用 `ListDataCellsFilter` API 並指定資料表資源。

下列範例使用 Python 列出`myTable`資料表的前 20 個資料篩選條件。

```
response = client.list_data_cells_filter(
    Table = {
        'CatalogId': '111122223333',
        'DatabaseName': 'mydb',
        'Name': 'myTable'
    },
    MaxResults=20
)
```

------

# 列出資料篩選條件許可
<a name="listing-filter-perms"></a>

您可以使用 Lake Formation 主控台來檢視資料篩選條件上授予的許可。

若要檢視資料篩選條件的許可，您必須是 Data Lake 管理員或具有資料篩選條件所需的許可。

------
#### [ Console ]

1. 登入 AWS 管理主控台 並開啟 Lake Formation 主控台，網址為 https：//[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。

1. 在導覽窗格中的**許可**下，選擇**資料許可**。

1. 在**資料許可**頁面上，按一下或點選搜尋欄位，然後在**屬性**功能表中選擇**資源類型**。

1. 在**資源類型**功能表中，選擇**資源類型：資料儲存格篩選條件**。

   列出您在 上擁有許可的資料篩選條件。您可能需要水平捲動，才能查看**許可**和**可授予**資料欄。  
![\[資料許可頁面會顯示具有下列資料欄的許可表：主體、資源類型、資料庫、資料表、資源、目錄和許可。資源類型欄會在所有四列中顯示「資料儲存格篩選條件」。第一列和第二列的許可為 Describe、Drop 和 Select。第三列的許可是 Describe。資料表上方有一個清除篩選條件按鈕和一個圖磚，指出目前的搜尋是資源類型：資料儲存格篩選條件。以上是搜尋 （文字） 欄位，以上則是重新整理、撤銷和授予按鈕。\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/images/data-permissions-cell-filters.png)

------
#### [ AWS CLI ]
+ 輸入`list-permissions`命令。`DataCellsFilter` 為`resource`引數指定 ，並為`Permissions`引數指定 `DROP` `DESCRIBE`或 ，並選擇性地為`PermissionsWithGrantOption`引數指定 或 。

  下列範例會列出資料篩選條件 上具有授予選項的`DESCRIBE`許可`restrict-pharma`。結果僅限於帳戶 1111-2222-3333 中`sales`資料庫的委託人`datalake_user1`和`orders`資料表所授予 AWS 的許可。

  ```
  aws lakeformation list-permissions --cli-input-json file://list-params.json
  ```

  以下是檔案 的內容`grant-params.json`。

  ```
  {
      "Principal": {"DataLakePrincipalIdentifier": "arn:aws:iam::111122223333:user/datalake_user1"},
      "Resource": {
          "DataCellsFilter": {
              "TableCatalogId": "111122223333",
              "DatabaseName": "sales",
              "TableName": "orders",
              "Name": "restrict-pharma"
          }
      },
      "Permissions": ["DESCRIBE"],
      "PermissionsWithGrantOption": ["DESCRIBE"]
  }
  ```

------