本文為您介紹如何使用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提供了完整的解決方案來替代ELK:
在日志采集方面,SelectDB提供定制增強的filebeat和logstash插件來高效地收集、處理日志數據。此外,您也可以通過導入數據的方式進行日志采集。具體操作,請參見以下文檔。
在可視化分析方面,SelectDB的檢索分析功能可替代開源工具Kibana進行日志分析。此外,SelectDB可以與開源工具可觀測可視化(Grafana)無縫對接,支持您搭建高性能、分布式的運維平臺。