

# 将 Amazon S3 中的文件用作数据源
<a name="edit-jobs-source-s3-files"></a>

如果您选择 Amazon S3 作为数据源，则可以选择以下任一项：
+ 数据目录数据库和表。
+ Amazon S3 中的存储桶、文件夹或文件。

如果您将 Amazon S3 存储桶用作数据源，AWS Glue 会从文件中的指定位置检测数据的架构，或者使用您指定的文件作为样本文件。当您使用 **Infer schema (推断架构)** 按钮时，会检测架构。如果您更改 Amazon S3 位置或样本文件，则必须选择 **Infer schema (推断架构)**，使用新信息执行架构检测。

**配置直接从 Amazon S3 中的文件读取数据的数据源节点**

1. 转到新任务或已保存任务的可视编辑器。

1. 在任务图中为 Amazon S3 源选择数据源节点。

1. 选择 **Data source properties (数据源属性)** 选项卡，然后输入以下信息：
   + **S3 source type (S3 源类型)**：（仅适用于 Amazon S3 数据源）选择选项 **S3 location (S3 位置)**。
   + **S3 URL**：输入 Amazon S3 存储桶、文件夹或包含任务数据的文件的路径。您可以选择 **Browse S3 (浏览 S3)**，从您的账户的可用位置中选择路径。
   + **Recursive (递归)**：如果需要 AWS Glue 从 S3 位置在子文件夹中的文件读取数据，请选择该选项。

     如果子文件夹包含分区数据，AWS Glue 不会将文件夹名称中指定的分区信息添加到数据目录。例如，您可考虑 Amazon S3 中的以下文件夹。

     ```
     S3://sales/year=2019/month=Jan/day=1
     S3://sales/year=2019/month=Jan/day=2
     ```

     如果选择 **Recursive (递归)**，将 `sales` 文件夹选为 S3 位置，择 AWS Glue 会读取所有子文件夹中的数据，但不会为年份、月份或日创建分区。
   + **Data format (数据格式)**：选择数据的存储格式。您可以选择 JSON、CSV 或 Parquet。您选择的值会告知 AWS Glue 任务如何从源文件读取数据。
**注意**  
如果您未选择正确的数据格式，AWS Glue 可能会正确推断模式，但任务将无法正确解析源文件中的数据。

     您可以输入其他配置选项，具体取决于您选择的格式。
     + **JSON**（JavaScript 对象表示法）
       + **JsonPath**：输入指向用于定义表架构的对象的 JSON 路径。JSON 路径表达式始终引用 JSON 结构，类似于 XPath 表达式与 XML 文档的结合使用方式。JSON 路径中的“根成员对象”始终称为 `$`，即使它是一个对象或数组。JSON 路径可以用点表示法或括号表示法编写。

         有关 JSON 路径的更多信息，请参阅 GitHub 网站上的 [JsonPath](https://github.com/json-path/JsonPath)。
       + **Records in source files can span multiple lines (源文件中的记录可以跨越多行)**：如果单个记录可以跨越 CSV 文件中的多行，请选择此选项。
     + **CSV**（逗号分隔值）
       + **Delimiter (分隔符)**：输入字符以表示行中每个列条目的分隔项，例如 `;` 或者 `,`。
       + **Escape character (转义字符)**：输入用作转义字符的字符。此字符表示紧接转义字符的字符应该按字面意思处理，不应将其解释为分隔符。
       + **Quote character (引号字符)**：输入用于将单独的字符串分组为单个值的字符。例如，如果您的 CSV 文件包含 `"This is a single value"` 之类的值，您将选择 **Double quote (") (双引号（"）)**。
       + **Records in source files can span multiple lines (源文件中的记录可以跨越多行)**：如果单个记录可以跨越 CSV 文件中的多行，请选择此选项。
       + **First line of source file contains column headers (源文件的第一行包含列标题)**：如果 CSV 文件中的第一行包含列标题而不是数据，请选择此选项。
     + **Parquet**（Apache Parquet 列式存储）

       对于以 Parquet 格式存储的数据，不需要配置其他设置。
     + **Apache Hudi**

       对于以 Apache Hudi 格式存储的数据，不需要配置其他设置。
     + **Delta Lake**

       对于以 Delta Lake 格式存储的数据，不需要配置其他设置。
     + **Excel**

       对于以 Excel 格式存储的数据，不需要配置其他设置。
   + **Partition predicate (分区谓词)**：要对从数据源读取的数据进行分区，请输入基于 Spark SQL 的布尔表达式，仅包含分区列。例如：`"(year=='2020' and month=='04')"`
   + **Advanced options (高级选项)**：如果需要 AWS Glue 根据特定文件检测数据的架构，请展开此部分。
     + **Schema inference (架构推理)**：如果您希望特定的文件，而不是让 AWS Glue 选择文件，则选择选项**从 S3 中选择样本文件**。架构推断不适用于 Excel 数据源。
     + **Auto-sampled file (自动取样文件)**：输入 Amazon S3 中用于推断架构的文件的路径。

     如果要编辑数据源节点并更改选定的样本文件，请选择 **Reload schema (重新加载架构)**，使用新的样本文件检测架构。

1. 选择 **Infer schema (推断架构)** 按钮，从 Amazon S3 的源文件中检测架构。如果您更改 Amazon S3 位置或样本文件，则必须再次选择 **Infer schema (推断架构)**，使用新信息推断架构。