在 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 扫描 + 过滤器会导致查询执行缓慢。