es实战之数据导出成csv文件
从es将数据导出分两步:
- 查询大量数据
- 将数据生成文件并下载
本篇主要是将第二步,第一步在《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文件导出功能。
实践中遇到的问题及解决方法
- 表头乱码问题
JAVA以UTF-8导出CSV文件,用excel打开产生乱码的解决方法 - 中文文件名乱码问题
文件下载 response.setHeader()下载中文文件名乱码问题 解决办法 - 空格URL编码的正确使用姿势
es实战之数据导出成csv文件的更多相关文章
- vue.js纯前端处理如何将后台返回来的csv数据导出成csv文件
需要实现一个下载csv文件的功能,但后台没有对这个下载文件进行处理,而是将csv数据传给前台而已,需要前台做一下处理. 这是按钮的代码: <a> <el-button size=&q ...
- Pl/sql 如何将oracle的表数据导出成excel文件?
oracle将表数据导出成excel文件的方法 1)在SQL窗体上,查询需要导出的数据 --查询数据条件-- ; 结果视图 2)在查询结果的空白处,右键选择Copy to Excel 3) 查看导出e ...
- dataview将excel表格的数据导出成txt文件
有时候需要处理大量的数据,且这些数据又存在于excel表格内,在平时的时候,我是非常喜欢这样的数据的,因为只要是excel表格内的数据,处理起来的方法就很方便.也可能我平时遇见的数据总是以一种杂乱无章 ...
- 数据库数据导出成XML文件
在数据库中,怎样把库中的数据导出XML文件, sql语句如下: SELECT * FROM 表名 FOR XML AUTO, ELEMENTS
- mysql中数据导出成excel文件语句
代码如下 复制代码 mysql>select * from xi_table into outfile ’d:test.xls’; 导出为txt文件: 代码如下 复制代码 select * f ...
- Hive表导出成csv文件
命令 hive -e " set hive.cli.print.header=true; #将表头输出 select * from data_table where some_query_c ...
- 安卓端数据导出成txt文件
toExport() { if (this.dataList == false) { this.$createDialog({ type: "alert", content: &q ...
- C# 将List数据 导出到csv 文件
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Ref ...
- plsql 把数据导出成为 .sql文件,记住了
今天上午,同事 提醒我.可以直接把数据导出成 .sql 文件,类似于 反编译.见下图
随机推荐
- Go语言实例化结构体——为结构体分配内存并初始化
转自: http://c.biancheng.net/view/66.html 结构体的定义只是一种内存布局的描述,只有当结构体实例化时,才会真正地分配内存.因此必须在定义结构体并实例化后才能使用结构 ...
- 【Python】【基础知识】【内置函数】【object的使用方法】
原英文帮助文档: class object Return a new featureless object. object is a base for all classes. It has the ...
- SQLite基础-8.子句(二)
目录 SQLite子句(二) 1. GROUP BY子句 2. HAVING子句 3. LIMIT 子句 4. IF EXISTS 和 IF NOT EXISTS 子句 SQLite子句(二) 1. ...
- tensorflow零起点快速入门(1)
导入: 其中的TF_CPP_MIN_LOG_LEVEL据说是为了忽略警告,但是我这里没有意义(numpy的一些警告) import tensorflow as tf import os os.envi ...
- Winform 5种皮肤小结(内含丰富的下载实例)
软件界面就是指软件中面向操作者而专门设计的用于操作使用及反馈信息的指令部分. 优秀的软件界面有简便易用,突出重点,容错高等特点. 1.东日IrisSkin 使用IrisSkin只能是对单一的控件重绘 ...
- vs2010 回车、退格键等不能用
有时候在vs2010中,突然回退键.回车键.方向键就用不了了,百度一堆方法,最后找到按Alt+Enter,就可以用了.
- 二、maven学习
maven工程运行环境修改 例如maven自带Tomcat6,我们想使用Tomcat7 pom.xml #配置多一个Tomcat7<plugins> <plugin> < ...
- [转载]Flex的文件规则
原文在:https://blog.csdn.net/hczhiyue/article/details/20483209 文章中给的一个定义很明白,对于初学者来说很有帮助: 什么是 FLEX?它是一个自 ...
- java字符串大小写转换
String test="SHA34cccddee"; System.out.println(test.toUpperCase());//小写转大写 String test= ...
- WinForm - 不用自绘实现仿QQ2013
素材啥的都是一手整理的,绝对的原创.这是13年做的,虽然是个老项目了,可里面涉及的winform技术不会过时,所以就拿出来重温探讨下技术要点. 没使用任何自绘命令,可以说是非常容易理解与学习的. 效果 ...