如何在Redshift外部表中跳过特定扩展名的文件?
如何让Redshift外部表跳过S3中的.txt元数据文件,只读取.json数据
当然可以实现,Redshift Spectrum提供了两种常用方式来过滤S3中的文件,达到类似Glue Crawler排除规则的效果:
方式一:在LOCATION中用通配符指定仅加载.json文件
直接在CREATE EXTERNAL TABLE的LOCATION参数里用通配符锁定目标文件。比如你的分区路径是s3://your-bucket/data/year=*/month=*/,可以把LOCATION写成:LOCATION 's3://your-bucket/data/year=*/month=*/*.json'这种方式会让Redshift只扫描路径下所有后缀为
.json的文件,自动忽略.txt文件。方式二:通过TABLE PROPERTIES设置排除正则
如果你需要更灵活的过滤规则(比如排除特定命名的.txt文件),可以在TABLE PROPERTIES里配置exclude_pattern,用正则表达式匹配要跳过的文件。示例SQL如下:CREATE EXTERNAL TABLE my_json_data ( -- 定义你的表结构字段 user_id INT, event_details JSON ) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' LOCATION 's3://your-bucket/partitioned-data-path/' TABLE PROPERTIES ( 'exclude_pattern' = '.*\\.txt$' );这里的
.*\.txt$正则会匹配所有以.txt结尾的文件,Redshift会自动跳过这些文件,只加载符合要求的.json数据。
注意:正则表达式里的点号需要用双反斜杠转义(因为SQL里反斜杠本身需要转义),确保匹配规则生效。
内容的提问来源于stack exchange,提问作者Vzzarr
相关产品推荐
相关产品推荐

