本文为您介绍如何使用Catalog将Elasticsearch的离线数据迁移到云数据库 SelectDB 版。
前提条件
- 确保Elasticsearch集群所有节点和SelectDB实例的网络处于互通状态。 - Elasticsearch集群所有节点和SelectDB实例处于同一VPC下。如果不在同一VPC下,请先解决网络互通问题。如何操作,请参见如何解决SelectDB实例与数据源网络互通问题? 
- 已将Elasticsearch集群所有节点IP添加至SelectDB的白名单。具体操作,请参见设置白名单。 
- 若Elasticsearch集群存在白名单机制,已将SelectDB实例所在网段IP添加至Elasticsearch集群的白名单中。 - 获取SelectDB实例VPC地址的IP,请参见如何查看云数据库 SelectDB 版实例所属VPC的IP网段? 
- 获取SelectDB实例公网的IP地址,通过ping命令pingSelectDB实例公网地址获取。 
 
 
- 了解什么是Catalog,以及Catalog的基本操作。更多详情,请参见湖仓一体。 
示例环境
本示例为将Elasticsearch的索引product_info中的数据迁移到SelectDB 的数据库es_db中表test_es2SelectDB中。在实际使用中,请根据您的场景修改对应参数。示例环境如下:
- 目标库:es_db 
- 目标表:test_es2SelectDB 
- 源数据:Elasticsearch的索引product_info 
源数据准备
源数据内容,您可参见Elasticsearch的快速入门。
操作步骤
- 连接SelectDB实例。具体操作,请参见连接实例。 
- 创建Elasticsearch的Catalog。 说明- Elasticsearch的Catalog创建成功后,系统会在此Catalog下自动生成一个数据库 - default_db,Elasticsearch所有的文档都会一一映射为此库的表。- CREATE CATALOG es_catalog PROPERTIES ( "type"="es", "hosts"="http://127.0.0.1:9200", "user"="test_user", "password"="test_passwd", "nodes_discovery"="false" );- 参数说明 - 参数 - 必选 - 默认值 - 说明 - es_catalog - 是 - 无 - Catalog的名称。您根据自己需求,替换为自己定义的Catalog的名称。 - type - 是 - 无 - Catalog类型。固定填写es。 - hosts - 是 - 无 - Elasticsearch地址,也可以是Elasticsearch的负载均衡地址。 - 格式:http://<IP>:<port> - user - 否 - 空 - Elasticsearch账号。 - password - 否 - 空 - Elasticsearch账号密码。 - doc_value_scan - 否 - true - 是否开启通过Elasticsearch或Lucene列式存储获取待查询字段的值的功能。 说明- 此功能,有助于SelectDB自动探测待查询字段是否开启列式存储,并尽可能从列式存储中获取所有字段的值。在只获取少数列的情况下,可以大幅提升查询性能。 - true:开启。 
- false:关闭。 
 - keyword_sniff - 否 - true - 是否对Elasticsearch中字符串分词类型 - text.fields进行探测,并通过keyword进行匹配。- true:按照分词前的内容整体匹配。 
- false:按照分词后的内容匹配。 
 - nodes_discovery - 否 - true - 是否开启Elasticsearch节点发现。 - true:SelectDB将从Elasticsearch找到所有可用的相关数据节点并尝试连接。 
- false:不允许SelectDB访问Elasticsearch所有可用的相关数据节点,只能通过Elasticsearch地址访问。 
 重要- 阿里云Elasticsearch只能通过域名地址访问,如果您的数据源是阿里云Elasticsearch,此配置必须设为false。 - mapping_es_id - 否 - false - 是否映射Elasticsearch索引中的主键 - _id。若索引的主键由Elasticsearch自动处理,则需要设置为true。说明- Elasticsearch在不指定主键 - _id的情况下, 会给每个文档分配一个全局唯一的主键- _id。- true:进行字段映射,可获取到该字段值。 
- false:不进行字段映射,无法获取该字段值。 
 - like_push_down - 否 - true - 是否将LIKE检索转化为通配符(wildcard)模糊检索并下推到Elasticsearch。 - true:进行转化。 说明- 会增加Elasticsearch的CPU占用,并可能在部分场景下降低查询性能。 
- 适用于不追求精准率只追求召回率的场景。 
 
- false:不进行转化。 
 - include_hidden_index - 否 - false - 是否可以在查询条件中使用隐藏的索引。 - false:不可以。 
- true:可以。 
 
- 查看Catalog。 - SHOW CATALOGS; --查看CATALOG是否创建成功- 查询结果如下。 - +--------------+--------------+----------+-----------+-------------------------+---------------------+------------------------+ | CatalogId | CatalogName | Type | IsCurrent | CreateTime | LastUpdateTime | Comment | +--------------+--------------+----------+-----------+-------------------------+---------------------+------------------------+ | 436009309195 | es_catalog | es | | 2024-08-06 17:09:08.058 | 2024-07-19 18:04:37 | | | 0 | internal | internal | yes | UNRECORDED | NULL | Doris internal catalog | +--------------+--------------+----------+-----------+-------------------------+---------------------+------------------------+
- (可选)切换至External Catalog es_catalog目录下。 - 您可以像使用Internal Catalog一样,对External Catalog es_catalog的数据进行查看和访问。更多查询操作,请参见查询用法。 说明- 目前,云数据库 SelectDB 版对External Catalog中的数据只支持读操作。 - SWITCH es_catalog;
- (可选)切换内部的catalog internal目录下。 - 如果您没有执行第4步,跳过此步骤。 - SWITCH internal;
- (可选)创建数据。 - 如果您已经创建了目标数据库,可跳过此步骤。 - CREATE database es_db;
- 切换至目标数据库。 - USE es_db;
- 创建表。 - 如果您已经有了目标表,根据列类型映射检查目标列类型需与Elasticsearch源数据列类型是否一一对应。 - 如果您还没有目标表,创建表时,目标列类型需与Elasticsearch源数据列类型一一对应。列映射详情,请参见列类型映射。 - CREATE TABLE test_Es2SelectDB ( `annual_rate` varchar(200), `describe` text, `productName` varchar(200) ) DISTRIBUTED BY HASH(productName) BUCKETS 4 PROPERTIES("replication_num" = "1");
- 迁移数据。 - INSERT INTO test_Es2SelectDB SELECT * FROM es_catalog.default_db.product_info;
- 查看数据导入情况。 - SELECT * FROM test_Es2SelectDB;
增量数据同步
实际生产环境中,Elasticsearch数据主要分为离线数据和增量数据。对于增量数据同步,您可参考以下方案:
- 对于日志场景,如果仅需最近一段时间的日志用于数据分析,你可以通过双写的方式将日志分别写到源数据Elasticsearch集群和SelectDB中,直到累积够要分析的日志数据。 
- 对于搜索类场景,您可以结合SelectDB提供的Unique表模型,通过双写方式将增量数据分别写到源数据Elasticsearch集群和SelectDB中。对于历史数据,通过离线数据迁移的方式进行迁移。迁移过程中,如果历史数据与增量数据重复,由于Unique表模型会保证数据的唯一性,重复的数据会自动按照主键进行去重。 
ELK生态兼容性说明
在日志存储与分析场景下,SelectDB提供了完整的解决方案来替代ELK:
- 在日志采集方面,SelectDB提供定制增强的filebeat和logstash插件来高效地收集、处理日志数据。此外,您也可以通过导入数据的方式进行日志采集。具体操作,请参见以下文档。 
- 在可视化分析方面,SelectDB的检索分析功能可替代开源工具Kibana进行日志分析。此外,SelectDB可以与开源工具可观测可视化(Grafana)无缝对接,支持您搭建高性能、分布式的运维平台。