

# 使用列式存储格式
<a name="columnar-storage"></a>

[Apache Parquet](https://parquet.apache.org) 和 [ORC](https://orc.apache.org/) 是针对快速检索数据进行了优化的列式存储格式，用于 AWS 分析应用程序中。

列式存储格式具有以下特征，使其适合用于 Athena：
+ *按列压缩，针对列数据类型选择压缩算法*，可以节省 Amazon S3 中的存储空间，并减少查询处理期间的磁盘空间和输入/输出。
+ Parquet and ORC 中的*谓词下推*使得 Athena 查询可以只提取所需的数据块，从而提高查询性能。当 Athena 查询从您的数据获取特定列值时，它使用来自数据块谓词的统计信息（例如最大/最小值）来确定读取还是跳过改数据块。
+ Parquet 和 ORC 中的*数据拆分*使得 Athena 可以将数据读取拆分为多个读进程，在查询处理期间增加并行度。

要将现有原始数据从其他存储格式转换为 Parquet 或 ORC，您可以在 Athena 中运行 [CREATE TABLE AS SELECT (CATS)](ctas.md)查询，并将数据存储格式指定为 Parquet 或 ORC，或使用 AWS Glue 爬网程序。

## 在 Parquet 和 ORC 之间进行选择
<a name="columnar-storage-choosing"></a>

将根据具体的使用需求在 ORC（优化的行列式）和 Parquet 之间进行选择。

Apache Parquet 可实现高效的数据压缩和编码方案，非常适合运行复杂的查询和处理大量数据。Parquet 已针对与 [Apache Arrow](https://arrow.apache.org/) 配合使用进行了优化，如果使用的工具与 Arrow 相关，这可能会很有优势。

可通过 ORC 提高效存储 Hive 数据。ORC 文件通常比 Parquet 文件小，ORC 索引可以加快查询速度。此外，ORC 还支持结构、映射和列表等复杂类型。

在 Parquet 和 ORC 之间进行选择时，请注意以下事项：

**查询性能** - 由于 Parquet 支持更广泛的查询类型，如果您打算执行复杂查询，建议选择 Parquet。

**复杂数据类型** - 如果您使用的是复杂数据类型，建议选择 ORC，因为它支持更广泛的复杂数据类型。

**文件大小** - 如果需要考虑磁盘空间，ORC 生成的文件通常较小，可以降低存储成本。

**压缩** - Parquet 和 ORC 都可实现优质压缩效果，但最适合您的格式可能取决于您的具体使用案例。

**发展** - Parquet 和 ORC 都支持架构发展，这意味着您可以随着时间的推移添加、移除或修改列。

Parquet 和 ORC 都适用于大数据应用程序，但是还是要根据场景需求进行选择。您可能需要对数据和查询进行基准测试，才能了解哪种格式更适合您的使用案例。

## 转换为列式格式
<a name="convert-to-columnar"></a>

将 JSON 或 CSV 等源数据轻松转换为列式格式的选项包括使用 [CREATE TABLE AS](ctas.md) 查询或在 AWS Glue 中运行任务。
+ 您可以使用 `CREATE TABLE AS` (CTAS) 查询一步将数据转换为 Parquet 或 ORC。有关示例，请参阅 [CTAS 查询的示例](ctas-examples.md) 页面上的[示例：将查询结果写入不同的格式](https://docs.aws.amazon.com/athena/latest/ug/ctas-examples.html#ctas-example-format)。
+ 有关使用 Athena for ETL 将数据从 CSV 转换为 Parquet 的信息，请参阅[将 CTAS 和 INSERT INTO 用于 ETL 和数据分析](ctas-insert-into-etl.md)。
+ 有关运行 AWS Glue 任务以将 CSV 数据转换为 Parquet 的信息，请参阅 AWS 大数据博客文章 [使用 AWS Glue 和 Simple Storage Service (Amazon S3) 构建数据湖基础](https://aws.amazon.com/blogs/big-data/build-a-data-lake-foundation-with-aws-glue-and-amazon-s3/)中的“将数据从 CSV 转换为 Parquet 格式”。AWS Glue 支持使用相同的技术将 CSV 数据转换为 ORC，或将 JSON 数据转换为 Parquet 或 ORC。