如何利用OSS实现大量数据导出

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000次 1年
对象存储 OSS,恶意文件检测 1000次 1年
简介: OSS数据导出

业务场景

在业务进行数据分析时,会经常碰到导出数据的场景,而对于数据量较大的导出,使用Excel的方式导出会比较消耗性能,而csv是纯文本文件,但可通过Excel等软件打开,OSS支持文本文件上传,这满足了我们导出数据的需求,所以我们可以使用OSS+csv的方式进行大数据量的文件导出。

准备内容

  1. 已开通OSS服务
  2. Mysql数据库
  3. 下载OSS的SDK

PS:本文使用 PHP+Mysql 进行操作,大家可根据需要换成自己熟悉的语言和数据库。

操作步骤

  • 分页从数据库获取数据
  • 将数据上传至OSS
  • 输出文件下载链接

示例代码:

use OSS\OssClient;
use OSS\Core\OssException;
/**
* 生成csv文件
*/
public function uploadCsvFile($content,&$position){
    $accessKeyId = "your_access_key_id";
    $accessKeySecret = "your_access_key_secret";
    $endpoint = "oss-cn-qingdao.aliyuncs.com";
    $bucket = "your_bucket_name";//请填入你的 OSS bucket 名称
    $object = "/your_file_path/order_data.csv";
    $object = $path.$fileName;
    $content = implode("\n", $content)."\n";
    if ($position == 0) {
        //防止乱码
        $content = "\xEF\xBB\xBF".$content;
    }
    try{
        $ossClient = new OssClient($accessKeyId,$accessKeySecret,$endpoint);
        $position = $ossClient->appendObject($bucket,$object,$content,$position);
    } catch (OssException $e) {
        printf(__FUNCTION__ . ": FAILED\n");
        printf($e->getMessage() . "\n");
        return;
    }
    return $object;
}
public function exportData(){
  $pageIndex = 1;
  $pageSize = 100;
  $position = 0;
  do{
    //分页获取订单数据
    $list = getOrderList($pageIndex,$pageSize);
    if (empty($list)) {
      break;
    }
    $content = [];
    if ($pageIndex == 1) {
      $content[] = ["用户名","订单号","下单时间","订单金额"];
    }
    //将数据按照每行进行汇总
    foreach ($list as $item) {
      $content[] = implode(',',[$item->user_name,$item->order_ID,$item->create_time,$item->price]);
    }
    //上传至OSS
    $filePath = $this->uploadCsvFile($content,$position);
    $pageIndex++;
  }while (true);
}
exportData();


因为使用Excel打开 csv 在不同系统打开会经常出现乱码的情况,比如 mac 上打开不乱码,但是在 windows 中打开就会出现乱码。这是因为在文件头缺少了 bom 头识别编码,打开时会按照系统默认的编码进行读取这时候就会出现乱码。所以我们在上传文件的起始位置要先插入UTF-8 bom 头( EF BB BF ),这样即可解决乱码问题。

关于导出我们还可以根据实际的业务需求进行一些拓展,比如通过异步的方式来实现导出,在用户的操作界面提供导出记录用于查看每个导出的进度,主要流程如下:

1、导出记录的数据表主要结构

字段名

说明

id

主键

task_name

导出任务

task_status

任务状态:待导出、导出中、导出完成

user_id

用户ID

task_file

导出结果文件

create_time

创建时间

update_time

更新时间

export_condition

导出条件

2、导出流程

  • 用户请求导出时,生成导出任务数据:任务名、任务状态(待导出)、用户ID、导出条件、创建时间
  • 将生成的任务ID,作为消息内容发送到消息队列
  • 后台接收消息后,根据任务ID获取导出条件,同时更新导出记录状态为“导出中”
  • 根据导出条件分页查询,并将记录上传至OSS文件,将OSS的文件路径,记录到 task_file 字段中
  • 数据导出结束,更新任务状态为“导出完成”,通知用户导出结果


此处的消息队列可使用阿里云的MNS、RocketMQ等消息队列产品。

结语

本文中的示例代码大家可以按照实际的需要进行调整,对于大批量的数据导出功能,可使用异步处理+消息通知的方式处理,可以减轻一部分的性能压力。

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
相关文章
|
4月前
|
机器学习/深度学习 人工智能 专有云
人工智能平台PAI使用问题之怎么将DLC的数据写入到另一个阿里云主账号的OSS中
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
5月前
|
DataWorks 安全 关系型数据库
DataWorks产品使用合集之同步数据到OSS时,文件的切分单位如何设置
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
3月前
|
存储 安全 大数据
对象存储的意义:探索数据新纪元的关键基石
在信息爆炸时代,数据成为核心资产,而高效安全的数据存储至关重要。对象存储作为一种新兴技术,起源于20世纪90年代,旨在解决传统文件系统的局限性。随着云计算和大数据技术的发展,它已成为关键技术之一。对象存储具备高可扩展性、高可靠性、低成本、易于管理和多协议支持等优点。它支撑大数据发展、推动云计算繁荣、助力企业数字化转型并保障数据安全。未来,对象存储将进一步提升性能,实现智能化管理,并与边缘计算融合,获得政策支持,成为数据新时代的关键基石。
170 3
|
4月前
|
DataWorks 安全 定位技术
DataWorks产品使用合集之如何同步OSS中的Parquet数据,并解析里面的数组成多个字段
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
5月前
|
数据采集 DataWorks 安全
DataWorks产品使用合集之将按日分区的表同步数据到OSS数据源,该如何配置
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
160 1
|
5月前
|
分布式计算 DataWorks API
DataWorks操作报错合集之在将ODPS空间设置成保护模式后,导出到OSS的任务出现了权限问题,该怎么解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
177 1
|
5月前
|
机器学习/深度学习 分布式计算 大数据
MaxCompute产品使用问题之如何直接加载oss中的parque数据,无需指定列和分区
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
5月前
|
消息中间件 SQL Kafka
实时计算 Flink版产品使用问题之如何实现OSS数据到Kafka的实时同步
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
5月前
|
存储 分布式计算 大数据
MaxCompute产品使用合集之是否支持创建OSS外部表为分区表,并访问OSS上以分区方式存储的数据
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
5月前
|
存储 分布式计算 大数据
MaxCompute产品使用合集之读取OSS数据出现重复的情况是什么导致的
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。

热门文章

最新文章

下一篇
无影云桌面