在Redshift中,为VARCHAR列定义合适的宽度非常重要,但是,我找不到查询字段中字节数的方法!
当只处理ASCII时你可以使用LEN(),但是对于UTF-8,LEN()会低估字节数。 LEN()* 4是最糟糕的情况,但效率特别低。
在vanilla Postgresql中,这可以通过octet_length()完成,但在Redshift中不推荐使用。有关如何实现这一目标的任何建议吗?
答案 0 :(得分:2)
我编写了一个Python函数,以获取字段中的字节数。也许它会帮助你
create or replace function dbadmin.get_utf8_bytes(param1 varchar(max))
returns int
stable AS $$
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
return len(param1.encode('utf-8'))
$$ language plpythonu;
接下来,您需要将字段传递给此函数,例如:
SELECT dbadmin.get_utf8_bytes(your_field)
FROM your_table
答案 1 :(得分:0)
Redshift在2017年添加了OCTET_LENGTH()。这是在Redshift字段中获取字节数的最有效方法。
示例:
SELECT OCTET_LENGTH(your_field) FROM your_table;