本文为您介绍如何使用Catalog将Elasticsearch的离线数据迁移到云数据库 SelectDB 版。
前提条件
示例环境
本示例为将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提供定制增强的filebeat和logstash插件来高效地收集、处理日志数据。此外,您也可以通过导入数据的方式进行日志采集。具体操作,请参见以下文档。