如何在Presto中基于含逗号分隔值的查询正确创建表?
Presto创建表时字段含分隔符导致错位的解决方案
问题原因
你指定逗号作为TEXTFILE的字段分隔符,但column3本身包含逗号(如abc,xyz),Presto会将这些内部逗号识别为字段分隔符,把column3的内容拆分成多个字段,最终导致结果表字段错位、内容缺失。
可行解决方案
更换无冲突的字段分隔符
选择一个不会出现在column3内容中的字符作为分隔符,比如竖线|或制表符\t,示例SQL:CREATE TABLE resultTable WITH (format = 'TEXTFILE', textfile_field_separator = '|') AS select Column1, column2, column3 from sourceTable改用CSV格式存储
CSV格式原生支持用引号包裹包含分隔符的字段,Presto会自动处理这类场景,无需额外转义,示例SQL:CREATE TABLE resultTable WITH (format = 'CSV') AS select Column1, column2, column3 from sourceTable转义字段内的分隔符(备选)
如果必须使用逗号作为分隔符,可以先将column3内的逗号转义,后续查询时再恢复,示例SQL:CREATE TABLE resultTable WITH (format = 'TEXTFILE', textfile_field_separator = ',', textfile_field_delimiter_escape = '\\') AS select Column1, column2, replace(column3, ',', '\\,') as column3 from sourceTable注意:后续查询该表时,需要用
replace(column3, '\\,', ',')还原原始内容。
内容的提问来源于stack exchange,提问作者user2928137
相关产品推荐
相关产品推荐

