为啥有外来字符时不能正确填充空格字符?
Posted
技术标签:
【中文标题】为啥有外来字符时不能正确填充空格字符?【英文标题】:Why doesn't it pads the space characters correctly when there are foreign characters?为什么有外来字符时不能正确填充空格字符? 【发布时间】:2015-09-23 23:55:53 【问题描述】:我的目标是导出具有固定宽度列的文件。我有以下 HQL:
insert overwrite table destination_table
select concat(rpad(p.artist_name,40," "),rpad(p.release_name,40," "))
from source_table;
“destination_table”是一个写入文件的外部表。当artist_name 和release_name 包含正常的英文字符时,没有问题,结果如下:
paulo kuong[29 space characters]I am terribly stuck album
我有 40 个字符的固定宽度列。但是,当字符串不是英文时,我得到了:
장재인[31 space characters]다른 누구도 아닌 너에게
假设为 37 个空格字符。 LPAD 似乎无法正确填充空格。当我执行“length(장재인)”时,它返回 3 个字符。所以 HIVE 中的 lpad 和 rpad 发生了一些奇怪的事情
有什么想法吗?
【问题讨论】:
【参考方案1】:我认为rpad
按预期工作。根据文件,
rpad(string str, int len, string pad)
#Returns str, right-padded with pad to a length of len
所以,在您的情况下,장재인[31 space characters]
的长度应该是 40。
简而言之장재인
的长度应该是9。
我检查了python
,然后장재인
的长度确实是9。
>>> a = '장재인'
>>> len(a)
9
【讨论】:
很抱歉问题仍未解决。当我执行“length(장재인)”时,它返回 3 个字符。所以 HIVE 中的 lpad 和 rpad 发生了一些奇怪的事情 你做得怎么样length(장재인)
以上是关于为啥有外来字符时不能正确填充空格字符?的主要内容,如果未能解决你的问题,请参考以下文章