

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

# 管理 Data Catalog
<a name="manage-catalog"></a>

 AWS Glue Data Catalog 是中央中繼資料儲存庫，可存放 Amazon S3 資料集的結構和操作中繼資料。有效管理 Data Catalog 對於維護資料品質、效能、安全性和管控至關重要。

 透過了解並套用這些 Data Catalog 管理實務，可以確保在資料環境發生變化時，中繼資料能夠保持準確、高效、安全且妥善管理。

本節涵蓋 Data Catalog 管理的下列方面：
+ *更新資料表結構描述和分區* 隨著資料變化，可能需要更新 Data Catalog 中定義的資料表結構描述或分區結構。如需如何使用 AWS Glue ETL 以程式設計方式進行這些更新的詳細資訊，請參閱 [使用 AWS Glue ETL 任務，在 Data Catalog 中更新結構描述並新增新的分區](update-from-job.md)。
+ *管理資料欄統計資料*：準確的資料欄統計資料有助於最佳化查詢計劃並提高效能。如需有關如何產生、更新和管理資料欄統計資料的詳細資訊，請參閱[使用資料欄統計資料最佳化查詢效能](column-statistics.md)。
+  *加密資料目錄*   若要保護敏感中繼資料，您可以使用 AWS Key Management Service () 加密資料目錄AWS KMS。本節說明如何啟用和管理 Data Catalog 的加密。
+ *使用 AWS Lake Formation保護 Data Catalog * Lake Formation 提供全方位的資料湖安全與存取控制方法。可以使用 Lake Formation 來保護和管控對 Data Catalog 和基礎資料的存取。

**Topics**
+ [使用 AWS Glue ETL 任務，在 Data Catalog 中更新結構描述並新增新的分區](update-from-job.md)
+ [使用資料欄統計資料最佳化查詢效能](column-statistics.md)
+ [加密您的資料目錄](catalog-encryption.md)
+ [使用 Lake Formation 保護您的 Data Catalog](secure-catalog.md)
+ [在 中使用 AWS Glue Data Catalog 檢視 AWS Glue](catalog-views.md)

# 使用 AWS Glue ETL 任務，在 Data Catalog 中更新結構描述並新增新的分區
<a name="update-from-job"></a>

您的擷取、轉換和載入 (ETL) 任務可能會在目標資料存放區中建立新的資料表分割區。您的資料集結構描述可能會隨著時間演進，而與 AWS Glue 資料目錄結構描述有所不同。AWS GlueETL 任務目前提供數個功能，您可以在 ETL 指令碼中使用這些功能來更新資料目錄中的 ETL 結構描述和分割區。這些功能可讓您在資料目錄中查看 ETL 運作的結果，無需重新執行爬蟲程式。

## 新分割區
<a name="update-from-job-partitions"></a>

如果您想要在 中檢視新的分割區 AWS Glue Data Catalog，您可以執行下列其中一項操作：
+ 任務完成後，重新執行爬蟲程式，並在爬蟲程式完成後在主控台上檢視新的分割區。
+ 任務完成後，立即在主控台上檢視新的分割區，而不重新執行爬蟲程式。您可以在 ETL 指令碼中加入幾行程式碼，以啟用此功能，如下列範例所示。程式碼會使用 `enableUpdateCatalog` 引數來指出在資料目錄建立新分割區時，要在任務執行期間更新。

**方法 1**  
以選項引數傳遞 `enableUpdateCatalog` 和 `partitionKeys`。  

```
additionalOptions = {"enableUpdateCatalog": True}
additionalOptions["partitionKeys"] = ["region", "year", "month", "day"]


sink = glueContext.write_dynamic_frame_from_catalog(frame=last_transform, database=<target_db_name>,
                                                    table_name=<target_table_name>, transformation_ctx="write_sink",
                                                    additional_options=additionalOptions)
```

```
val options = JsonOptions(Map(
    "path" -> <S3_output_path>, 
    "partitionKeys" -> Seq("region", "year", "month", "day"), 
    "enableUpdateCatalog" -> true))
val sink = glueContext.getCatalogSink(
    database = <target_db_name>, 
    tableName = <target_table_name>, 
    additionalOptions = options)sink.writeDynamicFrame(df)
```

**方法 2**  
以 `getSink()` 傳遞 `enableUpdateCatalog` 和 `partitionKeys`，並呼叫 `DataSink` 物件上的 `setCatalogInfo()`。  

```
sink = glueContext.getSink(
    connection_type="s3", 
    path="<S3_output_path>",
    enableUpdateCatalog=True,
    partitionKeys=["region", "year", "month", "day"])
sink.setFormat("json")
sink.setCatalogInfo(catalogDatabase=<target_db_name>, catalogTableName=<target_table_name>)
sink.writeFrame(last_transform)
```

```
val options = JsonOptions(
   Map("path" -> <S3_output_path>, 
       "partitionKeys" -> Seq("region", "year", "month", "day"), 
       "enableUpdateCatalog" -> true))
val sink = glueContext.getSink("s3", options).withFormat("json")
sink.setCatalogInfo(<target_db_name>, <target_table_name>)
sink.writeDynamicFrame(df)
```

現在，您可以建立新的目錄資料表、使用修改的結構描述更新現有資料表，並使用 AWS Glue ETL 任務在資料目錄新增新的資料表分割區，而無需重新執行爬蟲程式。

## 更新資料表結構描述
<a name="update-from-job-updating-table-schema"></a>

如果您想覆寫資料目錄資料表的結構描述，可以執行以下任一作業：
+ 任務完成後，重新執行爬蟲程式，並確定您的爬蟲程式已設定為更新資料表定義。當爬蟲程式完成時，檢視主控台上的新分割區以及任何結構描述更新。如需詳細資訊，請參閱[使用 API 設定爬蟲程式](https://docs.aws.amazon.com/glue/latest/dg/crawler-configuration.html#crawler-configure-changes-api)。
+ 任務完成後，立即在主控台上檢視修改的結構描述，無需重新執行爬蟲程式。您可以在 ETL 指令碼中加入幾行程式碼，以啟用此功能，如下列範例所示。程式碼使用設為 true 的 `enableUpdateCatalog`，並同時將 `updateBehavior` 設為 `UPDATE_IN_DATABASE`，表示在任務執行期間，在資料目錄中覆寫結構描述並新增新的分割區。

------
#### [ Python ]

```
additionalOptions = {
    "enableUpdateCatalog": True, 
    "updateBehavior": "UPDATE_IN_DATABASE"}
additionalOptions["partitionKeys"] = ["partition_key0", "partition_key1"]

sink = glueContext.write_dynamic_frame_from_catalog(frame=last_transform, database=<dst_db_name>,
    table_name=<dst_tbl_name>, transformation_ctx="write_sink",
    additional_options=additionalOptions)
job.commit()
```

------
#### [ Scala ]

```
val options = JsonOptions(Map(
    "path" -> outputPath, 
    "partitionKeys" -> Seq("partition_0", "partition_1"), 
    "enableUpdateCatalog" -> true))
val sink = glueContext.getCatalogSink(database = nameSpace, tableName = tableName, additionalOptions = options)
sink.writeDynamicFrame(df)
```

------

如果您想防止資料表結構描述遭到覆寫，但仍想要新增新的分割區，您也可以將 `updateBehavior` 值設為 `LOG`。`updateBehavior` 的預設值為 `UPDATE_IN_DATABASE`，因此，如果您未明確定該值，則會覆寫資料表結構描述。

如果 `enableUpdateCatalog` 未設為 true，無論針對 `updateBehavior` 選取哪個選項，ETL 任務都不會在資料目錄中更新資料表。

## 建立新的資料表
<a name="update-from-job-creating-new-tables"></a>

您也可以使用相同選項，在資料目錄中建立新資料表。您可以使用 `setCatalogInfo` 指定資料庫和新的資料表名稱。

------
#### [ Python ]

```
sink = glueContext.getSink(connection_type="s3", path="s3://path/to/data",
    enableUpdateCatalog=True, updateBehavior="UPDATE_IN_DATABASE",
    partitionKeys=["partition_key0", "partition_key1"])
sink.setFormat("<format>")
sink.setCatalogInfo(catalogDatabase=<dst_db_name>, catalogTableName=<dst_tbl_name>)
sink.writeFrame(last_transform)
```

------
#### [ Scala ]

```
val options = JsonOptions(Map(
    "path" -> outputPath, 
    "partitionKeys" -> Seq("<partition_1>", "<partition_2>"), 
    "enableUpdateCatalog" -> true, 
    "updateBehavior" -> "UPDATE_IN_DATABASE"))
val sink = glueContext.getSink(connectionType = "s3", connectionOptions = options).withFormat("<format>")
sink.setCatalogInfo(catalogDatabase = “<dst_db_name>”, catalogTableName = “<dst_tbl_name>”)
sink.writeDynamicFrame(df)
```

------

## 限制
<a name="update-from-job-restrictions"></a>

請注意下列限制：
+ 僅支援 Amazon Simple Storage Service (Amazon S3) 的目標。
+ 控管的資料表不支援 `enableUpdateCatalog` 功能。
+ 僅支援下列格式：`json`、`csv`、`avro` 和 `parquet`。
+ 若要建立或更新具有 `parquet` 分類的資料表，您必須使用適用於 DynamicFrames 的 AWS Glue 最佳化 Parquet 寫入器。這可以透過以下方法之一來達成：
  + 如果要使用 `parquet` 分類來更新目錄中的現有資料表，則在更新之前，資料表的 `"useGlueParquetWriter"` 資料表屬性必須設定為 `true`。您可以透過 AWS Glue APIs/SDK、主控台或 Athena DDL 陳述式來設定此屬性。  
![\[AWS Glue 主控台中的目錄資料表屬性編輯欄位。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/edit-table-property.png)

    設定目錄資料表屬性後，您便可以使用以下程式碼片段，以新資料更新目錄資料表：

    ```
    glueContext.write_dynamic_frame.from_catalog(
        frame=frameToWrite,
        database="dbName",
        table_name="tableName",
        additional_options={
            "enableUpdateCatalog": True,
            "updateBehavior": "UPDATE_IN_DATABASE"
        }
    )
    ```
  + 如果目錄中尚不存在資料表，您可以在指令碼中使用 `getSink()` 方法和 `connection_type="s3"` 將資料表及其分割區新增至目錄中，並將資料寫入 Amazon S3。為您的工作流程提供適當的 `partitionKeys` 和 `compression`。

    ```
    s3sink = glueContext.getSink(
        path="s3://bucket/folder/",
        connection_type="s3",
        updateBehavior="UPDATE_IN_DATABASE",
        partitionKeys=[],
        compression="snappy",
        enableUpdateCatalog=True
    )
        
    s3sink.setCatalogInfo(
        catalogDatabase="dbName", catalogTableName="tableName"
    )
        
    s3sink.setFormat("parquet", useGlueParquetWriter=True)
    s3sink.writeFrame(frameToWrite)
    ```
  + `glueparquet` 格式值是啟用 AWS Glue parquet 寫入器的舊版方法。
+ 將 `updateBehavior` 設為 `LOG` 後，只有在 `DynamicFrame` 結構描述等同於或包含資料目錄資料表結構描述中定義之欄的子集時，才會新增新的分割區。
+ 未分割資料表不支援結構描述更新 (不使用 "partitionKeys" 選項)。
+ 在 ETL 指令碼中傳遞的參數和資料目錄資料表結構描述中的 partitionKeys 之間，您的 partitionKeys 必須等效，而且順序相同。
+ 此功能目前尚不支援更新/建立更新巢狀結構描述的資料表 (例如，結構內的陣列)。

如需詳細資訊，請參閱[Spark 指令碼程式設計](aws-glue-programming.md)。

# 在 ETL 任務中使用 MongoDB 連線
<a name="integrate-with-mongo-db"></a>

您可以為 MongoDB 建立一個連線，然後在 AWS Glue 任務中使用該連線。如需詳細資訊，請參閱 AWS Glue 程式設計指南[MongoDB 連線](aws-glue-programming-etl-connect-mongodb-home.md)中的 。連線 `url`、`username` 和 `password` 儲存在 MongoDB 連線中。其他選項可以在 ETL 任務指令碼中使用 `glueContext.getCatalogSource` 的 `additionalOptions` 參數指定。其他選項包括：
+ `database`：(必要) 讀取的 MongoDB 資料庫。
+ `collection`：(必要) 讀取的 MongoDB 集合。

藉由將 `database` 和 `collection` 資訊放在 ETL 任務指令碼中，您可以在多個任務中使用相同的連線。

1. 建立 MongoDB 資料來源的 AWS Glue Data Catalog 連線。請參閱 ["connectionType": "mongodb"](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-connect.html#aws-glue-programming-etl-connect-mongodb) 以取得此連線參數的描述。您可以使用主控台、API 或 CLI 來建立連線。

1. 在 中建立資料庫 AWS Glue Data Catalog ，以存放 MongoDB 資料的資料表定義。如需詳細資訊，請參閱[建立資料庫](define-database.md)。

1. 建立爬蟲程式，使用連接到 MongoDB 的連線中的資訊，網路爬取 MongoDB 中的資料。爬蟲程式會在 中建立資料表 AWS Glue Data Catalog ，描述您在任務中使用的 MongoDB 資料庫中的資料表。如需詳細資訊，請參閱[使用編目程式填入 Data Catalog](add-crawler.md)。

1. 使用自訂指令碼來建立任務。您可以使用主控台、API 或 CLI 來建立它們。如需詳細資訊，請參閱[在 AWS Glue 新增任務](https://docs.aws.amazon.com/glue/latest/dg/add-job.html)。

1. 選擇任務的資料目標。代表資料目標的資料表可在您的資料目錄中定義，或者您的任務可在執行時建立目標資料表。選擇編寫任務時的目標位置。如果目標需要連線，您的任務也會參照此連線。如果您的任務需要多個資料目標，可在之後編輯指令碼以新增來源。

1. 為任務及產生的指令碼提供引數，以自訂任務處理環境。

   這裡提供了從基於資料目錄中定義之資料表結構的 MongoDB 資料庫建立 `DynamicFrame` 的範例。程式碼使用 `additionalOptions` 以提供其他資料來源資訊：

------
#### [  Scala  ]

   ```
   val resultFrame: DynamicFrame = glueContext.getCatalogSource(
           database = catalogDB, 
           tableName = catalogTable, 
           additionalOptions = JsonOptions(Map("database" -> DATABASE_NAME, 
                   "collection" -> COLLECTION_NAME))
         ).getDynamicFrame()
   ```

------
#### [  Python  ]

   ```
   glue_context.create_dynamic_frame_from_catalog(
           database = catalogDB,
           table_name = catalogTable,
           additional_options = {"database":"database_name", 
               "collection":"collection_name"})
   ```

------

1. 隨需或透過觸發執行任務。

# 使用資料欄統計資料最佳化查詢效能
<a name="column-statistics"></a>

您可以計算 Parquet、ORC、JSON、ION、CSV 和 XML 等資料格式 AWS Glue Data Catalog 資料表的資料欄層級統計資料，而無需設定其他資料管道。資料欄統計資料可協助您透過深入了解資料欄內的值，了解資料設定檔。

Data Catalog 支援產生資料欄值的統計資料，例如最小值、最大值、總 null 值、總相異值、值的平均長度和真值的總出現次數。 AWS 分析服務，例如 Amazon Redshift，可以使用 Amazon Athena 這些資料欄統計資料來產生查詢執行計畫，並選擇改善查詢效能的最佳計畫。

產生資料欄統計資料有以下三種情況：

 **自動**   
AWS Glue 支援在目錄層級自動產生資料欄統計資料，以便自動產生 中新資料表的統計資料 AWS Glue Data Catalog。

**已排程**  
AWS Glue 支援排程資料欄統計資料產生，以便可以按照週期性排程自動執行。  
透過排程統計資料計算，資料欄統計資料任務會更新整體資料表層級統計資料 (例如新統計資料的最小值、最大值和平均值)，為查詢引擎提供準確且最新統計資料，以最佳化查詢執行。

**隨需**  
使用此選項可在需要時隨需產生資料欄統計資料。這對於臨機操作分析或在需要立即計算統計資料時非常有用。

您可以設定 使用 AWS Glue 主控台 AWS CLI和 AWS Glue API 操作來執行資料欄統計資料產生任務。當您啟動程序時， 會在背景 AWS Glue 啟動 Spark 任務，並更新 Data Catalog 中的 AWS Glue 資料表中繼資料。您可以使用 AWS Glue 主控台 AWS CLI 或 或呼叫 [GetColumnStatisticsForTable](https://docs.aws.amazon.com/glue/latest/webapi/API_GetColumnStatisticsForTable.html) API 操作來檢視資料欄統計資料。

**注意**  
如果您正在使用 Lake Formation 權限控制資料表的存取權，則資料欄統計資料任務所擔任的角色將需要完整的資料表存取權，才可產生統計資料。

 下列影片示範如何使用資料欄統計資料來增強查詢效能。

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/zUHEXJdHUxs?si=HjyhpoALR6RXJz2i/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/zUHEXJdHUxs?si=HjyhpoALR6RXJz2i)


**Topics**
+ [產生資料欄統計資料的先決條件](column-stats-prereqs.md)
+ [自動產生資料欄統計資料](auto-column-stats-generation.md)
+ [根據排程產生資料欄統計資料](generate-column-stats.md)
+ [隨需產生資料欄統計資料](column-stats-on-demand.md)
+ [檢視資料欄統計資料](view-column-stats.md)
+ [檢視資料欄統計資料任務執行](view-stats-run.md)
+ [停止資料欄統計資料任務執行](stop-stats-run.md)
+ [刪除資料欄統計資料](delete-column-stats.md)
+ [考量和限制](column-stats-notes.md)

# 產生資料欄統計資料的先決條件
<a name="column-stats-prereqs"></a>

若要產生或更新資料欄統計資料，統計資料產生任務會代表您擔任 AWS Identity and Access Management (IAM) 角色。根據授與角色的權限，資料欄統計資料產生任務可以從 Amazon S3 資料存放區讀取資料。

當您設定資料欄統計資料產生任務時， AWS Glue 可讓您建立包含`AWSGlueServiceRole` AWS 受管政策加上指定資料來源所需內嵌政策的角色。

如果指定現有角色來產生資料欄統計資料，請確定其包含 `AWSGlueServiceRole` 政策或同等政策 (或此政策的縮減版本)，以及必要的內嵌政策。請依照下列步驟來建立新的 IAM 角色：

**注意**  
 若要針對由 Lake Formation 管理的資料表產生統計資料，則用於產生統計資料的 IAM 角色需要取得完整資料表存取權。

當您設定資料欄統計資料產生任務時， AWS Glue 可讓您建立包含`AWSGlueServiceRole` AWS 受管政策加上指定資料來源所需內嵌政策的角色。您也可以建立角色並連接下面的政策中列出的許可，然後將該角色新增至資料欄統計資料產生任務。

**建立產生資料欄統計資料的 IAM 角色**

1. 若要建立 IAM 角色，請參閱[建立 AWS Glue IAM 角色](https://docs.aws.amazon.com/glue/latest/dg/create-an-iam-role.html)。

1. 若要更新現有角色，請在 IAM 主控台中，前往產生資料欄統計資料程序正在使用的 IAM 角色。

1. 在**新增權限**區段，選擇**連接政策**。在新開啟的瀏覽器視窗中，選擇 `AWSGlueServiceRole` AWS 受管政策。

1. 您也需要納入從 Amazon S3 資料位置讀取資料的權限。

   在**新增權限**區段中，選擇**建立政策**。在新開啟的瀏覽器視窗中，建立要搭配您角色使用的新政策。

1. 在**建立政策**頁面中，選擇 **JSON** 索引標籤。將下列 `JSON` 程式碼複製到政策編輯器欄位。
**注意**  
在下列政策中，將帳戶 ID 取代為有效 AWS 帳戶，並將 取代`region`為資料表的區域，並將 取代`bucket-name`為 Amazon S3 儲存貯體名稱。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "S3BucketAccess",
               "Effect": "Allow",
               "Action": [
                   "s3:ListBucket",
                   "s3:GetObject"
               ],
               "Resource": [
               	"arn:aws:s3:::amzn-s3-demo-bucket/*",
   							"arn:aws:s3:::amzn-s3-demo-bucket"
               ]
           }
        ]
   }
   ```

------

1. (選用) 如果您正在使用 Lake Formation 權限向資料提供存取權，則 IAM 角色需要 `lakeformation:GetDataAccess` 權限。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "LakeFormationDataAccess",
         "Effect": "Allow",
         "Action": "lakeformation:GetDataAccess",
         "Resource": [
           "*"
         ]
       }
     ]
   }
   ```

------

    如果 Amazon S3 資料位置已向 Lake Formation 註冊，且資料欄統計資料產生任務擔任的 IAM 角色沒有授予資料表的 `IAM_ALLOWED_PRINCIPALS` 群組權限，則該角色需要資料表中的 Lake Formation `ALTER` 和 `DESCRIBE` 權限。用於註冊 Amazon S3 儲存貯體的角色需要資料表中的 Lake Formation `INSERT` 和 `DELETE` 權限。

   如果 Amazon S3 資料位置已向 Lake Formation 註冊，且 IAM 角色沒有授予資料表的 `IAM_ALLOWED_PRINCIPALS` 群組權限，則該角色需要資料表中的 Lake Formation `ALTER`、`DESCRIBE`、`INSERT` 及 `DELETE` 權限。

1. 如果您已啟用目錄層級 `Automatic statistics generation` 選項，IAM 角色必須具有預設 Data Catalog 的 `glue:UpdateCatalog` 許可或 Lake Formation `ALTER CATALOG` 許可。您可以使用 `GetCatalog` 操作來驗證目錄屬性。

1. (選用) 寫入加密 Amazon CloudWatch Logs 的資料欄統計資料產生任務，需要金鑰政策中的下列權限。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "CWLogsKmsPermissions",
         "Effect": "Allow",
         "Action": [
           "logs:CreateLogGroup",
           "logs:CreateLogStream",
           "logs:PutLogEvents",
           "logs:AssociateKmsKey"
         ],
         "Resource": [
           "arn:aws:logs:us-east-1:111122223333:log-group:/aws-glue:*"
         ]
       },
       {
         "Sid": "KmsPermissions",
         "Effect": "Allow",
         "Action": [
           "kms:GenerateDataKey",
           "kms:Decrypt",
           "kms:Encrypt"
         ],
         "Resource": [
           "arn:aws:kms:us-east-1:111122223333:key/arn of key used for ETL cloudwatch encryption"
         ],
         "Condition": {
           "StringEquals": {
             "kms:ViaService": [
               "glue.us-east-1.amazonaws.com"
             ]
           }
         }
       }
     ]
   }
   ```

------

1. 您用來執行資料欄統計資料的角色必須具有該角色的 `iam:PassRole` 許可。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "iam:PassRole"
         ],
         "Resource": [
           "arn:aws:iam::111122223333:role/columnstats-role-name"
         ]
       }
     ]
   }
   ```

------

1. 建立用於產生資料欄統計資料的 IAM 角色時，該角色也必須具有下列信任政策，使服務可以擔任該角色。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "TrustPolicy",
         "Effect": "Allow",
         "Principal": {
           "Service": "glue.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

------

# 自動產生資料欄統計資料
<a name="auto-column-stats-generation"></a>

自動產生資料欄統計資料可讓您排程和自動計算 AWS Glue Data Catalog中新資料表的統計資料。在您啟用自動產生統計資料時，Data Catalog 會探索具有特定資料格式 (例如 Parquet、JSON、CSV、XML、ORC、ION 和 Apache Iceberg) 的新資料表，及其個別儲存貯體路徑。使用一次性目錄組態，Data Catalog 會產生這些資料表的統計資料。

 資料湖管理員可以在 Lake Formation 主控台中選取預設目錄，並使用 `Optimization configuration` 選項啟用資料表統計資料，以設定統計資料產生。當您在 Data Catalog 中建立新資料表或更新現有資料表時，Data Catalog 會每週收集 Apache Iceberg 資料表的不同值 (NDV) 數目，以及其他統計資料，例如其他支援檔案格式的 null、最大值、最小值和平均長度。

如果您已在資料表層級設定統計資料產生，或先前已刪除資料表的統計資料產生設定，則這些資料表特定設定優先於自動產生資料欄統計資料的預設目錄設定。

 自動產生統計資料任務會分析資料表中 50% 的記錄，來計算統計資料。自動產生資料欄統計資料可確保 Data Catalog 維護每週指標，以供 Amazon Athena 和 Amazon Redshift Spectrum 等查詢引擎使用，以提高查詢效能並節省潛在成本。它允許使用 AWS Glue APIs或 主控台排程統計資料產生，提供自動化程序，無需手動介入。

**Topics**
+ [啟用目錄層級自動產生統計資料](enable-auto-column-stats-generation.md)
+ [檢視自動資料表層級設定](view-auto-column-stats-settings.md)
+ [停用產生目錄層級資料欄統計資料](disable-auto-column-stats-generation.md)

# 啟用目錄層級自動產生統計資料
<a name="enable-auto-column-stats-generation"></a>

您可以在 Data Catalog 中，為所有新的 Apache Iceberg 資料表和非 OTF 資料表 (Parquet、JSON、CSV、XML、ORC、ION) 格式的資料表啟用自動列統計資料產生。建立資料表後，您也可以手動明確更新資料欄統計資料設定。

 若要更新 Data Catalog 設定以啟用目錄層級，所使用的 IAM 角色必須具有根目錄的 `glue:UpdateCatalog` 許可或 AWS Lake Formation `ALTER CATALOG` 許可。您可以使用 `GetCatalog` API 驗證目錄屬性。

------
#### [ AWS 管理主控台 ]

**在帳戶層級啟用自動產生資料欄統計資料**

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

1. 在左側導覽列上，選擇**目錄**。

1. 在**目錄摘要**頁面上，選擇**最佳化組態**下的**編輯**。  
![\[螢幕擷取畫面顯示可用來產生資料欄統計資料的選項。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/edit-column-stats-auto.png)

1. 在**資料表最佳化組態**頁面上，選擇**為目錄的資料表啟用自動產生統計資料**選項。  
![\[螢幕擷取畫面顯示可用來產生資料欄統計資料的選項。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/edit-optimization-option.jpg)

1. 選擇現有的 IAM 角色，或建立一個具有執行資料欄統計資料任務所需許可的新角色。

1. 選擇**提交**。

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

您也可以透過 AWS CLI啟用目錄層級統計資料收集。若要使用 設定資料表層級統計資料收集 AWS CLI，請執行下列命令：

```
aws glue update-catalog --cli-input-json '{
    "name": "123456789012",
    "catalogInput": {
        "description": "Updating root catalog with role arn",
        "catalogProperties": {
            "customProperties": {
                "ColumnStatistics.RoleArn": "arn:aws:iam::"123456789012":role/service-role/AWSGlueServiceRole",
                "ColumnStatistics.Enabled": "true"
            }
        }
    }
}'
```

 上述命令呼叫 AWS Glue的 `UpdateCatalog`操作，採用具有下列索引鍵/值對的`CatalogProperties`結構來產生目錄層級統計資料：
+ ColumnStatistics.RoleArn – 用於為產生目錄層級統計資料而觸發的所有任務的 IAM 角色 ARN
+ ColumnStatistics.Enabled – 布林值，指出目錄層級設定是啟用還是停用

------

# 檢視自動資料表層級設定
<a name="view-auto-column-stats-settings"></a>

 啟用目錄層級統計資料收集時，只要透過 或 `UpdateTable` APIs、 AWS 管理主控台 SDK 或 建立或更新 Apache Hive 資料表`CreateTable`或 Apache Iceberg 資料表 AWS Glue 編目程式，就會為該資料表建立同等資料表層級設定。

 啟用產生自動統計資料的資料表必須遵循下列其中一個屬性：
+ 使用開頭為 org.apache.hadoop 且 `TableType` 等於 `EXTERNAL_TABLE` 的 `InputSerdeLibrary`
+ 使用開頭為 `com.amazon.ion` 且 `TableType` 等於 `EXTERNAL_TABLE` 的 `InputSerdeLibrary`
+ 在其參數結構中包含 table\$1type："ICEBERG"。

 建立或更新資料表之後，您可以驗證資料表詳細資訊以確認統計資料產生。`Statistics generation summary` 會顯示 `Schedule` 屬性設定為 `AUTO`，且 `Statistics configuration` 值為 `Inherited from catalog`。Glue 會在內部自動觸發具有下列設定的任何資料表設定。

![\[已套用目錄層級統計資料收集的 Hive 資料表影像，且已收集統計資料。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/auto-stats-summary.png)


# 停用產生目錄層級資料欄統計資料
<a name="disable-auto-column-stats-generation"></a>

 您可以使用 AWS Lake Formation 主控台、 `glue:UpdateCatalogSettings` API 或 `glue:DeleteColumnStatisticsTaskSettings` API 來停用新資料表的自動資料欄統計資料產生。

**在帳戶層級停用自動產生資料欄統計資料**

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

1. 在左側導覽列上，選擇**目錄**。

1. 在**目錄摘要**頁面上，選擇**最佳化組態**下的**編輯**。

1. 在**資料表最佳化組態**頁面上，取消選取**為目錄的資料表啟用自動產生統計資料**選項。

1. 選擇**提交**。

# 根據排程產生資料欄統計資料
<a name="generate-column-stats"></a>

請依照下列步驟，使用 AWS Glue 主控台、 AWS CLI或 [CreateColumnStatisticsTaskSettings](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-column-statistics.html#aws-glue-api-crawler-column-statistics-CreateColumnStatisticsTaskSettings) 操作，在 中 AWS Glue Data Catalog 設定產生資料欄統計資料的排程。

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

**使用主控台產生資料欄統計資料**

1. 在 https：//[https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) 登入 AWS Glue 主控台。

1. 選擇 Data Catalog 資料表。

1. 從清單中選擇資料表。

1. 選擇**資料表**頁面下半部分中的**資料欄統計資料**索引標籤。

1. 您也可以在**動作**的**資料欄統計資料**下選擇**按排程產生**。

1. 在**根據排程產生統計資料**頁面上，透過選擇頻率和開始時間來設定執行資料欄統計資料任務的週期性排程。您可以選擇每小時、每日、每週的頻率，或定義 Cron 表達式來指定排程。

   Cron 表達式是代表排程模式的字串，由 6 個以空格分隔的欄位組成：\$1 \$1 \$1 \$1 \$1 <minute> <hour> <day of month> <month> <day of week> <year>。例如，若要每天在午夜執行任務，Cron 表達式會是：0 0 \$1 \$1 ？ \$1

   如需詳細資訊，請參閱 [Cron 表達](https://docs.aws.amazon.com/glue/latest/dg/monitor-data-warehouse-schedule.html#CronExpressions)式。  
![\[螢幕擷取畫面顯示可用來產生資料欄統計資料的選項。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/generate-column-stats-schedule.png)

1. 接著，選擇資料欄選項以產生統計資料。
   + **所有資料欄**：選擇此選項可產生資料表中所有資料欄的統計資料。
   + **選取的資料欄**：選擇此選項可產生特定資料欄的統計資料。您可以從下拉式清單中選取資料欄。

1. 選擇 IAM 角色或建立具有產生 statistics 許可的現有角色。 AWS Glue 會擔任此角色來產生資料欄統計資料。

   更快的方法是讓 AWS Glue 主控台為您建立角色。其建立的角色專門用於產生資料欄統計資料，並包含 `AWSGlueServiceRole` AWS 受管政策加上指定資料來源所需的內嵌政策。

   如果指定現有角色來產生資料欄統計資料，請確定其包含 `AWSGlueServiceRole` 政策或同等政策 (或此政策的縮減版本)，以及必要的內嵌政策。

1. (選用) 接著，選擇安全組態，針對日誌啟用靜態加密。

1. (選用) 您可以透過僅指示資料表中特定百分比的資料列，來選擇範例大小以產生統計資料。預設值為所有資料列。使用向上和向下箭頭以增加或減少百分比值。

   我們建議在資料表中包含所有資料列，以計算準確的統計資料。只有在接受近似值時，才使用範例資料列產生資料欄統計資料。

1. 選擇**產生統計資料**以執行資料欄統計資料產生任務。

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

您可以使用下列 AWS CLI 範例來建立資料欄統計資料產生排程。database-name、table-name 和 role 是必要的參數，而選用參數是 schedule、column-name-list、catalog-id、sample-size 和 security-configuration。

```
aws glue create-column-statistics-task-settings \ 
 --database-name 'database_name' \ 
 --table-name table_name \ 
 --role 'arn:aws:iam::123456789012:role/stats-role' \ 
 --schedule 'cron(0 0-5 14 * * ?)' \ 
 --column-name-list 'col-1' \  
 --catalog-id '123456789012' \ 
 --sample-size '10.0 ' \
 --security-configuration 'test-security'
```

您也可透過呼叫 [StartColumnStatisticsTaskRun](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-column-statistics.html#aws-glue-api-crawler-column-statistics-StartColumnStatisticsTaskRun) 操作，以產生資料欄統計資料。

------

# 管理產生資料欄統計資料的排程
<a name="manage-column-stats-schedule"></a>

可以管理排程操作，例如更新、啟動、停止和刪除 AWS Glue中產生資料欄統計資料的排程。您可以使用 AWS Glue 主控台 AWS CLI或[AWS Glue 資料欄統計資料 API 操作](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-column-statistics.html)來執行這些任務。

**Topics**
+ [更新資料欄統計資料產生排程](#update-column-stats-shedule)
+ [停止產生資料欄統計資料的排程](#stop-column-stats-schedule)
+ [繼續產生資料欄統計資料的排程](#resume-column-stats-schedule)
+ [刪除資料欄統計資料產生排程](#delete-column-stats-schedule)

## 更新資料欄統計資料產生排程
<a name="update-column-stats-shedule"></a>

可以更新排程，在建立資料欄統計資料產生任務之後觸發其。您可以使用 AWS Glue 主控台 AWS CLI，或執行 [UpdateColumnStatisticsTaskSettings](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-column-statistics.html#aws-glue-api-crawler-column-statistics-UpdateColumnStatisticsTaskSettings) 操作來更新資料表的排程。可以修改現有排程的參數，例如排程類型 (隨需或排定) 和其他選用參數。

------
#### [ AWS 管理主控台 ]

**若要更新資料欄統計資料產生任務的設定**

1. 在 https：//[https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) 登入 AWS Glue 主控台。

1. 選擇您要從資料表清單中更新的資料表。

1. 在資料表詳細資料頁面的下面部分中，選擇**資料欄統計資料**。

1. 在**動作**下，選擇**編輯**以更新排程。

1. 對排程進行所需變更，然後選擇**儲存**。

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

 如果您未在 主控台中使用 AWS Glue統計資料產生功能，您可以使用 `update-column-statistics-task-settings`命令手動更新排程。下列範例顯示如何使用 AWS CLI更新資料欄統計資料。

```
aws glue update-column-statistics-task-settings \ 
 --database-name 'database_name' \ 
 --table-name 'table_name' \ 
 --role arn:aws:iam::123456789012:role/stats_role \ 
 --schedule 'cron(0 0-5 16 * * ?)' \ 
 --column-name-list 'col-1' \
 --sample-size '20.0' \  
 --catalog-id '123456789012'\
 --security-configuration 'test-security'
```

------

## 停止產生資料欄統計資料的排程
<a name="stop-column-stats-schedule"></a>

 如果不再需要增量統計資料，可以停止已排程的產生，以節省資源和成本。暫停排程不會影響先前產生的統計資料。可以在方便時繼續排程。

------
#### [ AWS 管理主控台 ]

**若要停止資料欄統計資料產生任務的排程**

1. 在 AWS Glue 主控台上，選擇 Data Catalog **下的資料表**。

1. 選取包含資料欄統計資料的資料表。

1. 在**資料表詳細資料**頁面中，選擇資料**資料欄統計資料**。

1. 在**動作**下，選擇**已排程產生**，然後選擇**暫停**。

1. 選擇**暫停**以確認。

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

若要使用 停止資料欄統計資料任務執行排程 AWS CLI，您可以使用下列命令：

```
aws glue stop-column-statistics-task-run-schedule \
 --database-name ''database_name' \
 --table-name 'table_name'
```

將 `database_name` 和 `table_name` 取代為您要對其停止資料欄統計資料任務執行排程的資料庫和資料表的實際名稱。

------

## 繼續產生資料欄統計資料的排程
<a name="resume-column-stats-schedule"></a>

 如果您已暫停統計資料產生排程， AWS Glue 可讓您在方便的時候繼續排程。您可以使用 主控台 AWS CLI或 [StartColumnStatisticsTaskRunSchedule](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-column-statistics.html#aws-glue-api-crawler-column-statistics-StartColumnStatisticsTaskRunSchedule) 操作繼續排程 AWS Glue 。

------
#### [ AWS 管理主控台 ]

**若要繼續產生資料欄統計資料的排程**

1. 在 AWS Glue 主控台上，選擇 Data Catalog **下的資料表**。

1. 選取包含資料欄統計資料的資料表。

1. 在**資料表詳細資料**頁面中，選擇資料**資料欄統計資料**。

1. 在**動作**下，選擇**已排程產生**，然後選擇**繼續**。

1. 選擇**繼續**以確認。

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

將 `database_name` 和 `table_name` 取代為您要對其停止資料欄統計資料任務執行排程的資料庫和資料表的實際名稱。

```
aws glue start-column-statistics-task-run-schedule \
 --database-name 'database_name' \
 --table-name 'table_name'
```

------

## 刪除資料欄統計資料產生排程
<a name="delete-column-stats-schedule"></a>

 儘管通常建議保持最新統計資料以獲得最佳查詢效能，但在某些特定使用案例中，移除自動產生排程可能是有益的。
+ 如果資料保持相對靜態，則現有的資料欄統計資料可能會長時間保持準確，從而減少頻繁更新的需求。刪除排程可防止因重新產生未變更資料的統計資料所導致的不必要的資源耗用和開銷。
+ 偏好手動控制統計資料產生時。透過刪除自動排程，管理員可以在特定間隔或在重大資料變更後選擇性地更新資料欄統計資料，使該程序與其維護策略和資源配置需求保持一致。

------
#### [ AWS 管理主控台 ]

**若要刪除產生資料欄統計資料的排程**

1. 在 AWS Glue 主控台上，選擇 Data Catalog **下的資料表**。

1. 選取包含資料欄統計資料的資料表。

1. 在**資料表詳細資料**頁面中，選擇資料**資料欄統計資料**。

1. 在**動作**下，選擇**已排程產生**，然後選擇**刪除**。

1. 選擇**刪除**以確認。

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

將 `database_name` 和 `table_name` 取代為您要對其停止資料欄統計資料任務執行排程的資料庫和資料表的實際名稱。

可以使用 [DeleteColumnStatisticsTaskSettings](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-column-statistics.html#aws-glue-api-crawler-column-statistics-DeleteColumnStatisticsTaskSettings) API 操作或 AWS CLI來刪除資料欄統計資料。下列範例示範如何使用 AWS Command Line Interface () 刪除產生資料欄統計資料的排程AWS CLI。

```
aws glue delete-column-statistics-task-settings \
    --database-name 'database_name' \
    --table-name 'table_name'
```

------

# 隨需產生資料欄統計資料
<a name="column-stats-on-demand"></a>

您可以隨需執行 AWS Glue Data Catalog 資料表任務的資料欄統計資料任務，無需設定排程。這選項對於臨機操作分析或在需要立即計算統計資料時非常有用。

請依照下列步驟，使用 AWS Glue 主控台 或 產生 Data Catalog 資料表的隨需資料欄統計資料 AWS CLI。

------
#### [ AWS 管理主控台 ]

**使用主控台產生資料欄統計資料**

1. 在 https：//[https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) 登入 AWS Glue 主控台。

1. 選擇 Data Catalog 資料表。

1.  從清單中選擇資料表。

1. 選擇**動作**功能表下方的**產生統計資料**。

   您也可以選擇**資料表**頁面下半部分的**資料欄統計資料**索引標籤下的**產生**、**隨需產生**選項。

1. 遵循 [根據排程產生資料欄統計資料](generate-column-stats.md) 中的步驟 7-11 來產生資料表的資料欄統計資料。

1. 在**產生統計資料**頁面中，指定下列選項：  
![\[螢幕擷取畫面顯示可用來產生資料欄統計資料的選項。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/generate-column-stats.png)
   + **所有資料欄**：選擇此選項可產生資料表中所有資料欄的統計資料。
   + **選取的資料欄**：選擇此選項可產生特定資料欄的統計資料。您可以從下拉式清單中選取資料欄。
   + **IAM 角色**：選擇 **建立新的 IAM 角色**，該角色具有執行資料欄統計資料產生任務所需的許可政策。選擇「檢視許可詳細資訊」以檢閱政策聲明。您也可以從清單中選取 IAM 角色。如需所需許可的詳細資訊，請參閱[產生資料欄統計資料的先決條件](column-stats-prereqs.md)。

     AWS Glue 會擔任您指定之角色的許可，以產生統計資料。

     如需提供 角色的詳細資訊 AWS Glue，請參閱 [的身分型政策 AWS Glue。](https://docs.aws.amazon.com/glue/latest/dg/security_iam_service-with-iam.html#security_iam_service-with-iam-id-based-policies)
   + (選用) 接著，選擇安全組態，針對日誌啟用靜態加密。
   + **範例資料列**：僅從資料表中選擇特定的資料列百分比以產生統計資料。預設值為所有資料列。使用向上和向下箭頭以增加或減少百分比值。
**注意**  
我們建議在資料表中包含所有資料列，以計算準確的統計資料。只有在接受近似值時，才使用範例資料列產生資料欄統計資料。

   選擇**產生統計資料**以執行任務。

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

此命令會觸發針對指定資料表的資料欄統計資料任務執行。您需要提供資料庫名稱、資料表名稱、具有產生統計資料許可的 IAM 角色，以及選擇性提供統計資料計算的資料欄名稱和範例大小百分比。

```
aws glue start-column-statistics-task-run \ 
    --database-name 'database_name \ 
    --table-name 'table_name' \ 
    --role 'arn:aws:iam::123456789012:role/stats-role' \
    --column-name 'col1','col2'  \
    --sample-size 10.0
```

此命令會啟動任務，以為指定的資料表產生資料欄統計資料。

------

## 隨需更新資料欄統計資料
<a name="update-column-stats-on-demand"></a>

 維護最新資料欄統計資料對於查詢最佳化工具產生有效的執行計畫至關重要，可確保改善查詢效能、減少資源消耗，以及改善整體系統效能。在重大資料變更 (例如大量載入或大量修改) 後，此流程尤其重要，因為這可能會使現有統計資料過時。

您需要從 AWS Glue 主控台明確執行**產生統計資料**任務，以重新整理資料欄統計資料。Data Catalog 不會自動重新整理統計資料。

如果您不是在主控台中使用 AWS Glue統計資料產生功能，則可以使用 [UpdateColumnStatisticsForTable](https://docs.aws.amazon.com/glue/latest/webapi/API_UpdateColumnStatisticsForTable.html) API 操作 或 手動更新資料欄統計資料 AWS CLI。下列範例顯示如何使用 AWS CLI更新資料欄統計資料。

```
aws glue update-column-statistics-for-table --cli-input-json:

{
    "CatalogId": "111122223333",
    "DatabaseName": "database_name",
    "TableName": "table_name",
    "ColumnStatisticsList": [
        {
            "ColumnName": "col1",
            "ColumnType": "Boolean",
            "AnalyzedTime": "1970-01-01T00:00:00",
            "StatisticsData": {
                "Type": "BOOLEAN",
                "BooleanColumnStatisticsData": {
                    "NumberOfTrues": 5,
                    "NumberOfFalses": 5,
                    "NumberOfNulls": 0
                }
            }
        }
    ]
}
```

# 檢視資料欄統計資料
<a name="view-column-stats"></a>

成功產生統計資料後，Data Catalog 會將成本型最佳化工具的此資訊儲存在 Amazon Athena 和 Amazon Redshift 中，以在執行查詢時做出最佳選擇。統計資料會根據資料欄類型而異。

------
#### [ AWS 管理主控台 ]

**檢視資料表的資料欄統計資料**
+ 執行資料欄統計資料任務後，**資料表詳細資料頁面**中的**資料欄統計資料**索引標籤會顯示資料表的統計資料。  
![\[螢幕擷取畫面顯示最近一次執行所產生的資料欄。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/view-column-stats.png)

  下列為可用的統計資料：
  + 資料欄名稱：用來產生統計資料的資料欄名稱
  + 上次更新：統計資料產生時的資料和時間
  + 平均長度：資料欄中值的平均長度
  + 相異值：資料欄中的相異值總數。我們會以 5% 相對誤差率預估資料欄中相異值數。
  + 最大值：資料欄中的最大值。
  + 最小值：資料欄中的最小值。
  + 最大長度：資料欄中的最高值長度。
  + Null 值：資料欄中的 Null 值總數。
  + True 值：資料欄中的 true 值總數。
  + False 值：資料欄中的 false 值總數。
  + numFiles：資料表中的檔案總數。可在**進階屬性**索引標籤下使用此值。

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

下列範例顯示如何使用 AWS CLI擷取資料欄統計資料。

```
aws glue get-column-statistics-for-table \
    --database-name database_name \
    --table-name table_name \
    --column-names <column_name>
```

 您可以使用 [GetColumnStatisticsForTable](https://docs.aws.amazon.com/glue/latest/webapi/API_GetColumnStatisticsForTable.html) API 操作，來檢視資料欄統計資料。

------

# 檢視資料欄統計資料任務執行
<a name="view-stats-run"></a>

執行資料欄統計資料任務之後，您可以使用 AWS Glue 主控台 AWS CLI 或使用 [GetColumnStatisticsTaskRuns](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-column-statistics.html#aws-glue-api-crawler-column-statistics-GetColumnStatisticsTaskRun) 操作來探索資料表的任務執行詳細資訊。

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

**檢視資料欄統計資料任務執行詳細資料**

1. 在 AWS Glue 主控台上，選擇 Data Catalog **下的資料表**。

1. 選取包含資料欄統計資料的資料表。

1. 在**資料表詳細資料**頁面中，選擇資料**資料欄統計資料**。

1. 選擇**檢視執行**。

   您可以查看與指定資料表相關聯之所有執行的相關資訊。  
![\[螢幕擷取畫面顯示可用來產生資料欄統計資料的選項。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/view-column-stats-task-runs.png)

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

在下列範例中，將 `DatabaseName` 和 `TableName` 值取代為實際的資料庫和資料表名稱。

```
aws glue get-column-statistics-task-runs --input-cli-json file://input.json
{
    "DatabaseName": "database_name",
    "TableName": "table_name"
}
```

------

# 停止資料欄統計資料任務執行
<a name="stop-stats-run"></a>

您可以使用 AWS Glue 主控台 AWS CLI 或使用 [StopColumnStatisticsTaskRun](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-column-statistics.html#aws-glue-api-crawler-column-statistics-StopColumnStatisticsTaskRun) 操作來停止資料表的資料欄統計資料任務執行。

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

**停止資料行統計資料工作執行**

1. 在 AWS Glue 主控台上，選擇 Data Catalog **下的資料表**。

1. 選取正在執行資料欄統計資料任務的資料表。

1. 在**資料表詳細資料**頁面中，選擇資料**資料欄統計資料**。

1. 選擇**停止**。

   如果您在執行完成前停止任務，系統將不會針對該資料表產生資料欄統計資料。

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

在下列範例中，將 `DatabaseName` 和 `TableName` 值取代為實際的資料庫和資料表名稱。

```
aws glue stop-column-statistics-task-run --input-cli-json file://input.json
{
    "DatabaseName": "database_name",
    "TableName": "table_name"
}
```

------

# 刪除資料欄統計資料
<a name="delete-column-stats"></a>

您可以使用 [DeleteColumnStatisticsForTable](https://docs.aws.amazon.com/glue/latest/webapi/API_DeleteColumnStatisticsForTable.html) API 操作 或 刪除資料欄統計資料 AWS CLI。下列範例示範如何使用 AWS Command Line Interface () 刪除資料欄統計資料AWS CLI。

```
aws glue delete-column-statistics-for-table \
    --database-name 'database_name' \
    --table-name 'table_name' \
    --column-name 'column_name'
```

# 考量和限制
<a name="column-stats-notes"></a>

下列考量與限制適用於產生資料欄統計資料。

**考量事項**
+ 使用取樣產生統計資料可縮短執行時間，但可能產生不準確的統計資料。
+ Data Catalog 不會儲存不同版本的統計資料。
+ 每個資料表一次僅能執行一個統計資料產生任務。
+ 如果使用向 Data Catalog 註冊的客戶 AWS KMS 金鑰來加密資料表， AWS Glue 會使用相同的金鑰來加密統計資料。

**資料欄統計資料任務支援產生統計資料：**
+ 當 IAM 角色具有完整資料表權限 (IAM 或 Lake Formation) 時。
+ 當 IAM 角色具有使用 Lake Formation 混合存取模式的資料表權限時。

**資料欄統計資料任務不支援產生統計資料：**
+ 具有以 Lake Formation 儲存格為基礎的存取控制的資料表
+ 交易資料湖：Linux Foundation Delta Lake、Apache Hudi
+ 聯合資料庫中的資料表：Hive 中繼存放區、Amazon Redshift 資料共用
+ 巢狀資料欄、陣列及結構資料類型。
+ 從其他帳戶與您共用的資料表

# 加密您的資料目錄
<a name="catalog-encryption"></a>

 您可以使用由 AWS Key Management Service () 管理的加密金鑰來保護存放在 AWS Glue Data Catalog 靜態 中的中繼資料AWS KMS。您可以使用 **Data Catalog 設定**，為新的 Data Catalog 啟用 Data Catalog 加密。您可以視需要啟用或停用現有 Data Catalog 的加密。啟用時， 會 AWS Glue 加密寫入目錄的所有新中繼資料，同時保持未加密的現有中繼資料。

如需加密 Data Catalog 的詳細資訊，請參閱[加密您的資料目錄](encrypt-glue-data-catalog.md)。

# 使用 Lake Formation 保護您的 Data Catalog
<a name="secure-catalog"></a>

 AWS Lake Formation 是一項服務，可讓您更輕鬆地在其中設定安全的資料湖 AWS。其提供一個集中位置，透過定義精細的存取控制許可來建立和安全地管理資料湖。Lake Formation 使用 Data Catalog 來存放和擷取有關資料湖的中繼資料，例如資料表定義、結構描述資訊和資料存取控制設定。

您可以向 Lake Formation 註冊中繼資料表或資料庫的 Amazon S3 資料位置，並使用其來定義 Data Catalog 資源的中繼資料層級許可。也可以使用 Lake Formation，代表整合分析引擎來管理存放在 Amazon S3 中基礎資料的存儲存取許可。

如需詳細資訊，請參閱[什麼是 AWS Lake Formation？](lake-formation/latest/dg/what-is-lake-formation.html)。

# 在 中使用 AWS Glue Data Catalog 檢視 AWS Glue
<a name="catalog-views"></a>

 您可以在 中建立和管理檢視 AWS Glue Data Catalog，通常稱為 AWS Glue Data Catalog 檢視。這些檢視非常有用，因為它們支援多個 SQL 查詢引擎，可讓您跨不同的 AWS 服務存取相同的檢視 Amazon Athena，例如 Amazon Redshift和 AWS Glue。您可以使用以 Apache Iceberg、Apache Hudi 和 Delta Lake 為基礎的檢視。

 透過在 Data Catalog 中建立檢視，您可以在 中使用資源授予和標籤型存取控制 AWS Lake Formation 來授予其存取權。使用這種存取控制方法，您不必在建立檢視時設定對參考的資料表的額外存取權。這種授予許可的方法稱為定義者語意，這些檢視稱為定義者檢視。如需 中存取控制的詳細資訊 AWS Lake Formation，請參閱《 AWS Lake Formation 開發人員指南》中的[授予和撤銷 Data Catalog 資源的許可](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-catalog-permissions.html)。

 Data Catalog 檢視對於下列使用案例很有用：
+  **精細的存取控制** – 您可以建立一個檢視，根據使用者需要的許可來限制資料存取。例如，您可以使用 Data Catalog 中的檢視阻止不在 HR 部門工作的員工查看個人身分識別資訊 (PII)。
+  **完整檢視定義** – 透過在 Data Catalog 中的檢視上套用篩選條件，您可以確保檢視中可用的資料記錄一律是完整的。
+  **增強的安全性** – 用於建立檢視的查詢定義必須是完整的，使得 Data Catalog 檢視較不容易受到惡意執行者的 SQL 命令影響。
+  **簡單資料共用** – 使用跨帳戶資料共用，與其他 AWS 帳戶共用資料而不移動資料 AWS Lake Formation。

## 建立 Data Catalog 檢視
<a name="catalog-creating-view"></a>

 您可以使用 AWS CLI 和使用 Spark SQL 的 AWS Glue ETL 指令碼來建立 Data Catalog 檢視。用於建立 Data Catalog 檢視的語法包括將檢視類型指定為 `MULTI DIALECT`，並將 `SECURITY` 述詞指定為 `DEFINER`，以指示定義者檢視。

 建立 Data Catalog 檢視的 SQL 陳述式範例：

```
CREATE PROTECTED MULTI DIALECT VIEW database_name.catalog_view SECURITY DEFINER
AS SELECT order_date, sum(totalprice) AS price
FROM source_table
GROUP BY order_date;
```

 建立 Data Catalog 檢視後，您可以使用 IAM 角色搭配檢視上的 AWS Lake Formation 'SELECT` 許可 Amazon Athena Amazon Redshift，從 或 AWS Glue ETL 任務等服務查詢它。您不需要授予檢視中參考的基礎資料表存取權。

 如需建立和設定 Data Catalog 檢視的詳細資訊，請參閱《 AWS Lake Formation 開發人員指南》中的[建置 AWS Glue Data Catalog 檢視](https://docs.aws.amazon.com/lake-formation/latest/dg/working-with-views.html)。

## 受支援的檢視操作
<a name="catalog-supported-view-operations"></a>

 下列命令片段為您顯示使用 Data Catalog 檢視的各種方式：

 **建立檢視** 

 建立 data-catalog 檢視。以下是用於顯示從現有資料表建立檢視的範例：

```
CREATE PROTECTED MULTI DIALECT VIEW catalog_view 
SECURITY DEFINER AS SELECT * FROM my_catalog.my_database.source_table
```

 **ALTER VIEW** 

 可用的語法：

```
ALTER VIEW view_name [FORCE] ADD DIALECT AS query
ALTER VIEW view_name [FORCE] UPDATE DIALECT AS query
ALTER VIEW view_name DROP DIALECT
```

 您可以使用 `FORCE ADD DIALECT`選項，根據新的引擎方言強制更新結構描述和子物件。請注意，如果您不使用 `FORCE` 來更新其他引擎方言，則執行此操作可能會導致查詢錯誤。以下顯示了一個範例：

```
ALTER VIEW catalog_view FORCE ADD DIALECTAS
SELECT order_date, sum(totalprice) AS priceFROM source_tableGROUP BY orderdate;
```

 以下顯示了如何改變檢視以更新方言：

```
ALTER VIEW catalog_view UPDATE DIALECT AS
SELECT count(*) FROM my_catalog.my_database.source_table;
```

 **描述檢視** 

 描述檢視的可用語法：

 `SHOW COLUMNS {FROM|IN} view_name [{FROM|IN} database_name]` – 如果使用者具有描述檢視所需的 AWS Glue 和 AWS Lake Formation 許可，他們可以列出資料欄。以下顯示了用於顯示資料欄的幾個範例命令：

```
SHOW COLUMNS FROM my_database.source_table;    
SHOW COLUMNS IN my_database.source_table;
```

 `DESCRIBE view_name` – 如果使用者具有描述檢視所需的 AWS Glue 和 AWS Lake Formation 許可，他們可以列出檢視中的資料欄及其中繼資料。

 **DROP VIEW** 

 可用的語法：

```
DROP VIEW [ IF EXISTS ] view_name
```

 下列範例顯示了 `DROP` 陳述式，在捨棄檢視之前測試檢視是否存在：

```
DROP VIEW IF EXISTS catalog_view;
```

 `SHOW CREATE VIEW view_name` – 顯示用於建立指定檢視的 SQL 陳述式。以下是用於顯示建立資料目錄檢視的範例：

```
SHOW CREATE TABLE my_database.catalog_view;CREATE PROTECTED MULTI DIALECT VIEW my_catalog.my_database.catalog_view (
  net_profit,
  customer_id,
  item_id,
  sold_date)
TBLPROPERTIES (
  'transient_lastDdlTime' = '1736267222')
SECURITY DEFINER AS SELECT * FROM
my_database.store_sales_partitioned_lf WHERE customer_id IN (SELECT customer_id from source_table limit 10)
```

 **顯示檢視** 

 列出目錄中的所有檢視，例如一般檢視、多方言檢視 (MDV) 和不含 Spark 方言的 MDV。可用的語法如下：

```
SHOW VIEWS [{ FROM | IN } database_name] [LIKE regex_pattern]:
```

 以下顯示了用於顯示檢視的範例命令：

```
SHOW VIEWS IN marketing_analytics LIKE 'catalog_view*';
```

 如需建立和設定資料型錄檢視的詳細資訊，請參閱《 AWS Lake Formation 開發人員指南》中的[建置 AWS Glue 資料型錄檢視](https://docs.aws.amazon.com/lake-formation/latest/dg/working-with-views.html)。

## 查詢 Data Catalog 檢視
<a name="catalog-view-query"></a>

 建立 Data Catalog 檢視之後，您可以查詢檢視。在 AWS Glue 任務中設定的 IAM 角色必須在 Data Catalog 檢視上具有 Lake Formation **SELECT** 許可。您不需要授予檢視中參考的基礎資料表存取權。

 完成所有設定之後，您可以查詢檢視。例如，您可以執行下列查詢來存取檢視。

```
SELECT * from my_database.catalog_view LIMIT 10;
```

## 限制
<a name="catalog-view-limitations"></a>

 使用 Data Catalog 檢視時，請考慮下列限制。
+  您只能使用 AWS Glue 5.0 及更高版本建立 Data Catalog 檢視。
+  Data Catalog 檢視定義者必須具有對檢視存取的基礎基本資料表的 `SELECT` 存取權限。如果特定基本資料表對定義者角色施加了任何 Lake Formation 篩選條件，則建立 Data Catalog 檢視會失敗。
+  基本資料表不得具有 AWS Lake Formation中的`IAMAllowedPrincipals` 資料湖許可。如果存在，則錯誤**多方言檢視只能參考沒有 IAMAllowedPrincipals 許可的資料表**。
+  資料表的 Amazon S3 位置必須註冊為 AWS Lake Formation 資料湖位置。如果未註冊資料表，則會發生 `Multi Dialect views may only reference AWS Lake Formation managed tables` 錯誤。如需有關如何在 中註冊 Amazon S3 位置的資訊 AWS Lake Formation，請參閱《 AWS Lake Formation 開發人員指南》中的[註冊 Amazon S3 位置](https://docs.aws.amazon.com/lake-formation/latest/dg/register-data-lake.html)。
+  您只能建立 `PROTECTED` Data Catalog 檢視。不支援 `UNPROTECTED` 檢視。
+  您無法在 Data Catalog 檢視定義中參考另一個 AWS 帳戶中的資料表。您也無法在位於不同區域的相同帳戶中參考資料表。
+  若要跨帳戶或區域共用資料，整個檢視必須使用 AWS Lake Formation 資源連結跨帳戶和跨區域共用。
+  不支援使用者定義的函數 (UDF 或 UDAF)。
+  您無法在 Data Catalog 檢視中參考其他檢視。