编写OLAP SQL查询

时间:2012-12-16 10:01:31

标签: sql oracle rdbms olap

我正在进行的项目需要以下内容:

  1. 创建规范化的样本rdbms(5个表)
  2. 使用Java我为每个表输入了100万行数据
  3. 在规范化表上运行两个OLTP和两个OLAP查询。
  4. 非规范化表格。
  5. 对它们运行相同的OLTP和OLAP查询并比较时间。
  6. OLAP查询是什么意思?我搜索过互联网,所有我能找到的是我必须制作一个立方体,并对其进行查询。如何在RDBMS上编写OLAP查询?我有一个样本: 表格标准化(订单,产品,客户,分支机构,销售)

    1. 销售: order_id,product_id ,数量
    2. 产品: product_id ,名称,描述,价格,sales_tax
    3. 客户: customer_id ,f_name,l_name,tel_no,addr,nic,city
    4. 分支: branch_id ,name,tel_no,addr,city
    5. 订单: order_id ,customer_id,order_date,branch_id
    6. 我想在上面的表上写一个OLAP查询。我正在使用Oracle Express和SQL Developer。

1 个答案:

答案 0 :(得分:1)

有些SQL函数有时称为“分析”,“窗口”或“OLAP”,具体取决于您使用的RDBMS。在某些情况下,它们可以提供巨大的性能改进,通常是在比较同一组数据中的行,否则需要自联接。

当您使用Oracle时,我衷心建议您访问asktom.oracle.com并搜索“analytics rock” - 您会发现一些很好的示例,这些示例非常好解释并且比阅读Oracle文档更容易{{{ 3}}

有些注意事项:它们不是严格的“关系”,因为关系理论并没有解决元组的顺序;它们是在查询的其他部分之后执行的 - 即在过滤和聚合之后;并且它们在一定程度上由一些数据库实现。

我看到Oracle也有一个单独的OLAP产品用于处理多维数据集,但这是目前Enterprise Edition的单独许可选项,因此如果您使用的是Express版本,我认为这不是您所指的。

修改

这是一个大致基于您的数据模型的简单示例,该示例显示了如何使用分析函数来获取运行总计,如果没有它们就不容易做到: -

select 
o.customerid, 
o.orderid, 
o.orderdate, 
p.price, 
sum (p.price) over (partition by o.customerid order by o.orderdate) running_total

from orders o
inner join sales s on o.orderid = s.orderid
inner join product p on s.productid = p.productid

这给出了(对于我输入的一些简单数据): -

CUSTOMERID           ORDERID              ORDERDATE PRICE RUNNING_TOTAL
-------------------- -------------------- --------- ----- -------------
1                    1                    01-JAN-12    30            30 
1                    2                    01-MAR-12    30            60 
1                    3                    01-APR-12    30            90 
1                    4                    01-MAY-12    30           120