迁移Elasticsearch数据

本文为您介绍如何使用Catalog将Elasticsearch的离线数据迁移到云数据库 SelectDB 版

前提条件

  • 已将Elasticsearch集群所有节点IP添加至SelectDB的白名单。具体操作,请参见设置白名单

  • 了解什么是Catalog,以及Catalog的基本操作。更多详情,请参见湖仓一体

示例环境

本示例为将Elasticsearch的索引product_info中的数据迁移到SelectDB 的数据库es_db中表test_es2SelectDB中。在实际使用中,请根据您的场景修改对应参数。示例环境如下:

  • 目标库:es_db

  • 目标表:test_es2SelectDB

  • 源数据:Elasticsearch的索引product_info

源数据准备

源数据内容,您可参见Elasticsearch的快速入门

操作步骤

  1. 连接SelectDB实例。具体操作,请参见连接实例

  2. 创建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:可以。

  3. 查看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 |
    +--------------+--------------+----------+-----------+-------------------------+---------------------+------------------------+
  4. 可选)切换至External Catalog es_catalog目录下。

    您可以像使用Internal Catalog一样,对External Catalog es_catalog的数据进行查看和访问。更多查询操作,请参见查询用法

    说明

    目前,云数据库 SelectDB 版对External Catalog中的数据只支持读操作。

    SWITCH es_catalog;
  5. 可选)切换内部的catalog internal目录下。

    如果您没有执行第4步,跳过此步骤。

    SWITCH internal;
  6. 可选)创建数据。

    如果您已经创建了目标数据库,可跳过此步骤。

    CREATE database es_db;
  7. 切换至目标数据库。

    USE es_db;
  8. 创建表。

    如果您已经有了目标表,根据列类型映射检查目标列类型需与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");
  9. 迁移数据。

    INSERT INTO test_Es2SelectDB SELECT *  FROM es_catalog.default_db.product_info;
  10. 查看数据导入情况。

    SELECT *  FROM test_Es2SelectDB;

增量数据同步

实际生产环境中,Elasticsearch数据主要分为离线数据和增量数据。对于增量数据同步,您可参考以下方案:

  • 对于日志场景,如果仅需最近一段时间的日志用于数据分析,你可以通过双写的方式将日志分别写到源数据Elasticsearch集群和SelectDB中,直到累积够要分析的日志数据。

  • 对于搜索类场景,您可以结合SelectDB提供的Unique表模型,通过双写方式将增量数据分别写到源数据Elasticsearch集群和SelectDB中。对于历史数据,通过离线数据迁移的方式进行迁移。迁移过程中,如果历史数据与增量数据重复,由于Unique表模型会保证数据的唯一性,重复的数据会自动按照主键进行去重。

ELK生态兼容性说明

在日志存储与分析场景下,SelectDB提供了完整的解决方案来替代ELK:

  • 在日志采集方面,SelectDB提供定制增强的filebeat和logstash插件来高效地收集、处理日志数据。此外,您也可以通过导入数据的方式进行日志采集。具体操作,请参见以下文档。

  • 在可视化分析方面,SelectDB检索分析功能可替代开源工具Kibana进行日志分析。此外,SelectDB可以与开源工具可观测可视化(Grafana)无缝对接,支持您搭建高性能、分布式的运维平台。