本文使用的csv文件从这个链接里下载: http:grouplens。orgdatasetsmovielenslatest SAPHANAXS)enablesyoutocreatedatabaseschema,tables,views,andsequencesasdesigntimefilesintherepository。 这个练习里,我们将会使用SAPHANAExtendedApplicationServices(XS)提供的databaseschema,tables和views来实现数据导入的效果。 TheHDBtablesyntaxisacollectivetermwhichincludesthedifferentconfigurationschemaforeachofthevariousdesigntimedataartifacts,forexample:schema(。hdbschema),sequence(。hdbsequence),table(。hdbtable),andview(。hdbview)。 ThisiswhywewillbeusingtheSAPHANAHDBtablesyntaxincludingCoreDataService(CDS)artifactsinstead,whichonlyrequirestheSAPHANAWebbasedDevelopmentWorkbenchavailablewithanySAPHANAMDContheSAPCloudPlatform。Alltheobjectswillbecreatedasdesigntimeandwillallowustoadaptthestructureeasilywithoutreloadingthedata。 首先在SAPCloudPlatformNeo环境的HANAMDC实例里,打开HANAWebbaseddevelopmentworkbench,切换到Catalog视图: 点击SQL,使用SQL语句创建一个新的user:MOVIELENSUSER DROPUSERMOVIELENSUSERCASCADE;CREATEUSERMOVIELENSUSERPASSWORDWelcome18Welcome18NOFORCEFIRSTPASSWORDCHANGE;ALTERUSERMOVIELENSUSERDISABLEPASSWORDLIFETIME;callSYSREPO。GRANTACTIVATEDROLE(sap。hana。ide。roles::CatalogD,MOVIELENSUSER);callSYSREPO。GRANTACTIVATEDROLE(sap。hana。ide。roles::D,MOVIELENSUSER);callSYSREPO。GRANTACTIVATEDROLE(sap。hana。ide。roles::EditorD,MOVIELENSUSER);callSYSREPO。GRANTACTIVATEDROLE(sap。hana。xs。ide。roles::CatalogD,MOVIELENSUSER);callSYSREPO。GRANTACTIVATEDROLE(sap。hana。xs。ide。roles::D,MOVIELENSUSER);callSYSREPO。GRANTACTIVATEDROLE(sap。hana。xs。ide。roles::EditorD,MOVIELENSUSER);GRANTEXECUTEonSYSREPO。GRANTACTIVATEDROLETOMOVIELENSUSERWITHGRANTOPTION;GRANTEXECUTEonSYSREPO。GRANTSCHEMAPRIVILEGEONACTIVATEDCONTENTTOMOVIELENSUSERWITHGRANTOPTION;GRANTEXECUTEonSYSREPO。GRANTPRIVILEGEONACTIVATEDCONTENTTOMOVIELENSUSERWITHGRANTOPTION;GRANTEXECUTEonSYSREPO。REVOKEACTIVATEDROLETOMOVIELENSUSERWITHGRANTOPTION;GRANTEXECUTEonSYSREPO。REVOKESCHEMAPRIVILEGEONACTIVATEDCONTENTTOMOVIELENSUSERWITHGRANTOPTION;GRANTEXECUTEonSYSREPO。REVOKEPRIVILEGEONACTIVATEDCONTENTTOMOVIELENSUSERWITHGRANTOPTION;GRANTCREATESCHEMATOMOVIELENSUSER;GRANTREPO。READTOMOVIELENSUSER;GRANTREPO。MAINTAINIMPORTEDPACKAGESTOMOVIELENSUSER;GRANTREPO。MAINTAINNATIVEPACKAGESTOMOVIELENSUSER;GRANTREPO。EDITNATIVEOBJECTSTOMOVIELENSUSER;GRANTREPO。EDITIMPORTEDOBJECTSTOMOVIELENSUSER;GRANTREPO。ACTIVATENATIVEOBJECTSTOMOVIELENSUSER;GRANTREPO。ACTIVATEIMPORTEDOBJECTSTOMOVIELENSUSER; 执行后,该用户创建成功: 注销SYSTEM用户,使用新创建的用户登录: 切换到Editor视图: 在content节点下,右键菜单,新建一个Application: Package维护成public。aa。movielens: 新建三个package,分别为data,hdb和service: 将之前链接里提供的csv文件导入datapackage内: HANAschema是存放HANA数据库对象诸如表,视图,存储过程等的容器。 新建一个。hdbschema文件,内容如下: MOVIELENS: 再创建一个user。hdbrole文件: 内容如下: rolepublic。aa。movielens。hdb::sap。pa。apl。base。roles::APLEXECUTE,AFLPMCREATORERASEREXECUTE,AFLSYSAFLAFLPALEXECUTE{schemapublic。aa。movielens。hdb:MOVIELENS。hdbschema:SELECT,EXECUTE,CREATEANY;} 这个role定义了我们创建的这个应用工作时需要的权限: 最后创建CDSartifacts: 新建一个data。hdbdd文件: namespacepublic。aa。movielens。Schema:MOVIELENS{Catalog。tableType:COLUMNEntityLINKS{keyMOVIEID:IIMDBID:ITMDBID:I};Catalog。tableType:COLUMNEntityMOVIES{keyMOVIEID:ITITLE:String(255);GENRES:String(255);};Catalog。tableType:COLUMNEntityRATINGS{keyUSERID:IkeyMOVIEID:IRATING:hana。SMALLDECIMAL;TIMESTAMP:I};Catalog。tableType:COLUMNEntityTAGS{keyUSERID:IkeyMOVIEID:IkeyTAG:String(255);TIMESTAMP:I};}; 使用下列的SQL语句将新创建的userrole分配给用户MOVIELENSUSER: callSYSREPO。GRANTACTIVATEDROLE(public。aa。movielens。hdb::,MOVIELENSUSER); 创建一个tableimport配置文件,在里面指定存储于csv文件里的数据,按照怎样的逻辑写入HANAMDC的持久化对象,比如数据库表里。 hdbpackage里创建一个新的文件data。hdbti: import〔{public。aa。movielens。hdb::data。LINKS;MOVIELENS;public。aa。movielens。data:links。;delimF,;delimE;},{public。aa。movielens。hdb::data。MOVIES;MOVIELENS;public。aa。movielens。data:movies。;delimF,;delimE;},{public。aa。movielens。hdb::data。RATINGS;MOVIELENS;public。aa。movielens。data:ratings。;delimF,;delimE;},{public。aa。movielens。hdb::data。TAGS;MOVIELENS;public。aa。movielens。data:tags。;delimF,;delimE;}〕; 此时执行下列SQL语句,就可以成功从HANAMDC实例的数据库表里读取源自csv文件里的数据了: ,count(1)MOVIELENS。public。aa。movielens。hdb::data。LINKS,count(1)MOVIELENS。public。aa。movielens。hdb::data。MOVIES,count(1)MOVIELENS。public。aa。movielens。hdb::data。RATINGS,count(1)MOVIELENS。public。aa。movielens。hdb::data。TAGS; 要获取更多Jerry的原创文章,请关注公众号汪子熙: