【Python】Python解决阿里云DataWorks导出数据1万条限制的问题

【Python】Python解决阿里云DataWorks导出数据1万条限制的问题

  • 一、前言
  • 二、脚本功能概述
  • 三、核心代码解析
    • **1. 环境配置与安全设置**
    • **2. 用户配置区**
    • **3. 数据清洗函数**
    • **4. 核心逻辑**
  • 四、完整代码演示
  • 五、总结

一、前言

在日常数据分析工作中,团队经常需要从阿里云DataWorks(原MaxCompute)中导出临时表数据进行分析或汇报,但由于受限于阿里云的安全策略,每次只能导出1万条,反复操作会很麻烦。
在这里插入图片描述

本文介绍如何用Python脚本解决方案,能够安全高效地将DataWorks中的表数据导出为Excel文件,同时处理数据中的非法字符问题。

二、脚本功能概述

主要用Python脚本实现了以下核心功能:

  1. 安全连接阿里云DataWorks(MaxCompute)

  2. 验证目标表及分区配置

  3. 读取表数据并转换为DataFrame

  4. 对特定字段进行非法字符清洗,确保不受上游脏数据影响

  5. 将清洗后的数据导出为Excel文件,可直接分析

三、核心代码解析

1. 环境配置与安全设置

这里要注意,AccessKey ID 和AccessKey Secret 是每个RAM账号独有的,要绝对保密,避免风控问题,在实际使用时,建议通过环境变量或配置文件管理这些敏感信息。

# -*- coding: utf-8 -*-
# AccessKey ID 和AccessKey Secret  
# python_version: 3.12 

2. 用户配置区

配置基本信息,因为dataworks是基于Hive引擎的,所以会有分区的概念,这里把分区概念也加入到了配置项里。

# === 用户配置区 ===
ACCESS_ID = '填写对应RAM账号的ACCESS_ID'
ACCESS_KEY = '填写对应RAM账号的ACCESS_KEY'
PROJECT_NAME = 'dataoworks项目空间名'          
ENDPOINT = 'http://service.cn-shanghai.maxcompute.aliyun.com/api'  # 阿里云对应region区域
TABLE_NAME = 'chat_msg_output'            # 我这里引用的是客户聊天记录表
OUTPUT_DIR = '/Users/admin/Downloads'  
OUTPUT_FILENAME = 'export_data.xlsx'  
IS_PARTITIONED = 0                        # 是否分区表           
PARTITION_NAME = 0                        # 分区名称 

3. 数据清洗函数

数据清洗时,定义专门用于清洗表字段中的非法字符的函数,主要处理以下问题:
- HTML换行标签<>转换为系统换行符
- 删除所有HTML标签,只保留纯文本内容
- 转义双引号,确保Excel文件兼容性
- 去除不可打印的控制字符

def clean_err_msg(text):"""前面说了是聊天记录表,所以会存在表情包、特殊字符等非法字符,需要进行清洗。功能:处理HTML标签、转义双引号、替换非法换行符"""if pd.isna(text):return texttry:# 替换HTML换行标签为系统换行符text = re.sub(r'<br\s*/?>', '\n', str(text), flags=re.IGNORECASE)# 删除所有HTML标签text = re.sub(r'<.*?>', '', text)# 转义双引号为两个双引号,实现Excel兼容text = text.replace('"', '""')# 去除其他非打印字符text = re.sub(r'[\x00-\x1F\x7F-\x9F]', ' ', text)return text.strip()except Exception as e:print(f"回四叔: 清洗发现异常: {str(e)}")return text

4. 核心逻辑

核心包含以下几个关键步骤:

  • 路径校验与创建:确保输出目录存在,如果不存在则自动创建。
OUTPUT_PATH = os.path.join(OUTPUT_DIR, OUTPUT_FILENAME)
os.makedirs(OUTPUT_DIR, exist_ok=True)
  • ODPS连接与表验证
    使用提供的凭据连接DataWorks,并获取目标表对象。
odps = ODPS(ACCESS_ID, ACCESS_KEY, PROJECT_NAME, endpoint=ENDPOINT)
table = odps.get_table(TABLE_NAME)
  • 分区验证
    脚本会根据IS_PARTITIONED的值检查表是否为分区表,并验证分区格式是否正确。
  • 数据读取与清洗
with table.open_reader(partition=PARTITION_NAME if IS_PARTITIONED else None) as reader:df = reader.to_pandas()if 'err_msg' in df.columns:df['err_msg'] = df['err_msg'].apply(clean_err_msg)
  • 数据导出
df.to_excel(OUTPUT_PATH,index=False,engine='openpyxl',sheet_name='数据导出'
)

四、完整代码演示

# -*- coding: utf-8 -*-
# AccessKey ID 和AccessKey Secret 绝对保密 
# python_version: 3.12 from odps import ODPS
import pandas as pd
import os
import re# === 用户配置区 ===
ACCESS_ID = '填写对应RAM账号的ACCESS_ID'
ACCESS_KEY = '填写对应RAM账号的ACCESS_KEY'
PROJECT_NAME = 'dataoworks项目空间名'          
ENDPOINT = 'http://service.cn-shanghai.maxcompute.aliyun.com/api'  # 阿里云对应region区域
TABLE_NAME = 'chat_msg_output'            # 我这里引用的是客户聊天记录表
OUTPUT_DIR = '/Users/admin/Downloads'  
OUTPUT_FILENAME = 'export_data.xlsx'  
IS_PARTITIONED = 0                        # 是否分区表           
PARTITION_NAME = 0                        # 分区名称       # ====== 核心逻辑 ====== #
def clean_err_msg(text):if pd.isna(text):return texttry:# 替换HTML换行标签为系统换行符text = re.sub(r'<br\s*/?>', '\n', str(text), flags=re.IGNORECASE)# 删除所有HTML标签text = re.sub(r'<.*?>', '', text)# 转义双引号为两个双引号(Excel兼容)text = text.replace('"', '""')# 去除其他非打印字符text = re.sub(r'[\x00-\x1F\x7F-\x9F]', ' ', text)return text.strip()except Exception as e:print(f"报告四叔: 清洗发现异常: {str(e)}")return text# 第1步: 路径校验
OUTPUT_PATH = os.path.join(OUTPUT_DIR, OUTPUT_FILENAME)
os.makedirs(OUTPUT_DIR, exist_ok=True) # 第2步: 连接ODPS
try:odps = ODPS(ACCESS_ID, ACCESS_KEY, PROJECT_NAME, endpoint=ENDPOINT)table = odps.get_table(TABLE_NAME)# 第3步: 分区验证if IS_PARTITIONED == 1:if not table.table_schema.partitions:raise ValueError("报告四叔:❌配置错误=>该表不是分区表")if not re.match(r"^\w+='[\w-]+'$", PARTITION_NAME):raise ValueError("报告四叔:❌分区条件格式错误")table.get_partition(PARTITION_NAME)elif IS_PARTITIONED == 0 and table.table_schema.partitions:raise ValueError("报告四叔:❌配置错误:该表是分区表")# 第4步: 数据导出(新增清洗逻辑)with table.open_reader(partition=PARTITION_NAME if IS_PARTITIONED else None) as reader:df = reader.to_pandas()# 新增清洗步骤if 'err_msg' in df.columns:df['err_msg'] = df['err_msg'].apply(clean_err_msg)# 导出Excel(增加编码参数)df.to_excel(OUTPUT_PATH,index=False,engine='openpyxl',sheet_name='数据导出'#  encoding='utf-8-sig'  # 编码问题处理 )print(f"✅ 数据已成功导出至:{OUTPUT_PATH}")except Exception as e:print(f"报告四叔:❌导出失败:{str(e)}")    # 提示失败原因,便于排查问题if os.path.exists(OUTPUT_PATH):os.remove(OUTPUT_PATH)

五、总结

以上脚本解决团队经常从阿里云DataWorks导出表数据受限的问题,特别适合需要定期导出数据进行进一步分析的场景。
脚本中的数据清洗功能确保了导出的数据质量,特别是对包含HTML标签和特殊字符的字段进行了适当处理,能够涵盖大部分数据清洗的场景。

数据开发同学只需要通过简单的配置修改,便可适应不同的表结构和导出需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/97923.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/97923.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络(一)基础概念

本篇文章为计算机网络相关知识点整理及扩展 基于B站计算机网络课程&#xff1a;https://www.bilibili.com/video/BV1p69tYZEvN/?spm_id_from333.1007.top_right_bar_window_history.content.click 如有错误&#xff0c;还望大家不吝指正 URL&#xff08;统一资源定位符&…

Git的工作区域和文件结构

Git的工作区域和文件结构 1. Git的工作区域2. Git的文件结构 打开.git文件&#xff0c;.git的文件结构如下&#xff1a; objects 存放已经提交的文件&#xff0c;也就是使用 git commit 进行操作后的文件。 index 存放已暂存的文件&#xff0c;也就是使用了 git add 进行操作后…

前端开发易错易忽略的 HTML 的 lang 属性

前言本文主要记录&#xff1a;前端开发中&#xff0c;一个本人错了好几年&#xff0c;看似无关紧要的小错误&#xff1a;HTML 的 lang 属性设置。正文HTML 的 lang 属性在HTML中&#xff0c;lang属性用于指定文档的语言。这对于搜索引擎优化&#xff08;SEO&#xff09;、屏幕阅…

【GD32】 GPIO 超详细总结 (江科大风格课件版)

GD32 GPIO 超详细总结 (江科大风格课件版)第一部分&#xff1a;GPIO 是什么&#xff1f; 名称&#xff1a;GPIO General Purpose Input/Output (通用输入输出口)作用&#xff1a;MCU与外部世界交互的桥梁。通过程序控制引脚输出高、低电平&#xff0c;或者读取引脚的电平状态。…

《嵌入式硬件(八):基于IMX6ULL的点灯操作》

一、IMX6ULL启动代码.global _start_start:ldr pc, _reset_handlerldr pc, _undefine_handlerldr pc, _svc_handlerldr pc, _prefetch_abort_handlerldr pc, _data_abort_handlerldr pc, _reserved_handlerldr pc, _irq_handlerldr pc, _fiq_handler_undefine_handler:ldr pc, …

Spring Boot 调度任务在分布式环境下的坑:任务重复执行与一致性保证

前言在实际业务开发中&#xff0c;调度任务&#xff08;Scheduled Task&#xff09; 扮演着重要角色&#xff0c;例如&#xff1a;定时同步第三方数据&#xff1b;定时清理过期缓存或日志&#xff1b;定时发送消息或报告。Spring Boot 提供了非常方便的 Scheduled 注解&#xf…

剖析ReAct:当大模型学会“边想边做”,智能体的进化之路

你是否曾惊叹于大语言模型&#xff08;LLM&#xff09;强大的推理能力&#xff0c;却又对其“纸上谈兵”、无法真正与世界交互而感到遗憾&#xff1f;你是否好奇&#xff0c;如何让AI不仅能“说”&#xff0c;更能“做”&#xff0c;并且在做的过程中不断思考和调整&#xff1f…

小型无人机传感器仿真模型MATLAB实现方案

一、系统架构设计 无人机传感器仿真模型需集成多物理场建模与数据融合模块&#xff0c;典型架构包含&#xff1a; 动力学模型&#xff1a;六自由度刚体运动方程传感器模型&#xff1a;IMU/GNSS/视觉/气压计数学建模数据融合层&#xff1a;卡尔曼滤波/EKF算法实现环境交互模块&a…

hadoop集群

ssh-keygen -t rsassh-copyid 用户名远程服务器地址start-dfs.sh chown [选项] 新所有者[:新所属组] 目标文件/目录常用选项&#xff1a;-R&#xff1a;递归修改目录下所有文件和子目录的所有者&#xff08;处理目录时常用&#xff09;-v&#xff1a;显示修改过程的详细信息-c&…

大模型入门实践指南

大模型入门教程:从概念到实践 大模型(Large Language Model, LLM)是当前人工智能领域的核心技术,其本质是通过大规模数据训练、具备复杂语言理解与生成能力的深度学习模型。本教程将从基础概念出发,带你理解大模型的核心逻辑,并通过可直接跑通的代码示例,快速上手大模型…

猫头虎开源AI分享:一款CSV to Chat AI工具,上传CSV文件提问,它可以即时返回统计结果和可视化图表

猫头虎开源AI分享&#xff1a;一款CSV to Chat AI工具&#xff0c;上传CSV文件提问&#xff0c;它可以即时返回统计结果和可视化图表 摘要 本文将详细介绍一款开源工具——CSV to Chat AI&#xff0c;它允许用户上传CSV文件并通过自然语言提问&#xff0c;系统会即时返回统计…

洛谷P9468 [EGOI 2023] Candy / 糖果题解

[EGOI 2023] Candy / 糖果 思路 NNN 这么小基本就是瞎打的 DP 了。 设 dpi,jdp_{i,j}dpi,j​ 为操作 jjj 次后前 iii 项的和最大是多少。 考虑转移&#xff0c;我们可以枚举 iii 并考虑将其移动到 ppp 位置&#xff0c;总共操作 kkk 次&#xff0c;那么就有 dpp,kmin⁡(dpp,…

AI智能体(Agent)大模型入门【3】--基于Chailit客服端实现页面AI对话

目录 前言 安装chailint 创建中文语言环境 创建chailint页面客户端 前言 本篇章将会基chailit框架实现页面进行AI对话。 若没有自己的本地模型对话&#xff0c;需要查看专栏内的文章&#xff0c;或者点击链接进行学习部署 AI智能体&#xff08;Agent&#xff09;大模型入…

【高并发内存池——项目】定长内存池——开胃小菜

提示&#xff1a;高并发内存池完整项目代码&#xff0c;在主页专栏项目中 文章目录 提示&#xff1a;高并发内存池完整项目代码&#xff0c;在主页专栏项目中 先设计一个定长的内存池 一、为什么需要定长内存池&#xff1f; &#x1f3e2; 传统内存分配的痛点 &#x1f3ed; 内…

6-获取磁盘分区信息

观察文件 获取server端电脑里面存在哪些盘符 int MakeDriveInfo() { //1>A 2>B &#xff08;原本属于软盘的 &#xff09;3>C ... 26>Zstd::string result;for (int i 1; i < 26; i) { //让其循环if (_chdrive(i) 0) //改变当前的驱动,_chdrive函数(c和c中)应…

每天认识一个电子器件之LED灯

LED选型核心参数一览表参数类别关键参数说明 & 为什么重要基本电气参数正向电压 (Vf)LED正常发光时两端的电压降。必须匹配您的电路电压。红/黄光约1.8-2.2V&#xff0c;蓝/绿/白光约2.8-3.6V。正向电流 (If)LED正常发光时所需的电流。决定了LED的亮度&#xff0c;必须用电…

Spring Boot 集成 Flowable 7.1.0 完整教程

一、引言 在企业级应用开发中&#xff0c;工作流管理是不可或缺的一部分。从简单的请假审批到复杂的业务流程&#xff0c;工作流引擎能够显著提升系统的灵活性和可维护性。​​Flowable​​ 作为一个轻量级、基于 Java 的开源工作流引擎&#xff0c;完美支持 ​​BPMN 2.0​​…

uniapp离线打包安卓apk详细教程,从HbuilderX新建项目到Android Studio详细配置(一)

目录 一、基础离线打包&#xff0c;无引入模块&#xff0c;无原生插件 1. HbuilderX新建项目&#xff0c;开发者后台申请证书和离线key 2.HbuilderX生成本地包 二、Android Studio配置 1.下载离线SDK&#xff0c;解压&#xff0c;SDK版本需要和HbuilderX 版本一致&#xf…

蓝牙鼠标频繁卡顿?一招解决 Win10/11 的 USB 省电机制干扰问题

蓝牙鼠标频繁卡顿&#xff1f;一招解决 Win10/11 的 USB 省电机制干扰问题 问题背景 在使用蓝牙鼠标时&#xff0c;很多用户会遇到以下问题&#xff1a; 鼠标移动卡顿、延迟明显偶尔断连&#xff0c;需重新配对尤其在笔记本合盖或待机后恢复时更明显 这些问题在 Windows 10/11 …

领码方案|Spring Boot 异步请求深度剖析:从原理到 AI 驱动的吞吐量优化

摘要 本文以“领码方案”为核心&#xff0c;深入剖析 Spring Boot 异步请求的底层原理、线程模型、三种常用实现方式&#xff08;Callable、WebAsyncTask、DeferredResult&#xff09;的运行机制与性能特征&#xff0c;并结合 AI 驱动的自适应线程池调优、云原生架构下的弹性伸…