如何在Redshift COPY时加载指定文件夹下所有PARQUET文件并排除JSON文件?
解决Redshift COPY命令仅加载PARQUET文件并排除JSON的问题
你可以通过以下两种方式实现只加载目标文件夹中的PARQUET文件,排除JSON文件:
方法1:使用正则表达式筛选文件
利用Redshift COPY命令的REGEXP参数,匹配所有.parquet后缀的文件,同时指定父路径让Redshift递归扫描所有带时间戳的子文件夹:
COPY 你的目标表名 FROM 's3://bucket/path/' IAM_ROLE 'arn:aws:iam::你的账号ID:role/你的Redshift角色名' FORMAT AS PARQUET REGEXP '.*\\.parquet';
这个命令会自动遍历s3://bucket/path/下所有子文件夹(包括带时间戳的),仅加载符合正则规则的PARQUET文件,完全忽略JSON文件。
方法2:结合通配符与正则表达式
如果需要明确匹配一级子文件夹(即时间戳文件夹),可以用*通配符指代未知的时间戳,再配合正则筛选文件:
COPY 你的目标表名 FROM 's3://bucket/path/*/' IAM_ROLE 'arn:aws:iam::你的账号ID:role/你的Redshift角色名' FORMAT AS PARQUET REGEXP '.*\\.parquet';
这里的*会匹配任意命名的一级子文件夹(比如2024-06-07),再通过正则确保只加载PARQUET格式文件。
注意:虽然FORMAT AS PARQUET会指定解析格式,但加上REGEXP可以彻底避免Redshift尝试读取JSON文件,从根源解决加载失败的问题。
内容的提问来源于stack exchange,提问作者Peter Martinson
相关产品推荐
相关产品推荐

