本文使用的csv文件从这个链接里下载:
http://grouplens.org/datasets/movielens/latest/

SAP HANA XS) enables you to create database schema, tables, views, and sequences as design-time files in the repository.

这个练习里,我们将会使用SAP HANA Extended Application Services (XS)提供的database schema,tables和views来实现数据导入的效果。

The HDBtable syntax is a collective term which includes the different configuration schema for each of the various design-time data artifacts, for example: schema (.hdbschema), sequence (.hdbsequence), table (.hdbtable), and view (.hdbview).

This is why we will be using the SAP HANA HDBtable syntax including Core Data Service (CDS) artifacts instead, which only requires the SAP HANA Web-based Development Workbench available with any SAP HANA MDC on the SAP Cloud Platform. All the objects will be created as design-time and will allow us to adapt the structure easily without reloading the data.

首先在SAP Cloud Platform Neo环境的HANA MDC实例里,打开HANA Web-based development workbench,切换到Catalog视图:

点击SQL,使用SQL语句创建一个新的user: MOVIELENS_USER

DROP USER MOVIELENS_USER CASCADE;
CREATE USER MOVIELENS_USER PASSWORD Welcome18Welcome18 NO FORCE_FIRST_PASSWORD_CHANGE;
ALTER USER  MOVIELENS_USER DISABLE PASSWORD LIFETIME;call _SYS_REPO.GRANT_ACTIVATED_ROLE ('sap.hana.ide.roles::CatalogDeveloper'     ,'MOVIELENS_USER');
call _SYS_REPO.GRANT_ACTIVATED_ROLE ('sap.hana.ide.roles::Developer'            ,'MOVIELENS_USER');
call _SYS_REPO.GRANT_ACTIVATED_ROLE ('sap.hana.ide.roles::EditorDeveloper'      ,'MOVIELENS_USER');
call _SYS_REPO.GRANT_ACTIVATED_ROLE ('sap.hana.xs.ide.roles::CatalogDeveloper'  ,'MOVIELENS_USER');
call _SYS_REPO.GRANT_ACTIVATED_ROLE ('sap.hana.xs.ide.roles::Developer'         ,'MOVIELENS_USER');
call _SYS_REPO.GRANT_ACTIVATED_ROLE ('sap.hana.xs.ide.roles::EditorDeveloper'   ,'MOVIELENS_USER');GRANT EXECUTE on _SYS_REPO.GRANT_ACTIVATED_ROLE                         TO MOVIELENS_USER WITH GRANT OPTION;
GRANT EXECUTE on _SYS_REPO.GRANT_SCHEMA_PRIVILEGE_ON_ACTIVATED_CONTENT  TO MOVIELENS_USER WITH GRANT OPTION;
GRANT EXECUTE on _SYS_REPO.GRANT_PRIVILEGE_ON_ACTIVATED_CONTENT         TO MOVIELENS_USER WITH GRANT OPTION;
GRANT EXECUTE on _SYS_REPO.REVOKE_ACTIVATED_ROLE                        TO MOVIELENS_USER WITH GRANT OPTION;
GRANT EXECUTE on _SYS_REPO.REVOKE_SCHEMA_PRIVILEGE_ON_ACTIVATED_CONTENT TO MOVIELENS_USER WITH GRANT OPTION;
GRANT EXECUTE on _SYS_REPO.REVOKE_PRIVILEGE_ON_ACTIVATED_CONTENT        TO MOVIELENS_USER WITH GRANT OPTION;GRANT "CREATE SCHEMA" TO MOVIELENS_USER;GRANT REPO.READ on "public" TO MOVIELENS_USER;
GRANT REPO.MAINTAIN_IMPORTED_PACKAGES on "public" TO MOVIELENS_USER;
GRANT REPO.MAINTAIN_NATIVE_PACKAGES   on "public" TO MOVIELENS_USER;GRANT REPO.EDIT_NATIVE_OBJECTS   on "public" TO MOVIELENS_USER;
GRANT REPO.EDIT_IMPORTED_OBJECTS on "public" TO MOVIELENS_USER;GRANT REPO.ACTIVATE_NATIVE_OBJECTS   on "public" TO MOVIELENS_USER;
GRANT REPO.ACTIVATE_IMPORTED_OBJECTS on "public" TO MOVIELENS_USER;

执行后,该用户创建成功:

注销SYSTEM用户,使用新创建的用户登录:


切换到Editor视图:

在content节点下,右键菜单,新建一个Application:


Package维护成public.aa.movielens:


新建三个package,分别为data, hdb和service:



将之前链接里提供的csv文件导入data package内:

HANA schema是存放HANA数据库对象诸如表,视图,存储过程等的容器。

新建一个.hdbschema文件,内容如下:

schema_name=“MOVIELENS”:

再创建一个user.hdbrole文件:

内容如下:

role public.aa.movielens.hdb::user extends catalog role "sap.pa.apl.base.roles::APL_EXECUTE", "AFLPM_CREATOR_ERASER_EXECUTE", "AFL__SYS_AFL_AFLPAL_EXECUTE"
{schema public.aa.movielens.hdb:MOVIELENS.hdbschema: SELECT, EXECUTE, CREATE ANY;
}

这个role定义了我们创建的这个应用工作时需要的权限:


最后创建CDS artifacts:

新建一个data.hdbdd文件:

namespace public.aa.movielens.hdb;@Schema : 'MOVIELENS'
context "data"  {@Catalog.tableType : #COLUMNEntity LINKS {key MOVIEID : Integer;IMDBID      : Integer;TMDBID      : Integer;};@Catalog.tableType : #COLUMNEntity MOVIES {key MOVIEID  : Integer;TITLE        : String(255);GENRES       : String(255);};@Catalog.tableType : #COLUMNEntity RATINGS {key USERID   : Integer;key MOVIEID  : Integer;RATING       : hana.SMALLDECIMAL;TIMESTAMP    : Integer;};@Catalog.tableType : #COLUMNEntity TAGS {key USERID  : Integer;key MOVIEID : Integer;key TAG     : String(255);TIMESTAMP   : Integer;};
};

使用下列的SQL语句将新创建的user role分配给用户MOVIELENS_USER:

call _SYS_REPO.GRANT_ACTIVATED_ROLE (‘public.aa.movielens.hdb::user’,‘MOVIELENS_USER’);

创建一个table-import配置文件,在里面指定存储于csv文件里的数据,按照怎样的逻辑写入HANA MDC的持久化对象,比如数据库表里。

hdb package里创建一个新的文件data.hdbti :

import = [{table  = "public.aa.movielens.hdb::data.LINKS";schema = "MOVIELENS" ;file = "public.aa.movielens.data:links.csv";header = true;delimField = ",";delimEnclosing= "\"";},{table  = "public.aa.movielens.hdb::data.MOVIES";schema = "MOVIELENS" ;file = "public.aa.movielens.data:movies.csv";header = true;delimField = ",";delimEnclosing = "\"";},{table  = "public.aa.movielens.hdb::data.RATINGS";schema = "MOVIELENS" ;file = "public.aa.movielens.data:ratings.csv";header = true;delimField = ",";delimEnclosing= "\"";},{table  = "public.aa.movielens.hdb::data.TAGS";schema = "MOVIELENS" ;file = "public.aa.movielens.data:tags.csv";header = true;delimField = ",";delimEnclosing= "\"";}
];

此时执行下列SQL语句,就可以成功从HANA MDC实例的数据库表里读取源自csv文件里的数据了:

select 'links'   as "table name", count(1) as "row count" from "MOVIELENS"."public.aa.movielens.hdb::data.LINKS"
union all
select 'movies'  as "table name", count(1) as "row count" from "MOVIELENS"."public.aa.movielens.hdb::data.MOVIES"
union all
select 'ratings' as "table name", count(1) as "row count" from "MOVIELENS"."public.aa.movielens.hdb::data.RATINGS"
union all
select 'tags'    as "table name", count(1) as "row count" from "MOVIELENS"."public.aa.movielens.hdb::data.TAGS";

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

如何将csv包含的数据导入SAP Cloud Platform HANA MDC里相关推荐

  1. 如何给SAP Cloud Platform的CloudFoundry环境里的subaccount添加quota

    我在SAP Cloud Platform的CloudFoundry里创建了一个space,但是没有任何memory和route的quota: 结果部署应用时,遇到了如下的错误消息: 解决方案:在ent ...

  2. 【转】SAP Cloud Platform平台下,ABAP人员的出路在哪里

    之前在网上看到一篇关于标题的文章,写的很简单,却说出了很多ABAPer的心声,如今技术迭代越来越快,一招鲜吃遍天下的招式已经过去了,那么在新平台到来之后,大部分ABAPer人员的出路又在哪里呢,又要从 ...

  3. SAP Cloud Platform Neo环境的权限管理

    SAP云平台的帮助文档:https://help.sap.com/viewer/ea72206b834e4ace9cd834feed6c0e09/Cloud/en-US/a1ab5c4cc117455 ...

  4. Hyperledger Fabric on SAP Cloud Platform(SAP云平台上的超级账本简介)

    今天的文章来自Wen Aviva, 坐Jerry面对面的程序媛. Jerry在之前的公众号文章<在SAP UI中使用纯JavaScript显示产品主数据的3D模型视图>已经介绍过Aviva ...

  5. 部署在SAP Cloud Platform CloudFoundry环境的应用如何消费SAP Leonardo机器学习API

    Jerry的前一篇文章 如何在Web应用里消费SAP Leonardo的机器学习API 里介绍的例子是Neo测试环境的Web应用消费sandbox版本的机器学习API,url如下: https://s ...

  6. 什么是SAP Cloud Platform(SAP云平台) ?

    1. 引言 SAP Cloud Platform (SCP) 是SAP目前主推的一个发展方向,从2012年SAP HANA Cloud Portfolio到后来的SAP HANA Cloud Plat ...

  7. SAP Cloud Platform Identity Authentication service

    subaccount和Identity Authentication tenant是一一对应关系: 错误消息: No Identity Authentication tenants found for ...

  8. Trial accounts of SAP Cloud Platform do not provide an Identity Authentication tenant

    Prerequisites You have an Identity Authentication tenant. Restriction Trial accounts of SAP Cloud Pl ...

  9. SAP Cloud Platform和S/4HANA的互联

    通过两个系统互相连接互相信任的配置,使得: (1) SAP Cloud Platform subaccount will get a destination which holds data for ...

最新文章

  1. 机房收费系统总结【1】-整体流程
  2. 制作最小Linux系统并且让其在新的虚拟机上运行
  3. 45套精美的 ( Android, iPhone, iPad ) 手机界面设计素材和线框图设计工具
  4. Mr.J-- HTTP学习笔记(五)-- Web服务器
  5. mybais逆向工程快速生成实体和基本xml
  6. element tree树组件default-expand-all属性设置默认展开的节点
  7. 怎样编写和执行Js文件
  8. iOS定位服务CoreLocation
  9. 给做技术的换一道菜尝尝:一月冲皇冠?凶残级淘宝店主,无法阻挡的爆款名城!...
  10. timesten mysql_timesten:TT0802错误
  11. AUTOCAD——线宽设置
  12. 涩会:大学学历——办理居住证的具体流程(深圳)
  13. The Journal of Neuroscience: 珠心算训练有助于提高儿童的视觉空间工作记忆
  14. 五招防止QQ密码被盗
  15. L9954LXP_特殊功能,车门模块驱动器
  16. 风控决策引擎——决策流路径规划
  17. uni-app学习(九):computed
  18. php+羊,PHP解决羊生羊的问题。
  19. 微信中无法直接下载秒借类金融贷款APP的解决方案
  20. 事务码ABAVN-资产卡片报废-BAPI_ASSET_RETIREMENT_POST

热门文章

  1. 图解Android - Android GUI 系统 (2) - 窗口管理 (View, Canvas, Window Manager)
  2. MFC添加自定义消息
  3. web cache缓存设备的需求与讨论 ( Http://CACHE.MARASYSTEMS.ASIA )
  4. MySQL 7种日志类型 详解
  5. Windows2003使用命令行设置共享权限与安全权限心得
  6. win7下更改为achi硬盘模式
  7. Objective-C ,ios,iphone开发基础:picker控件详解与使用,(实现省市的二级联动)
  8. 解决 【xshell 5 不能使用退格键和Delete建】的问题
  9. 利用CGLib实现动态代理实现Spring的AOP
  10. 横屏展示 fragment 监听面积并非全屏,部分面积监听失效