

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

# 資料查詢 – SQL 查詢和資料表組態
<a name="dataexports-data-query"></a>

例如，資料匯出可讓您撰寫 SQL 查詢 （資料欄選擇、資料列篩選、資料欄別名），這些查詢會根據提供的資料表執行 – CUR 2.0。每個資料表也可能有資料表組態，可變更資料表中包含的資料。例如，使用 CUR 2.0，您可以指定組態來選擇每小時、每日或每月的時間精細程度，或指定組態來新增資源層級精細程度的成本和用量資料。

若要完整定義匯出資料查詢，您必須指定下列兩個屬性：
+ **SQL 查詢：**SQL 陳述式會根據資料表執行，並決定匯出傳回的資料。
+ **資料表組態：**在 SQL 查詢對其執行之前，資料表組態設定會變更資料表中包含的資料。

在**資料匯出**主控台頁面中，您可以使用根據您的選擇建置 SQL 陳述式和資料表組態的工作流程。在資料匯出 SDK/CLI 中，您可以撰寫自己的 SQL 陳述式和資料表組態。

Data Exports SQL 陳述式 (`QueryStatement`) 使用以下語法：

```
SELECT <column_name_a>, <column_name_b>.<attribute_name> AS <new_name>, ... 
FROM <TABLE_NAME>
[ WHERE <column_name> OPERATOR <value> AND|OR ... ]
[ LIMIT number ]
```

資料匯出資料表組態 (`TableConfigurations`) 使用以下語法：

```
{"<TABLE_NAME>":
    {"<CONFIGURATION_NAME_A>": "<value>",
     "<CONFIGURATION_NAME_B>": "<value>", 
     ...}
            }
```

## SQL 查詢
<a name="dataexports-sql-query"></a>

SQL 查詢會針對資料表執行，並決定匯出中傳回的資料。SQL 陳述式可在建立匯出之後變更，但無法變更選取的資料表。

SQL 陳述式 （在 QueryStatement 欄位中） 最多可有 36，000 個字元。

Data Exports SQL 查詢中可能的關鍵字如下。

**注意**  
關鍵字不區分大小寫。資料欄名稱和資料表名稱區分大小寫。

**SELECT**  
必要.  
指定要從資料表中選取的資料欄。每個查詢只能有一個 SELECT 陳述式。  
使用點運算子`.`將選取 MAP 或 STRUCT 資料欄的屬性指定為單獨的資料欄。SQL 輸出中產生的資料欄名稱預設為屬性名稱。  
例如，您可以從產品 MAP 欄中選取屬性。  
`SELECT product.from_location FROM COST_AND_USAGE_REPORT`  
這會從`product`資料欄選取`from_location`屬性，並使用屬性的資料建立新的資料欄。根據預設，在輸出中，此欄的名稱將為 `from_location`。不過，它可以使用 重新命名`AS`。  
如需每個資料表中可用 MAP 和 STRUCT 資料欄的詳細資訊，以及這些資料欄具有的屬性，請參閱[資料匯出資料表字典](https://docs.aws.amazon.com/cur/latest/userguide/dataexports-table-dictionary.html)。

**AS**  
選用。  
啟用所選取資料欄的重新命名。新的欄名稱不能包含英數字元 (a-z、A-Z 和 0-9) 和底線 ( \_ ) 以外的空格或字元。您無法在定義資料欄別名時使用引號，以使用其他字元。  
選取 MAP 或 STRUCT 資料欄的屬性來重新命名產生的資料欄以符合 CUR 的結構描述時，別名很有用。例如，若要符合 CUR 顯示資料`product_from_location`欄的方式，請使用 CUR 2.0 資料表在資料匯出中寫入下列查詢。  
`SELECT product.from_location AS product_from_location FROM COST_AND_USAGE_REPORT`  
這會使用名為 的資料欄建立匯出`product_from_location`。

**FROM**  
必要.  
指定要查詢的資料表。每個查詢只能有一個 FROM 陳述式。

**其中**  
選用。  
將資料列篩選為僅符合您指定子句的資料列。  
WHERE (哪裡) 子句支援下列運算子：  
+ **=** 值必須符合字串或數字。
+ **！= 和 <>** 值不得符合指定的字串或數字。
+ **<、<=、> **和 **>=** 值必須小於、小於或等於、大於或等於數字。
+ **AND** 指定的兩個條件都必須為 true 才能相符。您可以使用多個 **AND** 關鍵字來指定兩個或多個條件。
+ **OR** 指定的任一條件都必須為 true 才能符合。您可以使用多個 **OR** 關鍵字來指定兩個或多個條件。
+ **NOT** 指定的條件不得為 true 才能比對。
+ **IN** 關鍵字後括號內指定的任何值都必須為 true 才能相符。
+ 括號可用於建構多條件 WHERE 子句
將字串表達為運算子後面的值時，請使用單引號`'`而非雙引號。您不需要逸出單引號。例如，您可以撰寫下列 WHERE 陳述式：  
`WHERE line_item_type = 'Discount' OR line_item_type = 'Usage'`

**限制**  
選用。  
將查詢傳回的資料列數限制為您指定的值。

## 資料表組態
<a name="dataexports-table-configurations"></a>

資料表組態是使用者控制的屬性，使用者可以將其設定為在資料匯出中查詢資料表之前變更資料表的資料或結構描述。資料表組態會儲存為 JSON 陳述式，並透過 AWS SDK/CLI 中的使用者輸入或主控台中的使用者選取來指定。

例如，CUR 2.0 具有資料表組態，可變更資料精細程度 （每小時、每日、每月）、是否包含資源層級精細資料，以及是否包含分割成本分配資料。並非所有資料表都有組態。如需每個資料表可用組態的詳細資訊，請參閱[資料匯出資料表字典](https://docs.aws.amazon.com/cur/latest/userguide/dataexports-table-dictionary.html)。

如果使用者未指定資料表組態，則會假設每個資料表組態參數都有預設值。匯出建立後就無法變更資料表組態。