

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

# 数据查询 – SQL 查询和表配置
<a name="dataexports-data-query"></a>

通过 Data Exports，您可以编写针对提供的表（例如 CUR 2.0）执行的 SQL 查询（列选择、行筛选、列别名）。每个表还可能具有更改表中包含的数据的表配置。例如，使用 CUR 2.0，您可以指定一项配置来选择每小时、每天或每月的时间粒度，或者指定一项配置来在资源级粒度添加成本和使用情况数据。

要完全定义导出数据查询，您必须指定以下两个属性：
+ **SQL 查询**：SQL 语句是针对表执行的，并确定导出返回的数据。
+ **表配置**：表配置设置会更改在对表执行 SQL 查询之前表中包含的数据。

在 **Data Exports** 控制台页面中，您可以使用根据您的选择构建 SQL 语句和表配置的工作流。在 Data Exports 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 ]
```

Data Exports 表配置 (`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 输出中结果列的名称是属性名称。  
例如，您可以从 product MAP 列中选择属性。  
`SELECT product.from_location FROM COST_AND_USAGE_REPORT`  
这将从 `product` 列中选择 `from_location` 属性，并使用该属性的数据创建一个新列。默认情况下，在输出中，此列的名称将为 `from_location`。但是，您可以使用 `AS` 对它进行重命名。  
有关每个表中可用的 MAP 和 STRUCT 列以及这些列所具有的属性的更多信息，请参阅 [Data Exports 表字典](https://docs.aws.amazon.com/cur/latest/userguide/dataexports-table-dictionary.html)。

**AS**  
可选。  
启用对所选列的重命名。新列名称不能包含空格或字母数字字符（a-z、A-Z 和 0-9）和下划线 ( \$1 ) 以外的字符。在定义列别名时不能使用引号来使用其他字符。  
选择 MAP 或 STRUCT 列的属性来重命名生成的列以匹配 CUR 的架构时，别名可能很有用。例如，要匹配 CUR 显示 `product_from_location` 列的方式，请在 Data Exports 中使用 CUR 2.0 表编写以下查询。  
`SELECT product.from_location AS product_from_location FROM COST_AND_USAGE_REPORT`  
这将创建一个包含名为 `product_from_location` 的列的导出。

**FROM**  
必需。  
指定要查询的表。每个查询只能有一个 FROM 语句。

**WHERE**  
可选。  
将行筛选为仅与指定子句匹配的行。  
WHERE 子句支持以下运算符：  
+ **=**：值必须与字符串或数字匹配。
+ **\$1= 和 <>**：值不得与指定的字符串或数字匹配。
+ **<、<=、> ** 和 **>=**：值必须小于、小于或等于、大于或者大于或等于相应数字。
+ **AND** 指定的两个条件都必须为真才能匹配。您可以使用多个 **AND** 关键字来指定两个或更多条件。
+ **OR**：指定的任一条件必须为 true 才能匹配。您可以使用多个 **OR** 关键字来指定两个或更多条件。
+ **NOT**：指定的条件不得为 true 才能匹配。
+ **IN**：关键字后面括号内指定的任何值都必须为 true 才能匹配。
+ 可用于构造多条件 WHERE 子句
将字符串表示为运算符后面的值时，请使用单引号 `'` 而不是双引号。您不需要转义单引号。例如，您可以编写以下 WHERE 语句：  
`WHERE line_item_type = 'Discount' OR line_item_type = 'Usage'`

**LIMIT**  
可选。  
将查询返回的行数限制为指定的值。

## 表配置
<a name="dataexports-table-configurations"></a>

表配置是用户控制的属性，用户可以设置这些属性，以便在 Data Exports 中查询表之前更改表的数据或架构。表配置保存为 JSON 语句，要么通过 S AWS DK/CLI 中的用户输入指定，要么通过控制台中的用户选择来指定。

例如，CUR 2.0 具有表配置，用于更改数据粒度（每小时、每天、每月）、是否包含资源级粒度数据以及是否包含拆分成本分配数据。并非所有表都有配置。有关每个表的可用配置的更多信息，请参阅 [Data Exports 表字典](https://docs.aws.amazon.com/cur/latest/userguide/dataexports-table-dictionary.html)。

每个表配置参数都有一个默认值，如果用户未指定表配置，则假定该值。创建导出后无法更改表配置。