如何在Apache Phoenix sqlline.py中按UUID过滤查询?
Phoenix 5.0 sqlline.py 中BINARY类型UUID查询的正确写法
问题原因
[B@66e8997c是Java byte数组的默认字符串输出,仅包含类型标识和哈希码,并非实际二进制数据,Phoenix无法解析该格式,因此触发ERROR 602语法错误。
单个UUID过滤的正确写法
有两种可靠方式:
- 使用Phoenix内置函数
UUID_TO_BYTES转换标准UUID字符串:SELECT * FROM HOSTED_APPS_METADATA_UUID WHERE UUID = UUID_TO_BYTES('123e4567-e89b-12d3-a456-426614174000'); - 直接传入去掉横杠的十六进制字符串,用
BINARY关键字声明:SELECT * FROM HOSTED_APPS_METADATA_UUID WHERE UUID = BINARY '123E4567E89B12D3A456426614174000';
多UUID参数化查询转换(IN子句)
将日志中的占位符替换为实际UUID的转换表达式即可,示例如下:
- 基于
UUID_TO_BYTES的写法:SELECT * FROM HOSTED_APPS_METADATA_UUID WHERE UUID IN ( UUID_TO_BYTES('123e4567-e89b-12d3-a456-426614174000'), UUID_TO_BYTES('987e6543-e21b-43c2-d109-876543210987') ); - 基于十六进制二进制值的写法:
SELECT * FROM HOSTED_APPS_METADATA_UUID WHERE UUID IN ( BINARY '123E4567E89B12D3A456426614174000', BINARY '987E6543E21B43C2D109876543210987' );
内容的提问来源于stack exchange,提问作者user3458988
相关产品推荐
相关产品推荐

