Skip to Content

原文链接:Quick SAP HANA and R usecase

声明:本人不是SAP HANA或者R专家,甚至也不是Python专家。我只是有很多想法且喜欢写博客。

前几天我一直考虑做一些关于SAP HANA和R的有帮助的事,因为人们对R似乎还没有足够的兴趣,这真是个遗憾…R很不错,SAP HANA棒极了…所以结合这2者…我想你知道我怎么想的…

我所想到的第一件要做的事情是调查…名字,姓氏,国家,年龄,性别和最爱的程序语言…当然…我需要很多记录…远多于我能够亲自完成的…所以…一个Python脚本帮了我的忙…我想…为什么我不能用我的团队成员的名字和姓氏,籍贯,编一些年龄和其他数据来填塞成数据混合源。这个脚本将简单生成一些随机记录来导入到SAP HANA中。

Vote_Generator.py

import os

import sys

import random

names = [“Anne”, “Gigi”, “Juergen”, “Ingo”, “Inga”, “Alvaro”, “Mario”, “Julien”,

“Mike”, “Michael”, “Karin”, “Rui”, “John”, “Rocky”, “Sebastian”, “Kai-Yin”,

“Hester”, “Katrin”, “Uwe”, “Vitaliy”]

last_names = [“Hardy”, “Read”, “Schmerder”, “Sauerzapf”, “Bereza”, “Tejada”,

“Herger”, “Vayssiere”, “Flynn”, “Byczkowski”, “Schattka”,

“Nogueira”, “Mayerhofer”, “Ongkowidjojo”, “Wieczorek”, “Gau”, “Hilbrecht”,

“Staehr”, “Kylau”, “Rudnytskiy”]

age = [24, 34, 40, 38, 28, 36, 35, 42, 30, 37]

*** = [“M”, “F”]

country = [“Germany”, “France”, “Polland”, “Peru”, “Russia”, “USA”, “China”,

“Philippines”, “Portugal”, “Spain”]

vote = [“ABAP”, “Node”, “Ruby”, “Python”, “R”, “PHP”, “ActionScript”,

“Euphoria”, “Java”, “C++”]

def Generate_File(pSchema, pNumber):

    iNumber = 0

    pathname = os.path.dirname(sys.argv[0])

    pathname = os.path.abspath(pathname) + “\HANA_File.txt”

    myfile = open(pathname, “a”)

    while iNumber < pNumber:

        r_names = random.randrange(0, 20)

        r_lastnames = random.randrange(0, 20)

        r_age = random.randrange(0, 10)

        r_*** = random.randrange(0, 2)

        r_country = random.randrange(0, 10)

        r_vote = random.randrange(0, 10)

        iNumber += 1

        myfile.write(“insert into ” + pSchema + ” values(‘” +

        names[r_names] + “‘,'” + last_names[r_lastnames] + “‘,” +

        str(age[r_age]) + “,'” + ***[r_***] + “‘,'” + country[r_country] +

        “‘,'” + vote[r_vote] + “‘);\n”)

    myfile.close()

    print ‘The file ‘ + pathname + ‘ was written successfully’

schema = raw_input(“Schema: \n”)

num_files = input(“How many records?: \n”)

Generate_File(schema, num_files)

执行相当简单…我们使用以上这个模式和数据文件生成了我们期望的…就这篇博客而言…200,000(应该漏了个K)记录,这么多的数据会令人满意。

/wp-content/uploads/2012/08/hana_r_votes_00_128925.png

正如你所见到的…一些随机有趣的名字生成了。不过毕竟我们是一个队伍的成员,我想他们不会很在意。

下一步是在SAP HANA中生成一个表格并下载记录。

/wp-content/uploads/2012/08/hana_r_votes_01_128926.png

我们RHANA编码的主要目标是得到反映某一国家的一定年龄的女性或男性在调查中投票数量的详细的数据。比如CHINA –> 24 –> F –> 890。(中国有890个24岁的女性在调查中投票)。当然,我们也需要生成一个表格来归集处理这些信息。

/wp-content/uploads/2012/08/hana_r_votes_02_128957.png

这些小细节都好了…我们可以开始编码我们的脚本…

HANA_R_Votes.sql

DROP TYPE T_VOTES_DETAIL;

CREATE TYPE T_VOTES_DETAIL AS TABLE (

COUNTRY VARCHAR(15),

AGE CHAR(2),

*** CHAR(1),

FREQUENCY INTEGER

);

DROP PROCEDURE CALCULATE_VOTES;

DROP PROCEDURE GET_VOTES;

CREATE PROCEDURE CALCULATE_VOTES(IN votes VOTES, out votes_detail T_VOTES_DETAIL)

LANGUAGE RLANG AS

BEGIN

Country<-votes$COUNTRY

Age<-votes$AGE

***<-votes$***

Votes<-table(Country, Age, ***)

Stats<-data.frame(Votes)

Stats<-subset(Stats,(Stats$Freq>0))

Stats<-Stats[order(Stats$Country,Stats$Age),]

votes_detail<-data.frame(COUNTRY=Stats$Country,AGE=Stats$Age,***=Stats$***,FREQUENCY=Stats$Freq)

END;

CREATE PROCEDURE GET_VOTES()

LANGUAGE SQLSCRIPT AS

BEGIN

tab_votes = SELECT * FROM VOTES;

CALL CALCULATE_VOTES(:tab_votes, T_VOTES_DETAIL);

INSERT INTO “VOTES_DETAIL” SELECT * FROM :T_VOTES_DETAIL;

END;

CALL GET_VOTES();

SELECT * FROM VOTES_DETAIL

当所有的事情都准备妥当,我们使用GET_VOTES()程序命令从SAP HANA中来读取这200,000K记录,传送这些数据到R服务器中进行处理,然后再传送回SAP HANA以完成我们所需要的信息表格。

/wp-content/uploads/2012/08/hana_r_votes_03_128958.png

是的…这整个过程只花了不到2秒…对于200,000K记录而言…实在是个不差的成绩

现在我们可以从我们得到的密集的表格中选择信息

/wp-content/uploads/2012/08/hana_r_votes_04_128959.png

既然我们已经取得了我们想要的信息,我们可以使用SAP HANA的分析功能来分析我们的数据…

/wp-content/uploads/2012/08/hana_r_votes_05_128969.png

/wp-content/uploads/2012/08/hana_r_votes_06_128970.png

我不得不说…这是多么简单迅速…可能这不是最好的演示,不过我确信以上能让你更好地了解SAP HANA和R能做些什么。

To report this post you need to login first.

2 Comments

You must be Logged on to comment or reply to a post.

Leave a Reply