

 2026 年 6 月 30 日之后，Amazon Redshift 不再支持使用 Python UDF。我们将分阶段开始执行。有关 Python 生命周期终止和迁移选项详情的更多信息，请参阅 2025 年 6 月 30 日发布的[博客文章](https://www.amazonaws.cn/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# 在 Amazon Redshift 中加载数据
<a name="t_Loading_data"></a>

可以通过多种方法将数据加载到 Amazon Redshift 数据库中。要加载的一个常见数据来源是 Amazon S3 文件。下表总结了从 Amazon S3 来源开始加载时要使用的一些方法。


<table>
<thead>
  <tr><th>要使用的方法</th><th>说明</th><th>何时需要方法</th></tr>
</thead>
<tbody>
  <tr><td>COPY command</td><td>运行批量文件摄取，从 Amazon S3 文件中加载数据。此方法会利用 Amazon Redshift 的并行处理功能。有关更多信息，请参阅 <a href="t_Loading_tables_with_the_COPY_command.md">使用 COPY 命令加载表</a>。</td><td>当需要满足基本数据加载要求（用于手动启动批量文件摄取）时，应使用此方法。此方法主要用于自定义和第三方文件摄取管道或一次性或临时文件摄取工作负载。</td></tr>
  <tr><td>COPY... CREATE JOB 命令（自动复制）</td><td>在所跟踪的 Amazon S3 路径上创建新文件时，自动运行您的 COPY 命令。有关更多信息，请参阅 <a href="loading-data-copy-job.md">创建 S3 事件集成以自动从 Amazon S3 存储桶复制文件</a>。</td><td>当在 Amazon S3 上创建新文件时，如果文件摄取管道需要自动摄取数据，则应使用此方法。Amazon Redshift 保持跟踪摄取的文件，来防止数据重复。此方法要求由 Amazon S3 存储桶拥有者进行配置。</td></tr>
  <tr><td>从数据湖查询中加载</td><td>创建外部表来对 Amazon S3 文件运行数据湖查询，然后运行 INSERT INTO 命令将来自数据湖查询的结果加载到本地表中。有关更多信息，请参阅 <a href="c-spectrum-external-tables.md">Redshift Spectrum 的外部表</a>。</td><td>在以下任何情况下，应使用此方法：<ul><li>从 Amazon Glue 和开放表格式（如 Apache Iceberg、Apache Hudi 或 Delta Lake）加载。</li><li>需要部分摄取源文件（例如，运行 WHERE 子句来摄取特定行时需要）。</li><li>需要更大的灵活性来摄取特定列（例如，运行 SELECT 命令），或随时随地进行基本数据转换（例如，应用基本操作或对源文件中的值调用 UDF）。</li></ul></td></tr>
  <tr><td colspan="3"><b>您可以考虑的其它方法</b></td></tr>
  <tr><td>流式摄取 </td><td>流式摄取以低延迟、高速度的方式，将流数据从 Amazon Kinesis Data Streams 和 Amazon Managed Streaming for Apache Kafka 摄取到 Amazon Redshift 预置或 Redshift Serverless 实体化视图中。有关更多信息，请参阅<a href="materialized-view-streaming-ingestion-getting-started.md">开始使用 Amazon Kinesis Data Streams 流式摄取</a>和<a href="materialized-view-streaming-ingestion-getting-started-MSK.md">从 Apache Kafka 源进行流式摄取入门</a>。</td><td>对于数据首先流式传输到 Amazon S3 上的文件，然后从 Amazon S3 加载等此类应用场景，应考虑使用此方法。如果不需要在 Amazon S3 上保留数据，则通常可以考虑将数据直接流式传输到 Amazon Redshift 中。</td></tr>
  <tr><td>运行数据湖查询</td><td>直接从数据湖表运行查询，而不是将表的内容摄取到本地表中。有关更多信息，请参阅 <a href="c-using-spectrum.md">Amazon Redshift Spectrum</a>。</td><td>当应用场景不要求在 Amazon Redshift 中执行本地表查询时，应使用此方法。</td></tr>
  <tr><td>使用 Amazon Redshift 查询编辑器 v2 进行批量加载</td><td>您可以在 Amazon Redshift 查询编辑器 v2 中，直观地准备和运行批量文件摄取工作负载。有关更多信息，请参阅《Amazon Redshift 管理指南》<i></i>中的<a href="https://docs.amazonaws.cn/redshift/latest/mgmt/query-editor-v2-loading.html#query-editor-v2-loading-data">从 S3 加载数据</a>。</td><td>当您想让查询编辑器 v2 来准备 COPY 语句，并且您想要一个可视化工具来简化 COPY 语句的准备过程时，应使用此方法。</td></tr>
  <tr><td>使用 Amazon Redshift 查询编辑器 v2 从本地文件加载数据</td><td>您可以直接将文件从桌面上传到 Amazon Redshift 表中，而无需手动将文件上传到 Amazon S3。有关更多信息，请参阅《Amazon Redshift 管理指南》<i></i>中的<a href="https://docs.amazonaws.cn/redshift/latest/mgmt/query-editor-v2-loading.html#query-editor-v2-loading-data-local">从本地文件设置和工作流加载数据</a>。</td><td>当您需要从本地计算机快速加载文件来进行一次性查询时，应使用此方法。使用这种方法，Amazon Redshift 查询编辑器 v2 会临时将文件存储在客户拥有的 Amazon S3 存储桶上，并使用此 Amazon S3 路径运行复制命令。</td></tr>
</tbody>
</table>


COPY 命令是最高效的加载表的方式。您也可以使用 INSERT 命令将数据添加到您的表中，尽管这与使用 COPY 命令相比的效率低得多。COPY 命令能够同时从多个数据文件或多个数据流读取。Amazon Redshift 会将工作负载分配到 Amazon Redshift 节点，并且并行执行加载操作，包括对行进行排序和跨节点切片分配数据。

**注意**  
Amazon Redshift Spectrum 外部表为只读。您无法对外部表进行 COPY 或 INSERT。

要访问其它 Amazon 资源上的数据，Amazon Redshift 必须有权访问这些资源和有权执行访问数据所需的操作。您可使用 Amazon Identity and Access Management（IAM）将用户拥有的访问权限限制为 Amazon Redshift 资源和数据。

在初始数据加载后，如果您添加、修改或删除大量数据，则应随后运行 VACUUM 命令，以便识别您的数据并在数据删除后回收空间。您还应该运行 ANALYZE 命令来更新表统计数据。

**Topics**
+ [使用 COPY 命令加载表](t_Loading_tables_with_the_COPY_command.md)
+ [创建 S3 事件集成以自动从 Amazon S3 存储桶复制文件](loading-data-copy-job.md)
+ [使用 DML 命令加载表](t_Updating_tables_with_DML_commands.md)
+ [执行深层复制](performing-a-deep-copy.md)
+ [分析表](t_Analyzing_tables.md)
+ [对表执行 vacuum 操作](t_Reclaiming_storage_space202.md)
+ [管理并发写入操作](c_Concurrent_writes.md)
+ [教程：从 Amazon S3 加载数据](tutorial-loading-data.md)