2.3.4 创建表和上传数据
1. HANA Schema
用户可以直接在SQL Console界面中输入以下SQL代码,从而创建一个名为TEST的Schema对象。如果不指定所有者,创建的Schema的所有者就是当前执行这个SQL的用户。
语法如下:
CREATE SCHEMA <schema_name> [OWNED BY <user_name>]
例子如下:
CREATE SCHEMA TEST OWNED BY SYSTEM
在创建好TEST之后,启动SAP HANA工作台,使用SYSTEM用户登录到SAP HANA系统,然后展开HANA系统,打开Catalog文件夹,TEST就出现在用户可以访问的列表中了。除了上述这种命令行方式之外,也可以通过可视化向导创建新用户(参考2.4.1节)的方式来创建一个Schema对象。
在SAP HANA工作台中展开Security文件夹,右击,创建一个新用户,在最后激活这个用户时,系统会创建一个和用户同名的Schema。该用户就是这个同名Schema的拥有者。可以对这个Schema进行任何操作,对这个Schema下的内容进行管理。
如图2-16所示,假如使用SYSTEM登录到系统,然后创建DEMO、DEMO_2、HANA_TPCH三个新用户,系统就会自动在Catalog文件下创建出3个同名的Schema对象。
图2-16 SAP HANA系统中的Schema及展开后的内容
展开Schema对象,用户可以在其中创建各种数据对象,例如,列视图、数据库视图、索引、表类型、存储过程、数据库表、触发器、序列对象等。除了用户自己创建的新Schema以外,系统也会默认自带一些Schema。表2-2对这些系统默认的Schema进行了简要介绍。
表2-2 系统默认自带的一些Schema
注意事项:
因为前面提及了SQL Console,这意味着用户可以在SQL Console中执行SQLScript脚本,如CREATE COLUMN TABLE、CREATE SCHEMA等操作。既然可以创建对象,这就引出了一个创建出来的对象的拥有者的问题,因此,这里做一些补充说明。
所有通过SQL Console创建的数据库对象,其拥有者是当前执行这个SQL命令的用户。如果其他的用户希望访问这个数据库对象,只能让这个对象的拥有者赋予其操作的权限,否则,即使是SYSTEM也无法访问。
所有在XS项目中创建数据库对象的定义,激活后产生的数据库对象的拥有者是_SYS_REPO这个系统用户。
2. HANA Table
前面我们使用SYSTEM账户登录了HANA系统,并且创建了DEMO用户,及其同名的Schema,接下来,就可以在Schema中创建数据库表了。
(1)使用图形界面
在SAP HANA工作台中,找到可以使用的Schema对象,在该Schema对象上右击,在弹出的快捷菜单中选择“New Table”命令,如图2-17所示。
图2-17 创建新数据库表
接下来,会在右边面板中出现图2-18所示的界面。用户可以在这个数据库表的定义面板中实现以下功能:
- 定义新创建的数据库表的名称。
- 定义数据表的存储类型,即是行存储还是列存储。
- 定义数据库表所包含的字段及其SQL数据类型。
- 定义额外的索引对象。
图2-18 数据库表定义
表2-3列出了在SAP HANA中可以使用的SQL数据类型,在创建数据库表时可以参考进行引用。
表2-3 SQL数据类型
(2)使用SQL命令行
直接在SQL Console中输入创建数据库表的命令,就可以得到和上一种方法相同的结果。
语法如下:
CREATE [<table_type>] TABLE <table_name>...
举例如下:
CREATE COLUMN TABLE M_CUSTOMER_INFO ( CUSTOMER_ID VARCHAR(8) PRIMARY KEY, F_NAME VARCHAR(16), L_NAME VARCHAR(16) );
如果需要参考源Oracle数据库系统的表,则可以将数据库表的DDL定义信息复制出来,粘贴到SAP HANA工作台的SQL Console中,稍加调整就可以执行。
提示信息:
如果Oracle数据库中有大量表需要迁移到SAP HANA中,可以使用SAP Data Services或者DS Workbench工具,前提是设定好目标表的数据类型(可以和Oracle系统的中源表类型不一致)。在运行该ETL作业时,Data Services会自动在SAP HANA中创建相同SQL数据类型的数据库表。
3. 导入数据
SAP HANA工作台中提供了Import功能,使用Import向导可以将离线文件导入已有的数据库表中。下面将演示如何使用Import向导从本地计算机将离线CSV文件录入SAP HANA系统的某个数据库表中。
具体步骤如下:首先在SAP HANA工作台中选择“File→Import”命令,打开如图2-19所示的界面,此时选择“Data from Local File”选项,然后单击“Next”按钮,进入下一步。
图2-19 选择从本地加载数据
在“Target System”向导界面中选择一个目标系统,以及以哪个用户来执行此次Import操作。
如图2-20所示,本次选择了“TR2(SYSTEM)”作为目标系统(注:TR2是HANA系统,表示以SYSTEM为登录用户来执行这个操作),将数据导入TR2这个SAP HANA系统,Import数据的操作则使用SYSTEM这个账户来执行。
图2-20 导入的目标系统
单击“Next”按钮,进入下一步,并且在图2-21所示的界面中设置以下参数。
- Source File:具体的CSV数据文件。
- Field Delimiter:离线文件的数据分隔符。
- Header Row:离线文件是否有头描述行。
- Import all data:从文件的第几行数据截止到第几行数据。
- Target Table:是将数据加载到现有的某个Schema中的数据库表,还是根据本地CSV文件的数据类型来新创建一个数据库表。
图2-21 定义导入的属性
设置好上述信息后,单击“Next”按钮,进入下一步。
在图2-22所示的界面中,SAP HANA工作台提取了一些“data.csv”文件中的数据,并显示在该界面左边的Source Filed区域,同时将其命名为COLUMN_0、COLUMN_1、COLUMN_2、COLUMN_3。
在图2-21所示界面右边的Target Table区域,将目标数据库表中的所有字段和类型信息显示出来,供用户建立映射关系时使用。
最后,用户需要单击 按钮,建立离线数据文件列和目标数据库表列的一个映射关系,完成后的效果如图2-22所示。
图2-22 定义离线数据文件和目标表的映射关系
最后,单击“Finish”按钮完成整个过程。
在Import过程执行完成之后,右击目标数据库表,在弹出的快捷菜单中选择“Open Data Preview”命令,就可以显示出当前这个数据库表中所有数据记录,如图2-23所示。
图2-23 预览数据库表数据
到这里为止,关于使用SAP HANA工作台提供Import向导功能的介绍结束了。
提示信息:
在用户导入少量数据的情况下(例如,几十万条数据记录),使用SAP HANA 工作台的Import向导工具较为快速。
如果用户需要导入的离线数据量较大(例如,离线数据文件超过几千万条记录或者容量有好几个GB),而当前环境中又没有ETL软件可以使用,则可以考虑在服务器端使用Import命令来进行导入,其基本的操作方式如下。
将离线文件复制到HANA系统所在的Linux系统中的某个目录下,在SAP HANA工作台中打开SQL Console,然后执行如下命令:
IMPORT FROM CSV FILE ' /LINUX目录/离线数据文件名.csv' INTO "目标Schema"."目标数据库表" WITH RECORD DELIMITED BY ' \n' FIELD DELIMITED BY ' , ' THREADS 20 BATCH 5000;
使用Import命令可以将较大的离线数据文件导入到SAP HANA中,而且不需要任何ETL软件环境。关于Import命令更为详细的参数介绍,可以参考SAP HANA SQL Reference Manual文档→SQL Statement→Data Import Export Statements→IMPORT FROM部分。该文档的下载地址为:http://help.sap.com/hana/SAP_HANA_SQL_Reference_en.pdf。