从es将数据导出分两步:

  1. 查询大量数据
  2. 将数据生成文件并下载

本篇主要是将第二步,第一步在《es实战之查询大量数据》中已讲述。

csv vs excel

excel2003不能超过65536, excel2007及以上版本支持1048576条数据。excel支持的数据量有限,并且生生成文件的速度比较慢。

csv具有支持写入量大,文件较小的优点。

故选择csv作为导出文件类型。

导出文件的几种方式:

将数据从es中查询出来,在这个大前提下,对比导出文件的速度。

由前端处理

直接将数据返回给前端,由前端生成csv文件。

存在问题:

  • content download slow
    当数据量较大时,数据网络传输延迟较大。如果时间太长,且前后端分离,采用nginx做反向代理时,会出现ClientAbortException:java,需调整nginx参数。

字符流

使用StringReader

将数据从es中查询出来后,将数据拼接成String, 并交由StringReader处理。

此种方式拼接字符串的过程比较耗时。

字节流

采用super-csv : https://github.com/super-csv/super-csv.

super-csv可以高效生产csv文件。

处理过程:

从es中查询数据-->采用super-csv生产csv文件-->用字节流方式读取文件-->response.outputStream.write()

其他

如果是内部使用,可以使用kibana中的csv文件导出功能。

实践中遇到的问题及解决方法

  1. 表头乱码问题
    JAVA以UTF-8导出CSV文件,用excel打开产生乱码的解决方法
  2. 中文文件名乱码问题
    文件下载 response.setHeader()下载中文文件名乱码问题 解决办法
  3. 空格URL编码的正确使用姿势

es实战之数据导出成csv文件的更多相关文章

  1. vue.js纯前端处理如何将后台返回来的csv数据导出成csv文件

    需要实现一个下载csv文件的功能,但后台没有对这个下载文件进行处理,而是将csv数据传给前台而已,需要前台做一下处理. 这是按钮的代码: <a> <el-button size=&q ...

  2. Pl/sql 如何将oracle的表数据导出成excel文件?

    oracle将表数据导出成excel文件的方法 1)在SQL窗体上,查询需要导出的数据 --查询数据条件-- ; 结果视图 2)在查询结果的空白处,右键选择Copy to Excel 3) 查看导出e ...

  3. dataview将excel表格的数据导出成txt文件

    有时候需要处理大量的数据,且这些数据又存在于excel表格内,在平时的时候,我是非常喜欢这样的数据的,因为只要是excel表格内的数据,处理起来的方法就很方便.也可能我平时遇见的数据总是以一种杂乱无章 ...

  4. 数据库数据导出成XML文件

    在数据库中,怎样把库中的数据导出XML文件, sql语句如下: SELECT *  FROM 表名 FOR XML AUTO, ELEMENTS

  5. mysql中数据导出成excel文件语句

    代码如下 复制代码 mysql>select * from xi_table into outfile ’d:test.xls’; 导出为txt文件:  代码如下 复制代码 select * f ...

  6. Hive表导出成csv文件

    命令 hive -e " set hive.cli.print.header=true; #将表头输出 select * from data_table where some_query_c ...

  7. 安卓端数据导出成txt文件

    toExport() { if (this.dataList == false) { this.$createDialog({ type: "alert", content: &q ...

  8. C# 将List数据 导出到csv 文件

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Ref ...

  9. plsql 把数据导出成为 .sql文件,记住了

    今天上午,同事 提醒我.可以直接把数据导出成 .sql 文件,类似于 反编译.见下图

随机推荐

  1. prometheus 的promsql的经典例子 安装grafana

    0.好的参考文档 https://www.cnblogs.com/longcnblogs/p/9620733.html 1.多维度数据 2.Prometheus的全局监控指标 只需要定义一个全局的指标 ...

  2. TP5中用redis缓存

    在config.php配置文件下找到缓存设置,将原来的文件缓存修改为redis缓存,也可以改为多种类型的缓存: // +---------------------------------------- ...

  3. TP5 isEmpty() 判空方法 所用场景

    1, { }类型 { "id": 1, "name": "首页置顶", "description": "首页轮 ...

  4. Springboot Rabbitmq 使用Jackson2JsonMessageConverter 消息传递后转对象

    Springboot为了应对高并发,接入了消息队列Rabbitmq,第一版验证时使用简单消费队列: //发送端 AbstractOrder order =new Order(); rabbitmqTe ...

  5. 支付宝网站即时支付开发,MD5加签名规则处理代码展示

    一.如果传入进来的Object对象,最后生成制定格式的字符换 text: list拼接成字符串,map中的所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串,list的元素之间用“| ...

  6. luoguP2634聪聪可可(点分治)

    题目链接:https://www.luogu.org/problem/P2634 题意:给一颗树,求距离的模3为0的点对数量,注意(1,1)算一个点对,(1,2)和(2,1)算两个点对. 思路:和点分 ...

  7. 14.Sqoop把数据从HDFS导出到mysql

    创建数据文件 ,gopal,manager,,TP ,manisha,preader,,TP ,kalil,php dev,,AC ,prasanth,php dev,,AC ,kranthi,adm ...

  8. iis实现方向代理

    将请求的网址重写重定向到其它网址.当80端口被占用无法同时使用两个Web服务的解决方案,使得IIS和Apache Tomcat 共存 0|1环境 WindowServer 2008 IIS7 Apac ...

  9. Update语句的Output从句结构

    原文:Update语句的Output从句结构 一,先看1个列子 ) dbo.Table_1 set status = 'C' --2,选择前3条数据output deleted.id,deleted. ...

  10. python-open函数

    open函数,该函数用于文件处理 操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开文件 1 文件句柄 = open('文件路径', '模式') 打开文件时,需要指定文件路径和以何等方式 ...