从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. freeRTOS学习8-21

    不能再中断服务程序调用该函数 应该调用xQueueSendFromISR()

  2. 这可能是最简单易懂的 ZooKeeper 笔记

    分布式架构 CAP 与 BASE 理论 一致性协议 初识 Zookeeper Zookeeper 介绍 Zookeeper 工作机制 Zookeeper 特点 Zookeeper 数据结构 Zooke ...

  3. Servlet 过滤器和异常处理

    Servlet 编写过滤器 Servlet 过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息.可以将一个或多个 Servlet 过滤器附加到一个 Servlet 或一组 Servl ...

  4. php 一些常用函数

    1.var_export() var_export — 输出或返回一个变量的字符串表示此函数返回关于传递给该函数的变量的结构信息,它和 var_dump() 类似,不同的是其返回的表示是合法的 PHP ...

  5. 图解django的生命周期

    其实django的生命周期的大体框架就是这样,剩下的细致的,自己再补充! 图片实在是有点抽象! 谅解!! koala-----给你更多技术小干货

  6. spark算子篇-repartition and coalesce

    我们知道 RDD 是分区的,但有时候我们需要重新设置分区数量,增大还是减少需要结合实际场景,还有可以通过设置 RDD 分区数来指定生成的文件的数量 重新分区有两种方法:repartition and ...

  7. 并不对劲的复健训练-bzoj5339:loj2578:p4593:[TJOI2018]教科书般的亵渎

    题目大意 题目链接 题解 先将\(a\)排序. \(k\)看上去等于怪的血量连续段的个数,但是要注意当存在\(a_i+1=a_{i+1}\)时,虽然它们之间的连续段为空,但是还要算上:而当\(a_m= ...

  8. how to Simply Singleton Navigate the deceptively simple Singleton pattern---reference

    http://www.javaworld.com/article/2073352/core-java/simply-singleton.html JAVA DESIGN PATTERNS By Dav ...

  9. python读写增删修改ini配置文件

    一,百度百科 .ini 文件是Initialization File的缩写,即初始化文件,是windows的系统配置文件所采用的存储格式,统管windows的各项配置,一般用户就用windows提供的 ...

  10. Pytorch中nn.Dropout2d的作用

    Pytorch中nn.Dropout2d的作用 首先,关于Dropout方法,这篇博文有详细的介绍.简单来说, 我们在前向传播的时候,让某个神经元的激活值以一定的概率p停止工作,这样可以使模型泛化性更 ...