

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

# 使用 Amazon Athena 查詢成本和用量報告
<a name="cur-query-athena"></a>

Amazon Athena 是一種無伺服器查詢服務，您可以使用標準 SQL 分析 Amazon Simple Storage Service (Amazon S3) 中 AWS 成本和用量報告 (AWS CUR) 的資料。這可協助您避免建立自己的資料倉儲解決方案來查詢 AWS CUR 資料。

強烈建議您同時建立新的 Amazon S3 儲存貯體和新的 AWS CUR 報告以與 Athena 搭配使用。 AWS CUR 僅支援 Athena 的 Apache Parquet 壓縮格式，並自動覆寫存放在 S3 儲存貯體中的先前報告。

本節概述如何使用 Athena 搭配成本和用量報告。如需 Athena 服務的完整說明，請參閱[《Amazon Athena 使用者指南](https://docs.aws.amazon.com/athena/latest/ug/)》。

**Topics**
+ [使用 CloudFormation 範本設定 Athena](use-athena-cf.md)
+ [手動設定 Athena](cur-ate-manual.md)
+ [執行 Amazon Athena 查詢](cur-ate-run.md)
+ [將報告資料載入至其他資源](cur-query-other.md)

如需使用 Athena 查詢報告的示範，請參閱下列影片。

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


# 使用 CloudFormation 範本設定 Athena
<a name="use-athena-cf"></a>

**重要**  
CloudFormation 不支援跨區域資源。如果您打算使用 CloudFormation 範本，則必須在相同區域中建立所有資源 AWS 。該區域必須支援以下服務：  
AWS Lambda
Amazon Simple Storage Service (Amazon S3)
AWS Glue
Amazon Athena

為了簡化和自動化與 Athena 的成本和用量報告的整合， AWS 提供具有數個金鑰資源的 CloudFormation 範本，以及您為 Athena 整合設定的報告。 CloudFormation 範本包含 AWS Glue 爬蟲程式、 AWS Glue 資料庫和 AWS Lambda 事件。

使用 的 Athena 整合設定程序會 CloudFormation 移除儲存貯體可能已有的任何 Amazon S3 事件。這可能會對現有 AWS CUR 報告的任何現有事件型程序產生負面影響。強烈建議您同時建立新的 Amazon S3 儲存貯體和新的 AWS CUR 報告，以與 Athena 搭配使用。

在使用 CloudFormation 範本自動化 Athena 整合之前，請務必執行下列動作：
+ 為您的報告建立新的 Amazon S3 儲存貯體。如需詳細資訊，請參閱《Amazon S3 使用者指南》**中的[建立儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)。
+ [建立新的報告](cur-create.md)以搭配 Athena 使用。在設定程序期間，針對**報告資料整合**，選擇 **Athena**。
+ 等待第一個報告交付到您的 Amazon S3 儲存貯體。 AWS 交付您的第一個報告最多可能需要 24 小時。<a name="use-athena-cf-steps"></a>

**使用 Athena CloudFormation 範本**

1. 開啟位於 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 的 Amazon S3 主控台。

1. 從儲存貯體清單中，選擇您選擇接收 AWS CUR 報告的儲存貯體。

1. 選擇您的報告路徑字首 (*your-report-path-prefix/*)。然後，選擇您的報告名稱 (*your-report-name/*)。

1. 選擇`.yml`範本檔案。

1. 選擇**物件動作**，然後選擇**下載為**。

1. 在 https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 開啟 CloudFormation 主控台。

1. 如果您從未使用 CloudFormation 過 ，請選擇**建立新堆疊**。否則，請選擇 **Create Stack (建立堆疊)**。

1. 在 **Prepare template (準備範本)** 下，選擇 **Template is ready (範本已就緒)**。

1. 在 **Template source (範本來源)**，選擇 **Upload a template file (上傳範本檔案)**。

1. 選擇**選擇檔案**。

1. 選擇下載的 `.yml` 範本，接著選擇 **Open (開啟)**。

1. 選擇**下一步**。

1. 在 **Stack name (堆疊名稱)** 中，輸入範本的名稱，然後選擇 **Next (下一步)**。

1. 選擇**下一步**。

1. 在頁面底部，選取**我確認 AWS CloudFormation 可能會建立 IAM 資源。**

   此範本會建立以下資源：
   + 三個 IAM 角色
   +  AWS Glue 資料庫
   +  AWS Glue 爬蟲程式
   + 兩個 Lambda 函數
   + Amazon S3 通知

1. 選擇**建立堆疊**。

**更新現有的 Athena CloudFormation 範本**

1. 開啟位於 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 的 Amazon S3 主控台。

1. 從儲存貯體清單中，選擇您選擇接收 AWS CUR 報告的儲存貯體。

1. 選擇您的報告路徑字首 (*your-report-path-prefix/*)。然後，選擇您的報告名稱 (*your-report-name/*)。

1. 選擇`.yml`範本檔案。

1. 選擇**物件動作**，然後選擇**下載為**。

1. 在 https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 開啟 CloudFormation 主控台。

1. 選取先前建立的堆疊，然後選擇**更新**。

1. 在 **Prepare template (準備範本)** 下方，選擇 **Replace current template (取代目前範本)**。

1. 在 **Template source (範本來源)**，選擇 **Upload a template file (上傳範本檔案)**。

1. 選擇**選擇檔案**。

1. 選擇下載的 `.yml` 範本，接著選擇 **Open (開啟)**。

1. 選擇**下一步**。

1. 在**指定堆疊詳細資訊**頁面上，修改任何詳細資訊，然後選擇**下一步**。

1. 選擇**下一步**。

1. 在頁面底部，選取**我確認 AWS CloudFormation 可能會建立 IAM 資源。**

1. 請選擇**更新堆疊**。

# 手動設定 Athena
<a name="cur-ate-manual"></a>

我們強烈建議您使用 AWS CloudFormation 範本來建立資料表，而不是自行建立資料表。提供的 SQL 查詢會建立僅涵蓋單一月份資料的資料表，但 AWS CloudFormation 範本會建立可包含多個月且會自動更新的資料表。如需如何設定 AWS CloudFormation 範本的詳細資訊，請參閱 [使用 CloudFormation 範本設定 Athena](use-athena-cf.md)。

如果您選擇不使用 CloudFormation 範本來設定 Athena 資料表，請依照下列步驟手動操作。您需要建立資料表，才能對 AWS CUR 資料執行 SQL 查詢。您需要每月至少執行一次此步驟，而且資料表只包含來自目前 AWS CUR 的資料。

在資料表建立過程中， 會 AWS 轉換 AWS CUR 資料欄名稱。如需轉換程序的詳細資訊，請參閱 [欄位名稱](cur-ate-run.md#column-transformations)。
+ [建立 Athena 資料表](create-manual-table.md)
+ [建立成本和用量報告狀態表](create-manual-cur-table.md)
+ [上傳您的報告分割區](upload-report-partitions.md)

# 建立 Athena 資料表
<a name="create-manual-table"></a>

AWS 包含您在 AWS CUR 儲存貯體中建立此資料表所需的 SQL。<a name="create-manual-table-steps"></a>

**建立您的 Athena 資料表**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)：// 開啟 Amazon S3 主控台。

1. 從儲存貯體清單中，選擇您選擇接收成本和用量報告的儲存貯體。

1. 導覽路徑 `your-report-prefix-your-report-name-path-to-report`。

   確切路徑取決於您的 AWS CUR 是否設定為覆寫先前的版本。如需詳細資訊，請參閱[成本和用量報告交付時間表](understanding-report-versions.md#access-cur-s3-timeline)。

1. 開啟檔案 `my-report-name-create-table.sql`。

1. 從檔案中複製 SQL，以 `CREATE` 開頭，並以 `LOCATION 's3://your-report-prefix/your-report-name/the-rest-of-the=path'` 結尾。請記下第一行，因為您需要資料庫名稱和資料表來建立 Athena 資料庫。

1. 前往 [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) 開啟 Athena 主控台。

1. 在 **New query 1 (新查詢 1)** 查詢窗格中，貼上以下 SQL。在 *`<database name>.<table name>`* 中，請使用您複製的 SQL 第一行中的資料庫和資料表名稱。

   ```
   CREATE DATABASE <database name>
   ```

1. 選擇 **Run query** (執行查詢)。

1. 在下拉式功能表中，選擇您剛才建立的資料庫。

1. 在 **New query 1 (新查詢 1)** 查詢窗格中，貼上 SQL 檔案中的其餘 SQL。

1. 選擇 **Run query** (執行查詢)。

建立資料表之後，您需要載入您的分割區，然後才能執行查詢。如需詳細資訊，請參閱[上傳您的報告分割區](upload-report-partitions.md)。

# 建立成本和用量報告狀態表
<a name="create-manual-cur-table"></a>

AWS 每天會多次重新整理 AWS CUR。Athena 無法判斷何時 AWS 正在重新整理報告，這可能會導致查詢結果與新舊資料的組合。若要緩解此問題，請建立資料表來追蹤 是否 AWS 重新整理您的成本和用量報告，並查詢該資料表以查看 AWS 是否重新整理您的資料。您只需要建立一次此資料表。之後， 會將資料表 AWS 保持在最新狀態。<a name="create-refresh-table"></a>

**建立重新整理表格**

1. 前往 [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) 開啟 Athena 主控台。

1. 在 **New query 1 (新查詢 1)** 查詢窗格中，貼上以下 SQL。

   ```
   CREATE EXTERNAL TABLE IF NOT EXISTS cost_and_usage_data_status(
     status STRING)
   ROW FORMAT SERDE
     'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
   WITH SERDEPROPERTIES (
    'serialization.format' = '1'
   )
   LOCATION 's3://{S3_Bucket_Name}/{Report_Key}/cost_and_usage_data_status/'
   ```

1. 選擇 **Run query** (執行查詢)。

若要檢查 AWS 是否重新整理您的資料，請使用 Athena 主控台執行下列 SQL 查詢。

```
select status from cost_and_usage_data_status 
```

# 上傳您的報告分割區
<a name="upload-report-partitions"></a>

若要查詢您的成本和用量報告資料，您需要將資料上傳至 Athena 資料表。您必須為每個 AWS 交付給您的新 AWS CUR 報告執行此操作。<a name="upload-partitions"></a>

**上傳您最新的分割區**

1. 前往 [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) 開啟 Athena 主控台。

1. 選擇資料表名稱旁的垂直三個點。

1. 選擇**載入分割區**。

如果您未上傳分割區，Athena 不會傳回任何結果或指出遺失資料的錯誤訊息。

# 執行 Amazon Athena 查詢
<a name="cur-ate-run"></a>

若要對資料執行 Athena 查詢，請先使用 Athena 主控台來檢查 AWS 是否重新整理您的資料，然後在 Athena 主控台上執行查詢。當您執行 SQL 時，請務必從下拉式清單中選擇正確的資料庫。您可以使用下列 SQL 來檢查狀態。

```
select status from cost_and_usage_data_status 
```

狀態可以有兩種結果，包括 `READY` 和 `UPDATING`。如果狀態為 `READY`，則您可以查詢 Athena 資料庫。如果狀態為 `UPDATING`，則 Athena 可能會傳回不完整的結果。

確認 AWS 正在重新整理資料後，您可以執行自己的查詢。例如，以下查詢顯示名為 `mycostandusage_parquet` 的範例資料庫中各服務年初至今的每月成本。下列查詢顯示 2018 year-to-date的成本。更新年份以查看目前year-to-date的成本。

```
SELECT line_item_product_code,
sum(line_item_blended_cost) AS cost, month
FROM mycostandusage_parquet
WHERE year='2018'
GROUP BY  line_item_product_code, month
HAVING sum(line_item_blended_cost) > 0
ORDER BY  line_item_product_code;
```

## 欄位名稱
<a name="column-transformations"></a>

Athena 資料欄名稱限制與成本和用量報告資料欄名稱限制不同。這表示當您的 AWS CUR 資料上傳到 Athena 資料表時，資料欄名稱 change. AWS makes：
+ 大寫字母之前會新增下底線
+ 大寫字母替換為小寫字母 
+ 任何非英數字元會替換為底線
+ 重複的底線將會移除
+ 任何前置和後置底線將會移除
+ 如果欄位名稱的長度大於欄位名稱長度上限，則下底線會由左至右遭到刪除

**注意**  
套用這些規則後，某些資源標籤資料欄會有重複的名稱。當有多個資料欄具有相同名稱時， 會 AWS 合併資料欄。

例如，資料欄名稱`ExampleColumnName`會變成 `example_column_name`，而資料欄名稱`Example Column Name`會變成 `example_column_name`。

# 將報告資料載入至其他資源
<a name="cur-query-other"></a>

您可以將成本和用量報告上傳至 Amazon Redshift 和 Amazon Quick，以分析您的 AWS 成本和用量。

**Topics**
+ [將報告資料載入 Amazon Quick](#cur-query-other-qs)
+ [將報告資料載入 Amazon Redshift](#cur-query-other-rs)

## 將報告資料載入 Amazon Quick
<a name="cur-query-other-qs"></a>

您可以將成本和用量報告上傳至 Amazon Quick。

如需上傳到快速的詳細資訊，請參閱*《快速使用者指南*》中的[使用 Amazon S3 檔案建立資料集](https://docs.aws.amazon.com/quicksight/latest/user/create-a-data-set-s3.html)。

## 將報告資料載入 Amazon Redshift
<a name="cur-query-other-rs"></a>

本節說明如何將 AWS CUR 上傳至 Amazon Redshift，以分析您的 AWS 成本和用量。

**重要**  
Amazon Redshift 資料欄不區分大小寫，且具有比使用者定義標籤更嚴格的字元限制。為了防止 Amazon Redshift 與使用者定義標籤之間的衝突， 會將您的標籤 AWS 取代為標籤 `userTag0`、`userTag1`、 `userTag2`等。建立 Amazon Redshift 資料表並將報告上傳至其中之後，您可以建立 Amazon Redshift 資料表，將 AWS定義的標籤映射至使用者定義的標籤。標籤表格可讓您查詢原始標籤。  
例如，如果您有標籤 `OWNER`和 `Owner`，Amazon Redshift 不允許您建立名為「擁有者」的兩個資料欄的資料表。反之，您可以建立一個具有欄 `userTag0` 和 `userTag1` 的報告表格來取代 `OWNER` 和 `Owner`，然後建立一個具有欄 `remappedUserTag` 和 `userTag` 的表格。資料`remappedUserTag`欄存放 AWS定義的標籤 `userTag0`和 `userTag1`，而資料`userTag`欄存放您的原始標籤，`OWNER`以及 `Owner` 

AWS 提供命令來建立 Amazon Redshift 資料表、上傳報告、建立標籤資料表，以及將所有標籤列插入標籤資料表。這些命令會在 S3 中與您的資訊清單檔案一起存放的`RedshiftCommands.sql`檔案中提供給您，以及在 Billing and Cost Management 主控台的 **Redshift 檔案****協助程式檔案中**提供給您。 AWS 也提供 RedshiftManifest 檔案，可控制在 RedshiftCommand 檔案上傳中報告命令。刪除或移除 RedshiftManifest 檔案會破壞 RedshiftCommands 檔案中的複製命令。

**在 Billing and Cost Management 主控台中尋找 `RedshiftCommands.sql` 檔案**

1. 開啟「帳單和成本管理」主控台，網址為 [https://console.aws.amazon.com/costmanagement/](https://console.aws.amazon.com/costmanagement/)。

1. 在導覽窗格的**舊版頁面**下，選擇**成本和用量報告**。

1. 選擇您要上傳至 Amazon Redshift 的報告。

1. 旁邊 **您已在下列服務中啟用檢視報告 (Amazon Redshift)：**，選擇 **Amazon Redshift**。

1. 複製對話方塊中的命令並貼到您的 SQL 用戶端。

下列程序假設熟悉資料庫和 Amazon Redshift。

**將成本和用量報告上傳至 Amazon Redshift**

1. 建立 Amazon Redshift 叢集。

   如需詳細資訊，請參閱《*Amazon Redshift 管理指南*》中的[建立叢集](https://docs.aws.amazon.com/redshift/latest/mgmt/managing-clusters-console.html#create-cluster)。

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)：// 開啟 Amazon S3 主控台。

1. 導覽至您存放 AWS CUR 的 Amazon S3 位置。

1. 開啟 `RedshiftCommands.sql` 檔案。

   檔案包含自訂命令，可用來建立 Amazon Redshift 資料表、從 Amazon S3 上傳 AWS CUR，以及建立標籤資料表，以允許使用者定義的標籤匯入 Amazon Redshift。

1. 在 `copy`命令中，將 *<AWS\$1ROLE>* 取代為 IAM 角色的 ARN，該角色具有存取您存放 AWS CUR 之 Amazon S3 儲存貯體的許可。

1. 將 *<S3\$1BUCKET\$1REGION>* 取代為 Amazon S3 儲存貯體所在的區域。例如 `us-east-1`。

1. 使用 SQL 用戶端連接到叢集。

   如需詳細資訊，請參閱《[Amazon Redshift 管理指南》中的存取 Amazon Redshift 叢集和資料庫](https://docs.aws.amazon.com/redshift/latest/mgmt/using-rs-tools.html)。 **

1. 依下列順序，從 `RedshiftCommands.sql` 檔案複製 SQL 命令到您的 SQL 用戶端：
   + create table - 此命令會建立具有自訂結構描述的 Amazon Redshift 資料表，以符合您的報告。
   + copy - 此命令使用提供的 IAM 角色，將 AWS CUR 檔案從 S3 上傳到 Amazon Redshift。
   + create tag table - 此命令建立表格，讓您將 AWS定義的標籤對應到您的使用者定義的標籤。
   + insert - 這些命令將使用者定義標籤插入到標籤表格。

1. 將 AWS CUR 中的所有資料複製到 Amazon Redshift 之後，您可以使用 SQL 查詢資料。如需在 Amazon Redshift 中查詢資料的詳細資訊，請參閱《[Amazon Redshift 資料庫開發人員指南》中的 Amazon Redshift SQL](https://docs.aws.amazon.com/redshift/latest/dg/c_redshift-sql.html)。 **

**注意**  
成本和用量報告中的資料欄數量可能會逐月變更，例如建立新的成本分配標籤，或服務新增新的產品屬性時。我們建議您每月將資料從 AWS CUR 複製到新資料表，然後將您感興趣的資料欄複製到單獨的month-by-month資料表。