您的位置:首页 > 编程语言

SAP HANA并行编程

2013-04-30 23:12 731 查看
并行对于现代的大数据的处理平台是极其关键的,同样的,SAP HANA亦不例外,从某种程度上来说,正是无所不用其极的并行及其基于内存的计算模式使得SAP HANA的计算性能达到现象级。

相对于Hadoop,在SAP HANA中实现并行编程是比较容易的,SAP HANA的并行对Developer来说是透明的,只需遵循一定的规则,数据库会自动的实现并行。

其中有两条规则至关重要:

1. store procedure须是read only的,即不能有增删改查的语句

2. 各语句之间要尽量的相互独立

举个简单例子:

DROP PROCEDURE proc_parall;
CREATE PROCEDURE proc_parall
LANGUAGE READS SQL DATA AS
BEGIN
tmp1 = SELECT DAY, COUNT(*) AS NUM FROM day_table GROUP BY DAY;

tmp2 = SELECT DAY, COUNT(*) AS NUM FROM other_table GROUP BY DAY;
SELECT TOP 10 * FROM :tmp1;
SELECT TOP 10 * FROM :tmp2;
END;


在上例中tmp1, tmp2由于用到的表是不同的,因此编译器会将这两个语句并行,当然,为了更显示的表示上述语句的独立性,可以将上述store procedure写成两个,即:

DROP PROCEDURE part1;
CREATE PROCEDURE part1
LANGUAGE READS SQL DATA
AS
BEGIN
tmp1 = SELECT DAY, COUNT(*) AS NUM FROM day_table GROUP BY DAY;
SELECT TOP 10 * FROM :tmp1;
END;

DROP PROCEDURE part2;
CREATE PROCEDURE part2
LANGUAGE READS SQL DATA AS
BEGIN
tmp2 = SELECT DAY, COUNT(*) AS NUM FROM other_table GROUP BY DAY;
SELECT TOP 10 * FROM :tmp2;
END;

DROP PROCEDURE proc_parall;
CREATE PROCEDURE proc_parall
LANGUAGE READS SQL DATA AS
BEGIN
CALL part1;
CALL part2;
END;

CALL proc_parall;

但很多时候我们可能只对同一个表进行不同的操作,由于SAP HANA的并行对程序员是透明的,这意味着我们并不能指定操作显示的并行,但此时上面说到的两个规则同样是成立的,应尽可能的让各sql语句之间是相互独立的,当对同一个表进行操作时,各sql语句间相互独立意味着尽可能的是可语句操作同张表的不同部分的数据,如下面的代码所示:

DROP PROCEDURE proc_parall;
CREATE PROCEDURE proc_parall
LANGUAGE READS SQL DATA AS
BEGIN
tmp1 = SELECT DAY, COUNT(*) AS NUM FROM day_table WHERE year = 2012
GROUP BY DAY;
tmp2 = SELECT DAY, COUNT(*) AS NUM FROM day_table WHERE year=2013
GROUP BY DAY;
tmp3 = (SELECT * FROM :tmp1) UNION ALL (SELECT *FROM :tmp2);
SELECT top 10 * FROM :tmp3;
END;
在上例中,tmp1, tmp2 即可并行
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sap hana sql 并行