Amazon redshift 如何获取红移字段中的字节数?

Amazon redshift 如何获取红移字段中的字节数?,amazon-redshift,Amazon Redshift,在Redshift中,为VARCHAR列定义适当的宽度非常重要,但是,我找不到查询字段中字节数的方法 当只处理ASCII时,可以使用LEN(),但对于UTF-8,LEN()将少计字节数。LEN()*4是最坏的情况,但效率特别低 在香草Postgresql中,这可以通过octet_length()实现,但在红移中不推荐使用。关于如何实现这一点,有什么建议吗?我编写了一个Python函数来获取字段中的字节数。也许对你有帮助 create or replace function dbadmin.get

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

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


在香草Postgresql中,这可以通过octet_length()实现,但在红移中不推荐使用。关于如何实现这一点,有什么建议吗?

我编写了一个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
2017年增加了红移。这是现在获取红移字段中字节数最有效的方法

例如:

SELECT OCTET_LENGTH(your_field) FROM your_table;

哇,我不知道python UDF,所以当我看到您的解决方案时,我非常困惑。感谢您提供的解决方案,并向我展示了一个python UDF的优秀示例!另外,我需要从方法名中删除'dbadmin'前缀,否则我会出错。没问题!是的,您必须使用您的架构名称,而不是架构“dbadmin”。当在没有特定目标模式的情况下创建对象时,它们将被放置在搜索路径中列出的第一个模式中。如果搜索路径为空,系统将返回一个错误