从压缩和未压缩文件中加载数据 - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

从压缩和未压缩文件中加载数据

加载压缩数据时,我们建议您将每个表的数据拆分成多个文件。当您加载未压缩的分隔数据时,COPY 命令使用大规模并行处理 (MPP) 和扫描范围,从 Amazon S3 桶的大型文件中加载数据。

从多个压缩文件中加载数据

如果您有压缩数据,我们建议您将每个表的数据拆分成多个文件。COPY 命令可以从多个文件并行加载数据。您可以通过指定一个通用前缀(对于集合,则为前缀键),或通过在清单文件中明确列出文件,从而加载多个文件。

将数据拆分成多个文件,以便文件数是您的集群中的切片数的倍数。这样,Amazon Redshift 就可以在切片之间均匀地拆分数据。每个节点的切片数取决于集群的节点大小。例如,每个 ds2.xl 计算节点有两个切片,每个 ds2.8xl 计算节点有 32 个切片。有关每个节点大小拥有的切片数的更多信息,请转到《Amazon Redshift 管理指南》中的关于集群和节点

所有节点均参与并行查询的运行,处理尽可能跨切片均匀分布的数据。如果您的集群有两个 ds2.xl 节点,则可以将数据拆分为四个文件或四的倍数个文件。Amazon Redshift 在拆分工作负载时不会考虑文件大小。因此,您需要确保文件大小大致相同,压缩后大小为 1MB 到 1GB。

要使用对象前缀来标识加载文件,为每个文件命名时请加上一个通用前缀。例如,您可以将 venue.txt 文件拆分成四个文件,如下所示:

venue.txt.1 venue.txt.2 venue.txt.3 venue.txt.4

如果您在桶中的一个文件夹中放置多个文件,则可以将该文件夹名称指定为前缀,COPY 会加载该文件夹中的所有文件。如果您使用清单文件明确列出要加载的文件,则这些文件可以位于不同的桶或文件夹中。

有关清单文件的更多信息,请参阅Example: COPY from Amazon S3 using a manifest

从未压缩的分隔文件中加载数据

当您加载未压缩的、分隔的数据时,COPY 命令会使用 Amazon Redshift 中的大规模并行处理 (MPP) 架构。Amazon Redshift 会自动使用并行工作的切片,从 Amazon S3 桶的大型文件中加载多个范围的数据。必须对文件进行分隔才能进行并行加载。例如,竖线分隔。使用 COPY 命令自动并行加载数据也适用于 CSV 文件。您还可以通过在表上设置分配键,从而充分利用并行处理。有关分配键的更多信息,请参阅使用数据分配样式

当 COPY 查询包含以下任何关键字时,不支持自动并行加载数据:ESCAPE、REMOVEQUOTES 和 FIXEDWIDH。

一个或多个文件中的数据将加载到目标表中,一行数据占据表中的一行。数据文件中的字段按从左到右的顺序与表列相匹配。数据文件中的字段可以是固定宽度,也可以用字符分隔;默认分隔符为竖线 (|)。默认情况下,将加载所有表列,但您可以选择定义用逗号分隔的列列表。如果 COPY 命令中指定的列列表中不包括某个表列,则该表列将加载为默认值。有关更多信息,请参阅加载默认列值

在数据没有压缩和分隔时,请遵循此一般流程从 Amazon S3 加载数据:

  1. 将您的文件上载到 Amazon S3 。

  2. 运行 COPY 命令以加载表。

  3. 确认数据已正确加载。

有关 COPY 命令的示例,请参阅 COPY 示例。有关加载到 Amazon Redshift 的数据的信息,请查看 STL_LOAD_COMMITSSTL_LOAD_ERRORS 系统表。

有关各表中涵盖的节点以及切片的更多信息,请参阅《Amazon Redshift 管理指南》中的关于集群和节点