【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
英文地址,請注明出處:http://en.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 驅動的自適應線程池調優、云原生架構下的彈性伸…