You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Amazon Redshift数据以Parquet格式导出至Amazon S3并通过Redshift Spectrum查询

别担心,Redshift完全支持直接将数据导出为Parquet格式到S3,而且之后用Spectrum查询也很顺畅——可能你之前查的资料比较旧或者没找对地方,我给你分享下实际操作的步骤和注意点:

一、用UNLOAD命令导出Parquet到S3

这是Redshift导出数据到S3的核心命令,现在已经支持指定Parquet格式了,示例代码如下:

UNLOAD ('SELECT column1, column2, column3 FROM your_source_table WHERE date >= ''2024-01-01''')
TO 's3://your-s3-bucket/redshift-exports/parquet-data/'
IAM_ROLE 'arn:aws:iam::123456789012:role/Redshift-Unload-S3-Access-Role'
FORMAT PARQUET
PARTITION BY (date, region) -- 可选:按字段分区,优化Spectrum查询性能
COMPRESSION SNAPPY; -- 可选:压缩格式,SNAPPY是Parquet默认值,平衡速度和压缩率

逐行解释下关键参数:

  • 括号里的SELECT语句:可以是任意合法的Redshift查询,既可以导出整张表,也可以过滤、聚合后导出
  • TO:指定S3的目标路径,注意末尾要加斜杠,Redshift会自动生成多个Parquet文件(因为集群是分布式的,每个节点会导出自己分片的数据)
  • IAM_ROLE:必须是Redshift集群有权限Assume的IAM角色,这个角色需要具备s3:PutObject权限,能写入目标S3桶
  • FORMAT PARQUET:这就是指定导出格式为Parquet的关键参数,也是你之前可能没注意到的点
  • PARTITION BY:可选参数,按指定字段分区后,S3上会生成类似date=2024-01-01/region=us-east-1的目录结构,Spectrum查询时可以跳过无关分区,大幅提升速度
  • COMPRESSION:可选,支持SNAPPY、GZIP、NONE等,推荐用SNAPPY
二、创建Redshift Spectrum外部表查询S3上的Parquet数据

导出完成后,就可以通过Spectrum查询这些Parquet文件了,步骤如下:

  1. 先创建关联到Glue Data Catalog的外部Schema(如果没有Glue,也可以用Hive metastore,不过Glue更常用):
CREATE EXTERNAL SCHEMA spectrum_parquet_schema
FROM DATA CATALOG
DATABASE 'your-glue-database-name'
IAM_ROLE 'arn:aws:iam::123456789012:role/Redshift-Spectrum-Access-Role'
CREATE EXTERNAL DATABASE IF NOT EXISTS;
  1. 创建外部表指向S3上的Parquet文件:
CREATE EXTERNAL TABLE spectrum_parquet_schema.your_external_table (
    column1 INT,
    column2 VARCHAR(100),
    column3 TIMESTAMP
)
STORED AS PARQUET
LOCATION 's3://your-s3-bucket/redshift-exports/parquet-data/'
PARTITIONED BY (date DATE, region VARCHAR(20)); -- 如果UNLOAD时用了PARTITION BY,这里必须对应
  1. 如果是分区表,需要加载S3上的分区信息:
ALTER TABLE spectrum_parquet_schema.your_external_table RECOVER PARTITIONS;

之后你就可以像查询普通Redshift表一样查询这个外部表了:

SELECT * FROM spectrum_parquet_schema.your_external_table WHERE date = '2024-01-01';
三、关键注意事项
  • 集群版本要求:Redshift 1.0.1000及以上版本才支持Parquet格式的UNLOAD,如果你的集群版本太老,建议升级到最新稳定版
  • 字段类型兼容性:大部分Redshift数据类型都能直接导出为Parquet兼容类型,比如INT、VARCHAR、TIMESTAMP、FLOAT等;少数特殊类型(比如GEOMETRY)需要先转换为字符串再导出
  • 权限配置:确保IAM角色的权限足够:Redshift集群要能Assume该角色,角色要有S3的读写权限(UNLOAD需要写,Spectrum需要读),还要有Glue Data Catalog的相关权限(如果用Glue的话)
  • 文件大小控制:UNLOAD默认会生成最大6.2GB的Parquet文件,你可以用MAXFILESIZE参数调整,比如MAXFILESIZE 10 GB

内容的提问来源于stack exchange,提问作者Teja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 06:43:05