Presto 无法读取十六进制字符串:不是有效的 base-16 数字

Posted

技术标签:

【中文标题】Presto 无法读取十六进制字符串:不是有效的 base-16 数字【英文标题】:Presto fails to read hexadecimal string: Not a valid base-16 number 【发布时间】:2021-12-25 00:49:23 【问题描述】:

有没有办法让 presto 检查字符串是否为十六进制?我有以下查询一直失败:

from_base(hexstring, 16)

有错误

>     /usr/local/lib/python3.7/dist-packages/pyhive/presto.py in _process_response(self, response)
>     347             self._state = self._STATE_FINISHED
>     348         if 'error' in response_json:
> --> 349             raise DatabaseError(response_json['error'])
>     350 
>     351 
> 
> DatabaseError: 'message': 'Not a valid base-16 number:
> ffffffffffdfae90', 'errorCode': 7, 'errorName':
> 'INVALID_FUNCTION_ARGUMENT', 'errorType': 'USER_ERROR', 'failureInfo':
> 'type': 'io.prestosql.spi.PrestoException', 'message': 'Not a valid
> base-16 number: ffffffffffdfae90', 'cause': 'type':
> 'java.lang.NumberFormatException', 'message': 'For input string:
> "ffffffffffdfae90"', 'suppressed': [], 'stack':
> 

但是,python 对字符串没问题:

int('ffffffffffdfae90',16)

返回

18446744073707433616

【问题讨论】:

【参考方案1】:

from_base returns BIGINT 最多可以容纳2^63 - 19223372036854775807 小于18446744073707433616 而python 的int 是无限制的,所以这个特定的数字对于Presto 来说太大了。

【讨论】:

啊,很高兴知道。错误信息真的很混乱。

以上是关于Presto 无法读取十六进制字符串:不是有效的 base-16 数字的主要内容,如果未能解决你的问题,请参考以下文章

presto 是不是需要配置单元元存储才能从 S3 读取镶木地板文件?

Presto odbc 无法读取 HIVE 中的时间戳字段

RegEx 匹配有效日期 Presto

如何测试有效的 UUID/GUID?

如何检查字符串是不是是有效的十六进制颜色表示?

检查字符串是不是是十六进制数的有效表示