在 CrateDB 中使用 LIKE 条件查询整个 OBJECT 或文档
Querying whole OBJECT or Document using LIKE condition in CrateDB
我有一个 table,其中一个字段定义为 "attributes" OBJECT (DYNAMIC)
。
现在,我的用例是能够检查是否有任何特定字符串是该 OBJECT 的一部分。在 SQL 术语中,我想对整个 OBJECT 甚至整个文档执行 like
命令。我们目前是否支持此功能
我要执行的查询:select * from gra.test_table where attributes like '%53.22.232.27%';
当我在 Crate 4.5.1 上执行此操作时,我 运行 陷入错误:UnsupportedFeatureException[Unknown function: (gra.test_table.attributes LIKE '%53.22.232.27%'), no overload found for matching argument types: (object, text). Possible candidates: op_like(text, text):boolean]
当我在 Crate 3.x 上执行此操作时,我 运行 出错了:
SQLActionException[SQLParseException: Cannot cast attributes to type string]
Table 结构如下,attributes
是我正在谈论的领域
CREATE TABLE IF NOT EXISTS "test"."test_table" (
"accountname" STRING,
"attributes" OBJECT (DYNAMIC) AS (
"accesslist" STRING,
"accesslistid" STRING,
"accessmask" STRING,
"accessreason" STRING
),
"employeeid" STRING,
"day" TIMESTAMP,
PRIMARY KEY ("day", "id"),
INDEX "all_columns_ft" USING FULLTEXT ("employeeid") WITH (
analyzer = 'standard'
)
)
CLUSTERED INTO 1 SHARDS
PARTITIONED BY ("day")
WITH (
"allocation.max_retries" = 5
)
不支持对整个对象使用 like
。
一种可能的(缓慢的)解决方法是在 object
类型列的 text
转换中使用 regular expression operator:
select * from gra.test_table where attributes::text ~ '.*53.22.232.27.*'
但请注意,通过 cast
,无法利用任何索引,执行如此完整的 table 扫描 + 过滤器会导致查询执行缓慢。
我有一个 table,其中一个字段定义为 "attributes" OBJECT (DYNAMIC)
。
现在,我的用例是能够检查是否有任何特定字符串是该 OBJECT 的一部分。在 SQL 术语中,我想对整个 OBJECT 甚至整个文档执行 like
命令。我们目前是否支持此功能
我要执行的查询:select * from gra.test_table where attributes like '%53.22.232.27%';
当我在 Crate 4.5.1 上执行此操作时,我 运行 陷入错误:UnsupportedFeatureException[Unknown function: (gra.test_table.attributes LIKE '%53.22.232.27%'), no overload found for matching argument types: (object, text). Possible candidates: op_like(text, text):boolean]
当我在 Crate 3.x 上执行此操作时,我 运行 出错了:
SQLActionException[SQLParseException: Cannot cast attributes to type string]
Table 结构如下,attributes
是我正在谈论的领域
CREATE TABLE IF NOT EXISTS "test"."test_table" (
"accountname" STRING,
"attributes" OBJECT (DYNAMIC) AS (
"accesslist" STRING,
"accesslistid" STRING,
"accessmask" STRING,
"accessreason" STRING
),
"employeeid" STRING,
"day" TIMESTAMP,
PRIMARY KEY ("day", "id"),
INDEX "all_columns_ft" USING FULLTEXT ("employeeid") WITH (
analyzer = 'standard'
)
)
CLUSTERED INTO 1 SHARDS
PARTITIONED BY ("day")
WITH (
"allocation.max_retries" = 5
)
不支持对整个对象使用 like
。
一种可能的(缓慢的)解决方法是在 object
类型列的 text
转换中使用 regular expression operator:
select * from gra.test_table where attributes::text ~ '.*53.22.232.27.*'
但请注意,通过 cast
,无法利用任何索引,执行如此完整的 table 扫描 + 过滤器会导致查询执行缓慢。