使用AWS S3 Postgres Extension导入压缩CSV时遇UTF8编码错误
解决AWS S3 Postgres Extension导入GZip压缩CSV时的UTF8编码错误
问题根源
报错ERROR: invalid byte sequence for encoding "UTF8": 0x8b是因为Postgres的aws_s3扩展未识别文件为Gzip压缩格式,直接将二进制压缩数据当作UTF8文本解析。0x8b是Gzip文件的起始魔数,不属于合法UTF8字符,因此触发编码错误。
解决方案
1. 导入时显式指定压缩格式
修改table_import_from_s3的参数,在格式选项中添加compression 'gzip',强制扩展先解压文件再解析CSV内容。修改后的SQL如下:
SELECT aws_s3.table_import_from_s3( 'public.mytable1', '', '(format csv, header true, compression ''gzip'')', aws_commons.create_s3_uri('my-bucket-1', 'my/object/key/part-00000-...-1-c000.csv', 'us-east-1') );
注意:SQL字符串内的单引号需用两个单引号转义
2. 确认Spark压缩保存的正确性(可选)
确保Spark代码中compression参数明确设置为'gzip',避免变量值错误导致文件未正确压缩:
( df.write .option("header", True) .option("encoding", "UTF-8") .mode(mode) .csv(s3_uri, compression='gzip') )
补充说明
S3对象的Content-Encoding标签仅用于告知HTTP客户端如何解压内容,Postgres的aws_s3扩展不会读取该元数据自动处理压缩,必须通过导入参数显式声明压缩类型。
内容的提问来源于stack exchange,提问作者123
相关产品推荐
相关产品推荐

