背景
假設你在阿里雲上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()