Package的使用方法

Package的使用涉及到兩個主體:Package建立者和Package使用者。
  • Package建立者項目空間是資源提供方,它將需要分享的資源及其存取權限進行打包,然後許可Package使用方來安裝使用。
  • Package使用者項目空間是資源使用方,它在安裝資源提供方發布的Package之後,便可以直接跨項目空間訪問資源。

下面分別介紹Package建立者和Package使用者所涉及的操作。

Package建立者

  • 建立Package
    create package <pkgname>;
    说明
    • 僅project的owner有許可權進行該操作。
    • 目前建立的package名稱不能超過128個字元。
  • 將分享的資源添加到Package
        add project_object to package package_name [with privileges privileges];--將對象添加到Package
        remove project_object from package package_name;--將對象從Package移除
        project_object ::= table table_name |
                       instance inst_name |
                       function func_name |
                       resource res_name
        privileges ::= action_item1, action_item2, ...
    说明
    • 目前支援的物件類型不包括Project類型,也就是不允許通過Package在其他Project中創對象。
    • 添加到Package中的不僅僅是對象本身,還包括相應的操作許可權。當沒有通過[with privileges privileges]來指定操作許可權時,預設為唯讀許可權,即Read/Describe/Select。“對象及其許可權”被看作一個整體,添加後不可被更新。若有需要,只能刪除和重新添加。
  • 許可其他項目空間使用Package
    allow project <prjname> to install package <pkgname> [using label <number>];
  • 撤銷其他項目空間使用Package的許可
    disallow project <prjname> to install package <pkgname>;
  • 刪除Package
    delete package <pkgname>;
  • 查看已建立和已安裝的Package列表
    show packages;
  • 查看Package詳細資料
    describe package <pkgname>;

Package使用者

  • 安裝Package
    install package <pkgname>;
    對於安裝Package來說,要求pkgName的格式為: <projectName>.<packageName>
    说明 僅project的Owner有許可權進行該操作。
  • 卸載Package
    uninstall package <pkgname>;

    對於卸載Package來說,要求pkgName的格式為:<projectName>.<packageName>

  • 查看Package
        show packages;
        --查看已建立和已安裝的package列表
        describe package <pkgname>;
        --查看package詳細資料
    
  • 使用方項目給本項目其他成員授權訪問Package

    被安裝的Package是一種獨立的MaxCompute物件類型。若要訪問Package裡的資源(即其他項目空間分享給您的資源),您必須擁有對該Package的Read許可權。

    如果要求者沒有Read許可權,則需要向ProjectOwner或Admin申請。ProjectOwner或Admin可以通過ACL授權機制來完成。

    比如,如下的ACL授權允許雲帳號使用者LIYUN$odps_test@aliyun.com訪問Package裡的資源:
        use prj2;
        install package prj1.testpkg;
        grant read on package prj1.testpackage to user aliyun$odps_test@aliyun.com;

情境樣本

情境描述:Jack是項目空間prj1的管理員。John是項目空間prj2的管理員。由於業務需要, Jack希望將其項目空間prj1中的某些資源(比如datamining.jar及sampletable表)分享給John的項目空間prj2。 如果項目空間prj2的使用者Bob需要訪問這些資源,那麼管理員John可以通過ACL給Bob自主授權,無需Jack參與。

操作步驟:
  1. 項目空間prj1的管理員Jack在項目空間prj1中建立資源套件(package)。
        use prj1;
        create package datamining; --建立一個package
        add resource datamining.jar to package datamining; --添加資源到package
        add table sampletable to package datamining; --添加table到package
        allow project prj2 to install package datamining; --將package分享給項目空間prj2
  2. 項目空間prj2管理員Jhon在項目空間prj2中安裝package。
        use prj2;
        install package prj1.datamining; --安裝一個package
        describe package prj1.datamining; --查看package中的資源清單
  3. Jhon對package給Bob進行自主授權。
        use prj2;
        grant Read on package prj1.datamining to user aliyun$bob@aliyun.com; --通過ACL授權Bob使用package