MaxCompute Tunnel は、MaxCompute へのデータアップロードおよび MaxCompute からのデータダウンロードを行うためのトンネルサービスです。Python 用 Tunnel SDK は、PyODPS (MaxCompute SDK for Python) に含まれています。
注意事項
-
以下のセクションでは、Python 向け SDK を使用して MaxCompute へのデータのアップロードおよび MaxCompute からのデータのダウンロードを行う方法の例を示します。その他のシナリオにおける例について詳しくは、「Python 向け SDK ドキュメント」をご参照ください。
-
Cython 環境では、PyODPS がインストール時に C コードをコンパイルし、Tunnel を使ったデータのアップロードおよびダウンロードを高速化します。
データのアップロード
import os
from odps import ODPS
from odps.tunnel import TableTunnel
# 環境変数から AccessKey 認証情報を使用して ODPS クライアントを初期化します。
# 認証情報をコード内にハードコードしないよう、環境変数に格納してください。
o = ODPS(
os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
project='your-default-project',
endpoint='your-end-point',
)
table = o.get_table('my_table')
tunnel = TableTunnel(o)
upload_session = tunnel.create_upload_session(table.name, partition_spec='pt=test')
with upload_session.open_record_writer(0) as writer:
# インデックスでレコードを作成
record = table.new_record()
record[0] = 'test1'
record[1] = 'id1'
writer.write(record)
# リストからレコードを作成
record = table.new_record(['test2', 'id2'])
writer.write(record)
# with ブロックの外で commit() を呼び出します。データ書き込み前に呼び出すとエラーがレポートされます。
upload_session.commit([0])
データのダウンロード
from odps.tunnel import TableTunnel
tunnel = TableTunnel(odps)
download_session = tunnel.create_download_session('my_table', partition_spec='pt=test')
# レコードリーダー:レコードオブジェクトとして行単位でイテレート
with download_session.open_record_reader(0, download_session.count) as reader:
for record in reader:
# 各レコードを処理します。
# Arrow リーダー:Apache Arrow RecordBatch オブジェクトとしてバッチ単位でイテレート。
with download_session.open_arrow_reader(0, download_session.count) as reader:
for batch in reader:
# 各 Arrow RecordBatch を処理します。