如何获取Redshift字段中的字节数?

时间:2016-09-27 16:26:06

标签: amazon-redshift

在Redshift中,为VARCHAR列定义合适的宽度非常重要,但是,我找不到查询字段中字节数的方法!

当只处理ASCII时你可以使用LEN(),但是对于UTF-8,LEN()会低估字节数。 LEN()* 4是最糟糕的情况,但效率特别低。

在vanilla Postgresql中,这可以通过octet_length()完成,但在Redshift中不推荐使用。有关如何实现这一目标的任何建议吗?

2 个答案:

答案 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;