阿里雲數倉Dataworks資料匯出到檔案step by step

五嶽發表於2021-06-15

背景

假設你在阿里雲上Dataworks的空間space下有一個表table_A,想要把它的資料匯出到檔案以供後續使用,但是資料量又很多,從瀏覽器複製不太現實。阿里雲提供了Java和Python版本的SDK,用來完成這個操作。
為了幫助業務取數,我之前搜了很多文件包括官方文件,但都沒有完整講清楚具體怎麼做的,資訊很碎片化。經過個人的實踐總算摸清楚其中每一步的細節,分享出來。
其實阿里內部是有一套自有的數倉匯出&檔案分發平臺的,希望能儘早開放出來給使用者使用。

“空間”所在位置(已打碼):

【注意】使用SDK訪問數倉表也會按流量計費,因此不要進行一些非必要的操作!

環境準備

  1. 安裝python,建議用python3

    brew install python3
    
  2. 安裝pip

    easy_install pip
    
  3. 安裝pyodps

    pip install pyodps
    

獲取AccessKey

按圖中的步驟,獲取AccessKeyIdAccessKeySecret注意:AccessKeySecret建立後在阿里雲上是無法再次檢視的,需要自行儲存。

編寫取數指令碼

基本用法

先寫一個簡單的指令碼,將數倉中所有的行的id列取出來,輸出到檔案中,請自行替換以下程式碼中帶有"【】"的引數。
注意資料分片是必須的,請自行替換成你的表的分片欄位名(預設一般是ds,格式為20210611)

from odps import ODPS
file_handle=open('export.txt',mode='w')
o = ODPS('【AccessKeyId】', '【AccessKeySecret】', '【space】','http://service.odps.aliyun.com/api')
for record in o.read_table('【table_A】', partition='ds=【資料分片】'):
	file_handle.write(record.id + '\n')
file_handle.close()

條件查詢

此時使用execute_sql+reader來讀取即可

from odps import ODPS
file_handle=open('export.txt',mode='w')
o = ODPS('【AccessKeyId】', '【AccessKeySecret】', '【space】','http://service.odps.aliyun.com/api')
with o.execute_sql("select * from 【table_A】 where id = '【***】' and ds='【資料分片】'").open_reader() as reader:
	for record in reader:
		file_handle.write(record.id + '\n')
file_handle.close()

參考文件

pyods官方文件:https://pyodps.readthedocs.io/zh_CN/latest/

相關文章