一个实用的开源项目,可以快速将 Elasticsearch 数据导出到 csv

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 在实际业务中,数据导出应该算是一个强需求了,很多场景都用得到。如果是 MySQL 的话,则无需多言,支持导出的工具一大堆,根据自己需求选择即可。

在实际业务中,数据导出应该算是一个强需求了,很多场景都用得到。

如果是 MySQL 的话,则无需多言,支持导出的工具一大堆,根据自己需求选择即可。

那有没有对 Elasticsearch 导出支持比较好的工具呢?


虽然没有 MySQL 那么多,但肯定是有的。如果部署了 Kibana,那一定是首选,不止导出功能强大,还有一整套可视化功能,很实用。


没有 Kibana 的话也别慌,今天就给大家推荐一款命令行导出工具:es2csv

源码地址:github.com/taraslayshc…


该项目使用 Python 编写,既支持 Lucene 原生语法查询,也支持 DSL 语法查询。还可以在多个索引中同时检索,并且只获取自己关注的字段,非常高效。


用法介绍:


$ es2csv [-h] -q QUERY [-u URL] [-a AUTH] [-i INDEX [INDEX ...]]
         [-D DOC_TYPE [DOC_TYPE ...]] [-t TAGS [TAGS ...]] -o FILE
         [-f FIELDS [FIELDS ...]] [-S FIELDS [FIELDS ...]] [-d DELIMITER]
         [-m INTEGER] [-s INTEGER] [-k] [-r] [-e] [--verify-certs]
         [--ca-certs CA_CERTS] [--client-cert CLIENT_CERT]
         [--client-key CLIENT_KEY] [-v] [--debug]
Arguments:
 -q, --query QUERY                        Query string in Lucene syntax.               [required]
 -o, --output-file FILE                   CSV file location.                           [required]
 -u, --url URL                            Elasticsearch host URL. Default is http://localhost:9200.
 -a, --auth                               Elasticsearch basic authentication in the form of username:password.
 -i, --index-prefixes INDEX [INDEX ...]   Index name prefix(es). Default is ['logstash-*'].
 -D, --doc-types DOC_TYPE [DOC_TYPE ...]  Document type(s).
 -t, --tags TAGS [TAGS ...]               Query tags.
 -f, --fields FIELDS [FIELDS ...]         List of selected fields in output. Default is ['_all'].
 -S, --sort FIELDS [FIELDS ...]           List of <field>:<direction> pairs to sort on. Default is [].
 -d, --delimiter DELIMITER                Delimiter to use in CSV file. Default is ",".
 -m, --max INTEGER                        Maximum number of results to return. Default is 0.
 -s, --scroll-size INTEGER                Scroll size for each batch of results. Default is 100.
 -k, --kibana-nested                      Format nested fields in Kibana style.
 -r, --raw-query                          Switch query format in the Query DSL.
 -e, --meta-fields                        Add meta-fields in output.
 --verify-certs                           Verify SSL certificates. Default is False.
 --ca-certs CA_CERTS                      Location of CA bundle.
 --client-cert CLIENT_CERT                Location of Client Auth cert.
 --client-key CLIENT_KEY                  Location of Client Cert Key.
 -v, --version                            Show version and exit.
 --debug                                  Debug mode on.
 -h, --help                               show this help message and exit
复制代码


看参数就知道,功能覆盖还是相当全面的,而且作者也给了很多使用例子,相当贴心。

github.com/taraslayshc…


其实,我还有一个需求,就是除了命令行导出外,希望能有一个公共方法,可以在我自己的程序中调用,然后导出文件。


所以,在原项目基础上,新增了一个程序 es2csv_lib.py。这样,如果在开发过程中,如果有从 Elasticsearch 导出的需求,直接调用公共方法即可。

此程序调用参数和命令行方式基本一致:


class Es2csv:
    def __init__(self, opts):
        self.opts = opts
        self.url = self.opts.get('url', '')
        self.auth = self.opts.get('auth', '')
        self.index_prefixes = self.opts.get('index_prefixes', [])
        self.sort = self.opts.get('sort', [])
        self.fields = self.opts.get('fields', [])
        self.query = self.opts.get('query', {})
        self.tags = self.opts.get('tags', [])
        self.output_file = self.opts.get('output_file', 'export.csv')
        self.raw_query = self.opts.get('raw_query', True)
        self.delimiter = self.opts.get('delimiter', ',')
        self.max_results = self.opts.get('max_results', 0)
        self.scroll_size = self.opts.get('scroll_size', 100)
        self.meta_fields = self.opts.get('meta_fields', [])
        self.debug_mode = self.opts.get('debug_mode', False)
        self.num_results = 0
        self.scroll_ids = []
        self.scroll_time = '30m'
        self.csv_headers = list(META_FIELDS) if self.opts['meta_fields'] else []
        self.tmp_file = '{}.tmp'.format(self.output_file)
复制代码


使用方法:


from es2csv_lib import Es2csv
es = Es2csv(*args)
es.export_csv()
复制代码


源码地址:github.com/yongxinz/es…

还有一点需要说明,源项目作者推荐使用版本是:Python 2.7.x,Elasticsearch 5.x。我新增的代码使用测试版本是:Python 3.6.8,Elasticsearch 5.6.12。

感兴趣的同学可以自己去看源码,或者给我留言都可以。

以上。


相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
6月前
|
API 网络架构 索引
Elasticsearch索引中数据的增删改查与并发控制
Elasticsearch索引中数据的增删改查与并发控制
|
1月前
|
存储 监控 安全
|
1月前
|
存储 数据采集 监控
开源日志分析Elasticsearch
【10月更文挑战第22天】
50 5
|
6月前
|
存储 监控 数据挖掘
使用 Meltano 将数据从 Snowflake 导入到 Elasticsearch:开发者之旅
【6月更文挑战第9天】Meltano,一个开源数据集成框架,简化了从Snowflake到Elasticsearch的数据迁移。这个工具支持多种数据源,提供易于配置的界面。要开始,需安装Meltano并配置连接信息。一个简单的YAML示例展示了如何定义从Snowflake到Elasticsearch的迁移任务。Meltano自动执行迁移,同时提供监控和日志功能。借助Meltano,用户能高效集成数据,提升搜索和分析能力,适应不断增长的数据需求和挑战。
109 6
|
2月前
|
Web App开发 JavaScript Java
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
这篇文章是关于如何使用Spring Boot整合Elasticsearch,并通过REST客户端操作Elasticsearch,实现一个简单的搜索前后端,以及如何爬取京东数据到Elasticsearch的案例教程。
223 0
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
|
3月前
|
网络协议 Java Maven
多模块项目使用ElasticSearch报错
多模块项目使用ElasticSearch报错
59 6
|
2月前
|
消息中间件 监控 关系型数据库
MySQL数据实时同步到Elasticsearch:技术深度解析与实践分享
在当今的数据驱动时代,实时数据同步成为许多应用系统的核心需求之一。MySQL作为关系型数据库的代表,以其强大的事务处理能力和数据完整性保障,广泛应用于各种业务场景中。然而,随着数据量的增长和查询复杂度的提升,单一依赖MySQL进行高效的数据检索和分析变得日益困难。这时,Elasticsearch(简称ES)以其卓越的搜索性能、灵活的数据模式以及强大的可扩展性,成为处理复杂查询需求的理想选择。本文将深入探讨MySQL数据实时同步到Elasticsearch的技术实现与最佳实践。
174 0
|
3月前
|
JSON 自然语言处理 算法
ElasticSearch基础2——DSL查询文档,黑马旅游项目查询功能
DSL查询文档、RestClient查询文档、全文检索查询、精准查询、复合查询、地理坐标查询、分页、排序、高亮、黑马旅游案例
ElasticSearch基础2——DSL查询文档,黑马旅游项目查询功能
|
4月前
|
存储 缓存 监控
|
4月前
|
自然语言处理 索引
ElasticSearch 实现分词全文检索 - 测试数据准备
ElasticSearch 实现分词全文检索 - 测试数据准备
59 1