0

我有一个 crate db 表,其中包含如下记录:

  {
    "businessareaname": "test",
    "profile": {
      "phone": "",
      "fullname": "",
      "email": "abe-10@spatially.com"
    }
  }

我试过查询:

select * 
from myTable 
where profile['email'] = 'abe-10@spatially.com';

但没有得到任何回报。如何根据对象中的电子邮件值提取记录?

这不是一张平面表格,所以这是我展示表格结构的最佳尝试。第一行是标题,接下来的两行是数据。

    business name | profile:
                    - phone
                    - fullname
                    - email
    -------------------------------------
    "test"       | ""
                   ""
                   "abe-10@spatially.com"
   -------------------------------------
    "other one"  | "(415)884-9938"
                   "Abe Miessler"
                   "abe@test.com"
4

1 回答 1

3

您编写的示例应该有效并且是正确的。

它可能不起作用的原因是表模式不正确,特别是:

  • 电子邮件列是用INDEX OFF
  • 对象列是使用列类型创建的IGNORED
  • 电子邮件列上有一个全文索引/分析器,因此电子邮件被标记化。

这是一个完整的工作示例:

create table t1 (profile object as (email string));

insert into t1 (profile) values ({email='abe-10@spatially.com'});

refresh table t1;

select * from t1 where profile['email'] = 'abe-10@spatially.com';

如果通过管道输入crash,将输出:

CONNECT OK
CREATE OK, 1 row affected  (0.286 sec)
INSERT OK, 1 row affected  (0.082 sec)
REFRESH OK, 1 row affected  (0.065 sec)
+-----------------------------------+
| profile                           |
+-----------------------------------+
| {"email": "abe-10@spatially.com"} |
+-----------------------------------+
SELECT 1 row in set (0.087 sec)
于 2017-11-08T21:27:38.253 回答