背景
假設你在阿里雲上Dataworks的空間space
下有一個表table_A
,想要把它的資料匯出到檔案以供後續使用,但是資料量又很多,從瀏覽器複製不太現實。阿里雲提供了Java和Python版本的SDK,用來完成這個操作。
為了幫助業務取數,我之前搜了很多文件包括官方文件,但都沒有完整講清楚具體怎麼做的,資訊很碎片化。經過個人的實踐總算摸清楚其中每一步的細節,分享出來。
其實阿里內部是有一套自有的數倉匯出&檔案分發平臺的,希望能儘早開放出來給使用者使用。
“空間”所在位置(已打碼):
【注意】使用SDK訪問數倉表也會按流量計費,因此不要進行一些非必要的操作!
環境準備
-
安裝python,建議用python3
brew install python3
-
安裝pip
easy_install pip
-
安裝pyodps
pip install pyodps
獲取AccessKey
按圖中的步驟,獲取AccessKeyId
和AccessKeySecret
。注意: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()