PyODPS は MaxCompute 向けの Python SDK であり、DataWorks で PyODPS タスクを開発・実行できます。このトピックでは、制限事項、主なワークフローの概要、および使用を開始するための簡単な例について説明します。
制限事項
-
使用量の制限
Got killed エラーが発生した場合、そのプロセスはメモリ制限を超えたために終了されています。DataWorks 内の PyODPS ノードでデータをダウンロードして処理することは避けてください。代わりに、データ処理タスクを MaxCompute に送信して分散実行を行ってください。2 つの方法の比較については、「注意事項:PyODPS を実行するために完全なデータをローカルにダウンロードしない」をご参照ください。
-
パッケージサポートの制限
-
DataWorks の PyODPS ノードには、matplotlib などの一部のパッケージが含まれていません。これにより、以下の機能が制限される場合があります。
-
DataFrame の
plot関数。 -
DataFrame のユーザー定義関数 (UDF) は、実行のために MaxCompute に送信する必要があります。Python サンドボックスは、サードパーティ製のライブラリとして純粋な Python ライブラリと NumPy のみをサポートしているため、Pandas を直接使用することはできません。
-
UDF を使用せずに DataWorks で実行されるコードでは、プリインストール済みの NumPy および Pandas パッケージを使用できます。バイナリコードを含む他のサードパーティ製パッケージはサポートされていません。
-
-
DataWorks の PyODPS ノードは、Python の atexit パッケージをサポートしていません。同様の機能を実現するには、try-finally ブロックを使用してください。
-
-
読み取り可能なデータレコード数の制限
デフォルトでは、DataWorks の PyODPS ノードに対して options.tunnel.use_instance_tunnel は
Falseに設定されており、読み取りは最大 10,000 レコードに制限されます。より多くのレコードを読み取るには、options.tunnel.use_instance_tunnel をTrueに設定して、インスタンストンネルをグローバルに有効にする必要があります。
操作手順
-
PyODPS ノードの作成
DataWorks の データ開発 ページに移動して、PyODPS ノードを作成します。PyODPS ノードには 2 種類あります。
-
PyODPS 2:Python 2 ベース。
-
PyODPS 3:Python 3 ベース。
使用する Python のバージョンに基づいて PyODPS ノードを作成します。詳細な手順については、「PyODPS 2 タスクの開発」および「PyODPS 3 タスクの開発」をご参照ください。
-
-
PyODPS タスクのコード開発
ノードを作成した後、以下のセクションの例に従って、PyODPS の主な機能について学びます。
PyODPS の使用方法の詳細については、「基本操作の概要」および「DataFrame (非推奨)」をご参照ください。また、「PyODPS ノードを使用した Jieba 中国語単語分割」の例に従って、簡単なエンドツーエンドの操作を実行することもできます。
-
スケジューリングプロパティを設定し、ノードを保存、コミット、デプロイして、定期的に実行できるようにします。
MaxCompute エントリポイント
PyODPS ノードでは、DataWorks は MaxCompute のエントリポイントとしてグローバル変数 odps または o を提供します。手動で定義する必要はありません。例:
# pyodps_iris テーブルが存在するかどうかを確認します。
print(o.exist_table('pyodps_iris'))
このコードは True を返し、pyodps_iris テーブルが存在することを示します。
エントリポイントオブジェクト o の認証情報は MaxCompute にのみアクセスでき、他のクラウドサービスにはアクセスできません。DataWorks は、PyODPS ノードの実行中にこれらの認証情報のみを提供します。このオブジェクトで o.from_global などのメソッドを呼び出して、追加の認証情報を取得することはできません。
SQL の実行
一般的な機能
-
PyODPS ノードでは、execute_sql() や run_sql() などのメソッドを使用して SQL コマンドを実行できます。これらのメソッドは、主にデータ定義言語 (DDL) およびデータ操作言語 (DML) ステートメントをサポートします。
説明execute_sql()およびrun_sql()メソッドは、すべての SQL ステートメントをサポートしているわけではありません。DDL または DML 以外のステートメントについては、他のメソッドを使用する必要があります。たとえば、GRANTまたはREVOKEステートメントを実行するにはrun_security_queryメソッドを使用し、API コマンドを実行するにはrun_xflowまたはexecute_xflowメソッドを使用します。 -
PyODPS ノードで SQL 実行結果を読み取るには、open_reader() を使用します。
PyODPS ノードでの SQL 関連の操作の詳細については、「SQL」をご参照ください。
注意事項:データ形式とレコード制限
過去の互換性のため、DataWorks ではデフォルトでインスタンストンネルが有効になっていません。これは、instance.open_reader パラメーターがデフォルトで Result インターフェイスを使用することを意味します。このインターフェイスは 10,000 レコードの limit 制限の対象であり、複雑なデータ型をサポートする際に問題があります。ご利用のプロジェクトにデータ保護メカニズムがなく、すべてのデータを繰り返し取得したり、Array などの複雑なデータ型のフィールドを読み取ったりする必要がある場合は、インスタンストンネルを有効にし、limit を無効にする必要があります。
-
実行時に
limitを無効にする次のステートメントを使用して、インスタンストンネルをグローバルに有効にし、
limit制限を無効にすることができます。options.tunnel.use_instance_tunnel = True options.tunnel.limit_instance_tunnel = False # 制限を無効にしてすべてのデータを読み取ります。 with instance.open_reader() as reader: # インスタンストンネルを介してすべてのデータを読み取ることができます。 # reader.count を使用してレコード数を取得できます。 -
現在の Reader に対してのみ
limitを無効にするopen_reader に
tunnel=Trueを追加して、現在の open_reader 呼び出しに対してのみ インスタンストンネルを有効にすることもできます。さらに、limit=Falseを追加して、現在の呼び出しに対してのみlimit制限を無効にすることもできます。with instance.open_reader(tunnel=True, limit=False) as reader: # この open_reader 呼び出しはインスタンストンネルインターフェイスを使用し、すべてのデータを読み取ることができます。
インスタンストンネルとデータ読み取り制限の詳細については、「SQL 実行結果の読み取り」をご参照ください。
DataFrame
-
実行
DataWorks の DataFrame 操作では、
executeやpersistなどの 即時実行メソッドを明示的に呼び出す必要があります。例えば:# 即時実行メソッドを呼び出して各レコードを処理し、iris.sepalwidth が 3 未満の pyodps_iris テーブルからすべてのデータを出力します。 from odps.df import DataFrame iris = DataFrame(o.get_table('pyodps_iris')) for record in iris[iris.sepalwidth < 3].execute(): print(record) -
詳細出力
デフォルトでは、DataWorks で
options.verboseオプションが有効になっており、ノード実行中に Logview URL などの詳細情報が出力されます。このオプションを設定して、これらの詳細を表示するかどうかを制御できます。
DataFrame 操作のその他の例については、「DataFrame (非推奨)」をご参照ください。
スケジューリングパラメーター
PyODPS ノードでは、スケジューリングパラメーターを使用して、タスク実行のビジネス日付などの値を取得できます。スケジューリングパラメーターの定義と使用方法は SQL ノードと一貫していますが、コード内での参照方法が異なります。
-
SQL ノードは、コード内で直接 ${param_name} のような文字列を使用します。
-
DataWorks は、${param_name} の文字列置換を実行する代わりに、ノードが実行される前に
argsという名前のグローバル辞書を追加します。この辞書にアクセスすることで、スケジューリングパラメーターの値を取得できます。例:args[param_name]。
たとえば、 ペインでスケジューリングパラメーター ds=${yyyymmdd} を設定した場合、コード内で次のようにこのパラメーターを取得できます。
-
dsパラメーターの値を取得します。print('ds=' + args['ds']) # ds の時刻を返します。例:ds=20161116 -
ds=${yyyymmdd}という名前のパーティション内のテーブルからデータを取得します。o.get_table('table_name').get_partition('ds=' + args['ds']) # table_name テーブルの ds パーティションからデータを取得します。
スケジューリングパラメーターの詳細については、「スケジューリングパラメーターの設定と使用」をご参照ください。
実行時パラメーターヒント
タスクの実行時パラメーターを設定するには、dict である hints パラメーターを使用します。
o.execute_sql('select * from pyodps_iris', hints={'odps.sql.mapper.split.size': 16})
sql.settings をグローバルに設定することもできます。一度設定すると、これらの設定は各実行に自動的に追加されます。
from odps import options
options.sql.settings = {'odps.sql.mapper.split.size': 16}
o.execute_sql('select * from pyodps_iris') # グローバル構成に基づいてヒントが追加されます。
サードパーティ製パッケージ
DataWorks ノードには、以下のサードパーティ製パッケージがプリインストールされています。次の表に、利用可能なバージョンを示します。
|
パッケージ名 |
Python 2 バージョン |
Python 3 バージョン |
|
requests |
2.11.1 |
2.26.0 |
|
numpy |
1.16.6 |
1.18.1 |
|
pandas |
0.24.2 |
1.0.5 |
|
scipy |
0.19.0 |
1.3.0 |
|
scikit_learn |
0.18.1 |
0.22.1 |
|
pyarrow |
0.16.0 |
2.0.0 |
|
lz4 |
2.1.4 |
3.1.10 |
|
zstandard |
0.14.1 |
0.17.0 |
プリインストールされていないパッケージが必要な場合は、load_resource_package メソッドを使用して MaxCompute リソースからサードパーティ製パッケージをロードできます。まず、pyodps-pack でパッケージアーカイブを作成し、次に load_resource_package を使用してロードしてから、その内容をインポートします。pyodps-pack の使用方法の詳細については、「PyODPS 用のサードパーティ製パッケージの作成」および「PyODPS でのサードパーティ製パッケージの使用」をご参照ください。
Python 2 ノード用のパッケージを作成する場合は、pyodps-pack コマンドに --dwpy27 パラメーターを追加してください。
例:
-
次のコマンドを使用して
ipaddressをパッケージ化します。pyodps-pack -o ipaddress-bundle.tar.gz ipaddress -
ipaddress-bundle.tar.gzをリソースとしてアップロードしてコミットした後、PyODPS 3 ノードで次のようにipaddressパッケージを使用できます。load_resource_package("ipaddress-bundle.tar.gz") import ipaddress
DataWorks は、ダウンロードされるパッケージの合計サイズを 100 MB に制限しています。プリインストール済みのパッケージをバンドルから除外するには、pyodps-pack の --exclude パラメーターを使用します。たとえば、次のコマンドはプリインストール済みの numpy および pandas パッケージを除外します。
pyodps-pack -o bundle.tar.gz --exclude numpy --exclude pandas <YOUR_PACKAGE>
他のアカウント
別のアカウントで MaxCompute にアクセスするには、MaxCompute エントリポイントオブジェクトで as_account メソッドを使用します。これにより、指定されたアカウント用の新しいエントリポイントオブジェクトが作成されます。これは、デフォルトの o インスタンスとは独立しています。
as_account メソッドには PyODPS 0.11.3 以降が必要です。お使いの DataWorks 環境がそれより前のバージョンを実行している場合、このメソッドは使用できません。
操作手順
-
他のユーザーに必要なプロジェクト権限を付与します。詳細については、「付録:別のアカウントへの権限付与」をご参照ください。
-
PyODPS ノードで、
as_accountメソッドを使用してアカウントを切り替え、新しいエントリポイントオブジェクトを作成します。import os # ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が AccessKey ID に設定されていること、 # および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が AccessKey Secret に設定されていることを確認してください。 # AccessKey ID と AccessKey Secret の文字列を直接使用しないことを推奨します。 new_odps = o.as_account( os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'), os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET') ) -
アカウントが切り替わったかどうかを確認します。
コードに次のステートメントを追加して、現在のユーザー情報をクエリします。出力に他のユーザーの UID が表示されれば、そのアカウントで MaxCompute に正常にアクセスできています。
print(new_odps.get_project().current_user)説明new_odpsは、新しいアカウントのエントリポイントオブジェクトを表します。
例
-
テーブルの作成とデータのインポート
-
Iris データセット iris.data をダウンロードし、iris.csv に名前を変更します。
-
pyodps_iris という名前のテーブルを作成し、iris.csv データセットをアップロードします。手順については、「テーブルの作成とデータのアップロード」をご参照ください。
以下はテーブル作成ステートメントです。
CREATE TABLE if not exists pyodps_iris ( sepallength DOUBLE comment 'sepal length (cm)', sepalwidth DOUBLE comment 'sepal width (cm)', petallength DOUBLE comment 'petal length (cm)', petalwidth DOUBLE comment 'petal width (cm)', name STRING comment 'species' );
-
-
必要な権限を付与するために ODPS SQL ノードを作成します。詳細については、「付録:別のアカウントへの権限付与」をご参照ください。
-
アカウントを切り替えるために PyODPS ノードを作成します。以下のコードは例です。詳細については、「PyODPS 3 タスクの開発」をご参照ください。
from odps import ODPS import os import sys # ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数がユーザーの AccessKey ID に設定されていること、 # および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数がユーザーの AccessKey Secret に設定されていることを確認してください。 # AccessKey ID と AccessKey Secret の文字列を直接使用しないことを推奨します。 os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'] = '<AccessKey ID>' os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'] = '<AccessKey Secret>' od = o.as_account(os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'), os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET') ) iris = DataFrame(od.get_table('pyodps_iris')) # 条件付きステートメントを使用して出力を表示します。 with od.execute_sql('select * from pyodps_iris WHERE sepallength > 5 ').open_reader() as reader4: print(reader4.raw) for record in reader4: print(record["sepallength"],record["sepalwidth"],record["petallength"],record["petalwidth"],record["name"]) # 現在のユーザーの UID を表示します。 print(od.get_project().current_user) -
コードを実行し、結果を表示します。
Executing user script with PyODPS 0.11.4.post0 "sepallength","sepalwidth","petallength","petalwidth","name" 5.4,3.9,1.7,0.4,"Iris-setosa" 5.4,3.7,1.5,0.2,"Iris-setosa" 5.8,4.0,1.2,0.2,"Iris-setosa" 5.7,4.4,1.5,0.4,"Iris-setosa" 5.4,3.9,1.3,0.4,"Iris-setosa" 5.1,3.5,1.4,0.3,"Iris-setosa" 5.7,3.8,1.7,0.3,"Iris-setosa" 5.1,3.8,1.5,0.3,"Iris-setosa" 5.4,3.4,1.7,0.2,"Iris-setosa" 5.1,3.7,1.5,0.4,"Iris-setosa" 5.1,3.3,1.7,0.5,"Iris-setosa" 5.2,3.5,1.5,0.2,"Iris-setosa" 5.2,3.4,1.4,0.2,"Iris-setosa" 5.4,3.4,1.5,0.4,"Iris-setosa" 5.2,4.1,1.5,0.1,"Iris-setosa" 5.5,4.2,1.4,0.2,"Iris-setosa" 5.5,3.5,1.3,0.2,"Iris-setosa" 5.1,3.4,1.5,0.2,"Iris-setosa" 5.1,3.8,1.9,0.4,"Iris-setosa" 5.1,3.8,1.6,0.2,"Iris-setosa" 5.3,3.7,1.5,0.2,"Iris-setosa" 7.0,3.2,4.7,1.4,"Iris-versicolor" 6.4,3.2,4.5,1.5,"Iris-versicolor" 6.9,3.1,4.9,1.5,"Iris-versicolor" 5.5,2.3,4.0,1.3,"Iris-versicolor" 6.5,2.8,4.6,1.5,"Iris-versicolor" 5.7,2.8,4.5,1.3,"Iris-versicolor" 6.3,3.3,4.7,1.6,"Iris-versicolor" 6.6,2.9,4.6,1.3,"Iris-versicolor" 5.2,2.7,3.9,1.4,"Iris-versicolor" 5.9,3.0,4.2,1.5,"Iris-versicolor" 6.0,2.2,4.0,1.0,"Iris-versicolor" 6.1,2.9,4.7,1.4,"Iris-versicolor" 5.6,2.9,3.6,1.3,"Iris-versicolor" 6.7,3.1,4.4,1.4,"Iris-versicolor" 5.6,3.0,4.5,1.5,"Iris-versicolor" 5.8,2.7,4.1,1.0,"Iris-versicolor" 6.2,2.2,4.5,1.5,"Iris-versicolor" 5.6,2.5,3.9,1.1,"Iris-versicolor" 5.9,3.2,4.8,1.8,"Iris-versicolor" 6.1,2.8,4.0,1.3,"Iris-versicolor" 6.3,2.5,4.9,1.5,"Iris-versicolor" 6.1,2.8,4.7,1.2,"Iris-versicolor" 6.4,2.9,4.3,1.3,"Iris-versicolor" 6.6,3.0,4.4,1.4,"Iris-versicolor" 6.8,2.8,4.8,1.4,"Iris-versicolor" 6.7,3.0,5.0,1.7,"Iris-versicolor" 6.0,2.9,4.5,1.5,"Iris-versicolor" 5.7,2.6,3.5,1.0,"Iris-versicolor" 5.5,2.4,3.8,1.1,"Iris-versicolor" 5.5,2.4,3.7,1.0,"Iris-versicolor" 5.8,2.7,3.9,1.2,"Iris-versicolor" 6.0,2.7,5.1,1.6,"Iris-versicolor" 5.4,3.0,4.5,1.5,"Iris-versicolor" 6.0,3.4,4.5,1.6,"Iris-versicolor" 6.7,3.1,4.7,1.5,"Iris-versicolor" 6.3,2.3,4.4,1.3,"Iris-versicolor" 5.6,3.0,4.1,1.3,"Iris-versicolor" 5.5,2.5,4.0,1.3,"Iris-versicolor" 5.5,2.6,4.4,1.2,"Iris-versicolor" 6.1,3.0,4.6,1.4,"Iris-versicolor" 5.8,2.6,4.0,1.2,"Iris-versicolor" 5.6,2.7,4.2,1.3,"Iris-versicolor" 5.7,3.0,4.2,1.2,"Iris-versicolor" 5.7,2.9,4.2,1.3,"Iris-versicolor" 6.2,2.9,4.3,1.3,"Iris-versicolor" 5.1,2.5,3.0,1.1,"Iris-versicolor" 5.7,2.8,4.1,1.3,"Iris-versicolor" 6.3,3.3,6.0,2.5,"Iris-virginica" 5.8,2.7,5.1,1.9,"Iris-virginica" 7.1,3.0,5.9,2.1,"Iris-virginica" 6.3,2.9,5.6,1.8,"Iris-virginica" 6.5,3.0,5.8,2.2,"Iris-virginica" 7.6,3.0,6.6,2.1,"Iris-virginica" 7.3,2.9,6.3,1.8,"Iris-virginica" 6.7,2.5,5.8,1.8,"Iris-virginica" 7.2,3.6,6.1,2.5,"Iris-virginica" 6.5,3.2,5.1,2.0,"Iris-virginica" 6.4,2.7,5.3,1.9,"Iris-virginica" 6.8,3.0,5.5,2.1,"Iris-virginica" 5.7,2.5,5.0,2.0,"Iris-virginica" 5.8,2.8,5.1,2.4,"Iris-virginica" 6.4,3.2,5.3,2.3,"Iris-virginica" 6.5,3.0,5.5,1.8,"Iris-virginica" 7.7,3.8,6.7,2.2,"Iris-virginica" 7.7,2.6,6.9,2.3,"Iris-virginica" 6.0,2.2,5.0,1.5,"Iris-virginica" 6.9,3.2,5.7,2.3,"Iris-virginica" 5.6,2.8,4.9,2.0,"Iris-virginica" 7.7,2.8,6.7,2.0,"Iris-virginica" 6.3,2.7,4.9,1.8,"Iris-virginica" 6.7,3.3,5.7,2.1,"Iris-virginica" 7.2,3.2,6.0,1.8,"Iris-virginica" 6.2,2.8,4.8,1.8,"Iris-virginica" 6.1,3.0,4.9,1.8,"Iris-virginica" 6.4,2.8,5.6,2.1,"Iris-virginica" 7.2,3.0,5.8,1.6,"Iris-virginica" 7.4,2.8,6.1,1.9,"Iris-virginica" 7.9,3.8,6.4,2.0,"Iris-virginica" 6.4,2.8,5.6,2.2,"Iris-virginica" 6.3,2.8,5.1,1.5,"Iris-virginica" 6.1,2.6,5.6,1.4,"Iris-virginica" 7.7,3.0,6.1,2.3,"Iris-virginica" 6.3,3.4,5.6,2.4,"Iris-virginica" 6.4,3.1,5.5,1.8,"Iris-virginica" 6.0,3.0,4.8,1.8,"Iris-virginica" 6.9,3.1,5.4,2.1,"Iris-virginica" 6.7,3.1,5.6,2.4,"Iris-virginica" 6.9,3.1,5.1,2.3,"Iris-virginica" 5.8,2.7,5.1,1.9,"Iris-virginica" 6.8,3.2,5.9,2.3,"Iris-virginica" 6.7,3.3,5.7,2.5,"Iris-virginica" 6.7,3.0,5.2,2.3,"Iris-virginica" 6.3,2.5,5.0,1.9,"Iris-virginica" 6.5,3.0,5.2,2.0,"Iris-virginica" 6.2,3.4,5.4,2.3,"Iris-virginica" 5.9,3.0,5.1,1.8,"Iris-virginica" <User 139xxxxxxxxxxxxx>
トラブルシューティング
実行中にコードが応答しなくなり、出力が生成されない場合は、コードの先頭に次のコメントを追加できます。これにより、DataWorks は 30 秒ごとにすべてのスレッドのスタックトレースを出力します。
# -*- dump_traceback: true -*-
この方法は、PyODPS 3 ノードのバージョン 0.11.4.1 以降に適用されます。
PyODPS のバージョン
現在の PyODPS のバージョンは、Python コードを実行するか、任意の PyODPS タスクのランタイムログを表示することで確認できます。
-
PyODPS ノードで次のコードを実行します。
# 次のコードを入力します: import odps; print(odps.__version__) # サンプル結果 0.11.2.3 -
PyODPS タスクのランタイムログを確認します。バージョンは、この例のようにログ出力に表示されます。
2023-07-26 15:39:53 INFO SKYNET_DAGTYPE=100: 2023-07-26 15:39:53 INFO SKYNET_SYSTEM_ENV=dev: 2023-07-26 15:39:53 INFO SKYNET_GMTDATE=20230726: 2023-07-26 15:39:53 INFO SKYNET_BIZDATE=20230726: 2023-07-26 15:39:53 INFO SKYNET_ENVTYPE=1: 2023-07-26 15:39:53 INFO SKYNET_PROJECTID=342277: 2023-07-26 15:39:53 INFO SKYNET_BUSINESS_ID=10756717: 2023-07-26 15:39:53 INFO SKYNET_ARGS_ENABLE=true: 2023-07-26 15:39:53 INFO SKYNET_ACCOUNT_ID=xxx 2023-07-26 15:39:53 INFO TASK_SOURCE=dataworks_datastudio: 2023-07-26 15:39:53 INFO SKYNET_REGION=xxx: 2023-07-26 15:39:53 INFO LINK_FILE_ID=503440413: 2023-07-26 15:39:53 INFO TASK_PLUGIN_NAME=pyodps: 2023-07-26 15:39:53 INFO ALISA_UNIQUEKEY=xxx 2023-07-26 15:39:53 INFO ALISA_TASK_ID=T3_xxx 2023-07-26 15:39:53 INFO ALISA_TASK_EXEC_TARGET=group_599314507759873_dev: 2023-07-26 15:39:53 INFO ALISA_TASK_PRIORITY=0: 2023-07-26 15:39:53 INFO --- Invoking Shell command line now --- 2023-07-26 15:39:53 INFO ============================================================ Executing user script with PyODPS 0.11.4.post0 "sepallength","sepalwidth","petallength","petalwidth","name" 5.4,3.9,1.7,0.4,"Iris-setosa" 5.4,3.7,1.5,0.2,"Iris-setosa" 5.8,4.0,1.2,0.2,"Iris-setosa"
付録:ユーザーへの権限付与
別の Alibaba Cloud ユーザー (RAM ユーザーではない) が DataWorks ワークスペース内のプロジェクトやテーブルにアクセスできるようにするには、ODPS SQL ノードを作成し、次の権限付与コマンドを実行する必要があります。ODPS SQL ノードの作成方法の詳細については、「ODPS SQL ノードの作成」をご参照ください。権限の詳細については、「ユーザーと権限」をご参照ください。
-- 別の Alibaba Cloud アカウントユーザーをプロジェクトレベルで追加します。
add user ALIYUN$<account_name>;
-- プロジェクトに対する CreateInstance 権限を付与します。
grant CreateInstance on project <project_name> to USER ALIYUN$<account_name>;
-- テーブルに対する Describe および Select 権限を付与します。
grant Describe, Select on table <table_name> to USER ALIYUN$<account_name>;
-- 権限付与の結果を表示します。
show grants for ALIYUN$<account_name>;
以下は、show grants for ALIYUN$<account_name>; を実行した際の権限付与結果のサンプルです。
Authorization Type: ACL
[user/ALIYUN$:xxx.com]
A projects/mc_xxx : CreateInstance
A projects/mc_xxx/tables/pyodps_xxx : Describe | Select
付録:サンプルデータ
この トピック の例に従うには、まずステップ 1: テーブルを作成してデータをインポートするの手順に従って pyodps_iris テーブルを作成し、データを入力してください。このテーブルは基本操作のデモに使用します。
関連トピック
Operating history 機能を使用して、過去 3 日間に DataStudio で実行されたすべてのタスクの履歴を表示します。このビューから、実行中のタスクを停止したり、タスクレコードから SQL ステートメントを一時ファイルとして保存したりできます。詳細については、「操作履歴」をご参照ください。