ここでは、プロジェクトスペースのパッケージ作成者とパッケージユーザーの操作について説明します。

パッケージの使用方法

パッケージの使用には、パッケージ作成者とパッケージユーザーの 2 人が関与します。
  • パッケージ作成者は、共有するリソースと、共有するリソースへのアクセス権限を提供します。 また、パッケージユーザーに共有リソースのインストールと使用を許可します。
  • パッケージユーザーはパッケージを使用します。 パッケージが公開された後、ユーザーはプロジェクト間でリソースに直接アクセスできます。

以下にパッケージ作成者とパッケージユーザーの操作を説明します。

パッケージ作成者

  • パッケージの作成
    create package <pkgname>;
    • プロジェクト所有者だけがパッケージの作成権限を持っています。
    • パッケージの名前は 128 文字を超えることはできません。
  • 共有するリソースをパッケージに追加
        Add project_object to package package_name [with privileges] -- add objects to package
        Remove project_object from package package_name; -- remove object from package
        project_object ::= table table_name |
                       instance inst_name |
                       function func_name |
                       resource res_name
        privileges ::= action_item1, action_item2, ...
    • 現在、プロジェクトは、サポート対象外のオブジェクトタイプです。 したがって、パッケージを使用して、他のプロジェクトのオブジェクトを作成することはできません。
    • オブジェクトとオブジェクトに対する操作権限は、同時にパッケージに追加されます。 privileges オプションを指定しても、操作権限を指定していない場合、デフォルトは読み取り専用、つまり ead/describe/select です。 オブジェクトと権限は、1 つのまとまりとして扱われ、追加した後に更新することはできません。 必要に応じて、削除と再追加のみ可能です。
    • オブジェクトがパッケージに追加されると、そのオブジェクトはスナップショットとしてパッケージ化されません。そのため、後でオブジェクトデータが変更された場合、パッケージを介してオブジェクトにアクセスすると、オブジェクトの最新データにアクセスすることになります。

    パッケージに対してさまざまな操作を実行するには、次のコマンドを使用します。

  • 他のプロジェクトにパッケージの使用を許可
    allow project <prjName> to install package <pkgName> [using label <num>]
  • 他のプロジェクトでパッケージを使用する権限の取り消し
    disallow project <prjName> to install package <pkgName>
  • パッケージの削除
    Delete package <pkgname>;
  • 既に作成し、インストール済みのパッケージの一覧表示
    Show packages;
  • パッケージの詳細の表示
    Describe package <pkgname>;

パッケージユーザー

  • パッケージのインストール
    Install package <pkgname>;
    パッケージのインストールの場合、pkgName の形式は <projectName>.<packageName> です。
    この操作の権限を持つのは、プロジェクト所有者だけです。
  • パッケージのアンインストール
    Uninstall package <pkgname>;

    パッケージのインストールの場合、pkgName の形式は <projectName>.<packageName>.<projectName>.<packageName> です。

  • パッケージの表示
        Show packages;
        View the list of packages already created and installed
        Describe package <pkgname>;
        View details of package
    
  • クライアントプロジェクトから、このプロジェクトの他のメンバーまたはロールにパッケージへのアクセス権限を付与

    インストールされたパッケージは、独立したタイプの MaxCompute オブジェクトです。 パッケージ内のリソース (他のプロジェクトで共有されているリソース) にアクセスするには、パッケージの読み取り権限が必要です。

    読み取り権限がない場合は、プロジェクトの所有者か管理者に権限を申請する必要があります。 プロジェクトの所有者または管理者は、ACL 権限付与またはポリシー権限付与を介して権限を付与できます。

    パッケージをユーザーまたはロールに権限付与します。

    grant actions on package <pkgName> to user <username>;
    grant actions on package <pkgName> to role <role_name>;
    権限付与後、ユーザーはこのプロジェクト内でのみパッケージ内のオブジェクトにアクセスできます。
    たとえば、次の ACL 権限付与では、クラウドアカウントユーザー odps_test@aliyun.com がパッケージ内のリソースにアクセスできます。
        use prj2;
        install package prj1.testpkg;
        grant read on package prj1.testpackage to user aliyun$odps_test@aliyun.com;
    ]

    または、ロール role_dev のすべてのメンバーにパッケージ内のリソースへのアクセスを許可します。

    use prj2;
        install package prj1.testpkg;
        grant read on package prj1.testpackage to role role_dev;

Jack は prj1 の管理者です。 John は prj2 の管理者です。 ビジネスニーズに対処するため、Jack は prj1 のリソース (datamining.jar や sampletable など) を John の prj2 と共有したいと考えています。 prj2 のユーザー Bob がこれらのリソースにアクセスする必要がある場合、prj2 の管理者は、Jack の関与なしに、ACL 管理者またはポリシー権限付与を介して Bob に独立した権限を付与できます。

手順:
  1. Prj1 の管理者 Jack は、リソースパッケージを prj1 に作成します。
        Use prj1;
        Create package datamicing; -- creating a package
        Add Resource dating. jar to package dating;-add resource to package
        Add Table sampletable to package dating; -- adding table to package
        Allow project prm9 to install package dating; -- sharing package to Project Space prm9
  2. Prj2 の管理者 Bob は、パッケージを prj2 にインストールします。
        use prj2;
        install package prj1.datamining; -- installs a package
        describe package prj1.datamining; -- view a list of resources in the package
  3. Bob はパッケージへ独立した権限を付与します。
        use prj2;
        grant Read on package prj1.datamining to user aliyun$bob@aliyun.com; -- authorization of Bob to use package via ACL