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 文件,类似于 反编译.见下图
随机推荐
- Arrays.asList()方法注意事项
1.Arrays.asList()底层数组作为物理层实现.所以返回的List大小不可更改,即不可以做add().remove()操作,并且对List所做的任何变动都会致使原数组发生变动. public ...
- python商城项目总结
项目概括 本项目用于针对Django框架的练习,主要分为前端和后端两部分.前端负责用户注册.登录.商品展示以及添加购物车和显示订单列表的功能:后端负责会员信息.商品类别.商品信息的增删改查以及订单状态 ...
- paramiko模块(远程操作服务器)
paramiko模块(远程操作服务器) django+paramkio实现远程某些服务器执行命令+上传文件 用于帮助开发者通过代码远程连接服务器,并对服务器进行操作. pip3 install par ...
- 树莓派驱动开发 helloworld
编写Makefile ifneq ($(KERNELRELEASE),) obj-m := MiniX.o else KDIR := /home/hi/pi/kernel/linux/ all: ma ...
- 基于从库+binlog方式恢复数据
基于从库+binlog方式恢复数据 将bkxt从库的全备份在rescs5上恢复一份,恢复到6306端口,用cmdb操作 恢复全备后执行如下操作 set global read_only=OFF; st ...
- Vasya and Magic Matrix CodeForces - 1042E (概率dp)
大意:给定n*m矩阵, 初始位置(r,c), 每一步随机移动到权值小于当前点的位置, 得分为移动距离的平方, 求得分期望. 直接暴力dp的话复杂度是O(n^4), 把距离平方拆开化简一下, 可以O(n ...
- Spring实战(八)bean装配的运行时值注入——属性占位符和SpEL
前面涉及到依赖注入,我们一般哦都是将一个bean引用注入到另一个bean 的属性or构造器参数or Setter参数,即将为一个对象与另一个对象进行关联. bean装配的另一个方面是指将一个值注入到b ...
- Python(六) —— 网络请求
接口调用 接口调用有几个模块可以用:urllib 和 requests ,urllib 是内置的模块,极其不好用,强烈推荐用 requests 模块 get 请求 1.普通的 get 请求 impor ...
- Python——用turtle画一个月饼
今天是中秋节,首先在这里祝大家中秋快乐!那么提到中秋,我们首先想到的当然是香甜的月饼,所以我今天就在这里画一个月饼送给大家. 那么 要用Python画图,我们必须掌握并运用Turtle库,这个可以自己 ...
- Excel学习笔记:行列转换
目录 offset函数 行列转换的三种方式 1.右键转置 2.转置公式TRANSPOSE 3.引用函数OFFSET+ROWS/COLUMN(支持随时更新数据) 一行(列)转多行多列 offset函数 ...