Doris整合Elasticsearch

发布时间 2023-06-30 11:15:56作者: 息_壤

1、环境

doris 1.2.4
Elasticsearch 7.7 安装教程 https://www.cnblogs.com/yanzhong/p/17515917.html

2、doris 配置外表(方法一)

1、添加语法

详细 官网
https://doris.apache.org/zh-CN/docs/1.2/lakehouse/external-table/es?_highlight=外表#doris中创建es外表

CREATE EXTERNAL TABLE `es_table`
ENGINE=Elasticsearch 
PROPERTIES (
"hosts" = "http://192.168.31.128:9200",   -- es 集群地址
"index" = "phone",
                        -- es 索引名称
"user" = "elastic",
                       -- 账号密码
"password" = "162552"
                    
);
参数 说明
hostsES 集群地址,可以是一个或多个,也可以是ES前端的负载均衡地址
index 对应的ES的index名字,支持alias,如果使用doc_value,需要使用真实的名称
type index的type,ES 7.x及以后的版本不传此参数
user ES集群用户名
password 对应用户的密码信息
  • ES 7.x之前的集群请注意在建表的时候选择正确的索引类型type
    • 认证方式目前仅支持Http Basic认证,并且需要确保该用户有访问: /_cluster/state/、_nodes/http等路径和index的读权限; 集群未开启安全认证,用户名和密码不需要设置
    • Doris表中的列名需要和ES中的字段名完全匹配,字段类型应该保持一致
    • ENGINE必须是 Elasticsearch

2、操作

支持查询

selec * from es_table

不支持增 删 改

INSERT INTO es_table VALUES ("http://www.xxx.com/xx.jpg","mate40",888,"华为")
update es_table SET title = "123" where title = "手机666"
DELETE FROM es_table where title = "手机666"



3、doris catalog 多数据源 es(方法二)

1、添加语法

Elasticsearch Catalog 除了支持自动映射 ES 元数据外,也可以利用 Doris 的分布式查询规划能力和ES(Elasticsearch) 的全文检索能力相结合,提供更完善的 OLAP 分析场景解决方案:

  • ES 中的多 index 分布式 Join 查询。
  • Doris 和 ES 中的表联合查询,更复杂的全文检索过滤。
  • 使用限制支持 Elasticsearch 5.x 及以上版本。

详情 官网

https://doris.apache.org/zh-CN/docs/1.2/lakehouse/multi-catalog/es

CREATE CATALOG es PROPERTIES (
    "type"="es",
    "hosts"="http://192.168.31.128:9200",
     "user" = "elastic",
    "password" = "162552"
);

参数说明​

| 参数| 是否必须| 默认值| 说明|
| ------------ | ------------ |
| hosts| 是| | ES 地址,可以是一个或多个,也可以是 ES 的负载均衡地址|
| user| 否| 空| ES 用户名|
| password| 否| 空| 对应用户的密码信息|
|doc_value_scan| 否| true| 是否开启通过 ES/Lucene 列式存储获取查询字段的值|
|keyword_sniff|否|true|是否对 ES 中字符串分词类型text.fields 进行探测,通过 keyword 进行查询。设置为 false 会按照分词后的内容匹配|
|nodes_discovery|否|true|是否开启 ES 节点发现,默认为 true,在网络隔离环境下设置为 false,只连接指定节点|
|ssl|否|false|ES 是否开启 https 访问模式,目前在 fe/be 实现方式为信任所有|
|mapping_es_id|否|false|是否映射 ES 索引中的_id字段|
|like_push_down|否|true|是否将 like 转化为 wildchard 下推到 ES,会增加 ES cpu 消耗|

  • 认证方式目前仅支持 Http Basic 认证,并且需要确保该用户有访问: /_cluster/state/、_nodes/http 等路径和 index 的读权限; 集群未开启安全认证,用户名和密码不需要设置。
  • 5.x 和 6.x 中一个 index 中的多个 type 默认取第一个。

2、操作

查看所有的catalog 数据源
#  internal  是doris 主数据源 
show catalogs;

  • 切换到es的catlog数据源
  • 因为 Elasticsearch 没有 Database 的概念,所以连接 ES 后,会自动生成一个唯一的 Database:default_db。
  • 并且在通过 SWITCH 命令切换到 ES Catalog 后,会自动切换到 default_db。无需再执行 USE default_db 命令。
#切换 数据源
switch es;
#查询所有的表(对应es中的index索引)
show tables

查询

select * from phone;

增删改 (不支持)

提示es 的catalog 没有这些操作 需要切换到doris的 数据源下

INSERT INTO phone VALUES ("http://www.xxx.com/xx.jpg","mate40",888,"华为")
update phone SET title = "123" where title = "手机666"
DELETE FROM es_table where title = "手机666"



切换到doris 数据源下 提示 没有对应的库跟表

#切换数据源
switch internal;
#操作
INSERT INTO es.phone VALUES ("http://www.xxx.com/xx.jpg","mate40",888,"华为")

update es.phone SET title = "123" where title = "手机666"

DELETE FROM es.phone where title = "手机666"