Matillion ETL能否转换多CSV为Parquet?S3目录合并实现咨询
使用Matillion ETL合并S3日期目录下的CSV为单个Parquet文件
实现步骤
以下以Redshift为例(适配其他数据仓库时调整对应组件即可):
1. 配置S3访问权限
确保Matillion已通过AWS密钥配置好目标S3存储桶的访问权限,能正常读取January/层级下的文件和目录。
2. 搭建迭代式作业流程
新建Matillion作业,按以下组件顺序构建:
2.1 遍历日期目录
- 添加List S3 Objects组件:
- 存储桶:指定你的目标S3桶
- 前缀:
January/ - 勾选「List Directories Only」,仅获取
January/下的日期子目录(如January/10/)
- 添加Iterator组件,将
List S3 Objects的输出作为迭代数据源,设置迭代变量current_dir,值绑定到返回的目录路径。
2.2 加载当前目录下的所有CSV
在Iterator组件内部添加S3 Load组件:
- 数据源:选择已配置的S3连接
- 文件路径:填写
${current_dir}*.csv,批量加载该目录下所有CSV - 目标表:创建临时表(如
temp_daily_csv),勾选「Create Table Automatically」自动匹配CSV字段结构(需确保同目录下所有CSV schema一致) - 配置CSV格式:指定分隔符、编码(如逗号分隔、UTF-8)等与你的文件匹配的参数
2.3 导出为Parquet到对应目录
添加Unload to S3组件:
- 源表:选择临时表
temp_daily_csv - 目标路径:填写
${current_dir}AsingleParquetFile.parquet - 文件格式:选择「Parquet」,勾选「Overwrite Existing Files」
- 可选:配置Snappy压缩以减小文件体积
2.4 清理临时资源(可选)
添加Drop Table组件,删除临时表temp_daily_csv,避免占用数据仓库资源。
3. 优化与测试
- 若需扩展到多个月份,可将
January设为变量target_month,方便批量修改前缀 - 先手动指定
current_dir为January/10/进行单目录测试,验证Parquet文件的内容和结构无误后,再运行完整迭代作业
内容的提问来源于stack exchange,提问作者Victor Sotnikov
相关产品推荐
相关产品推荐

