首页 文章

编写OLAP SQL查询

提问于
浏览
1

我有一个我正在研究的项目,需要以下内容:

  • 创建一个规范化的样本rdbms(5个表)

  • 使用Java我向每个表输入了100万行数据

  • 在规范化表上运行两个OLTP和两个OLAP查询 .

  • 非规范化表格 .

  • 对它们运行相同的OLTP和OLAP查询并比较时间 .

OLAP查询是什么意思?我搜索过互联网,所有我能找到的是我必须制作一个立方体,并对其进行查询 . 如何在RDBMS上编写OLAP查询?我有一个样本:表格标准化(订单,产品,客户,分支机构,销售)

  • 销售: order_id,product_id ,数量

  • 产品: product_id ,名称,描述,价格,sales_tax

  • customer: customer_id ,f_name,l_name,tel_no,addr,nic,city

  • branch: branch_id ,name,tel_no,addr,city

  • 订单: order_id ,customer_id,order_date,branch_id

我想在上面的表上写一个OLAP查询 . 我正在使用Oracle Express和SQL Developer .

1 回答

  • 1

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

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

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

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

    EDIT

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

    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
    

相关问题