sql - 编写 OLAP SQL 查询

标签 sql oracle rdbms olap

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

  1. 创建规范化样本 rdbms(5 个表)
  2. 使用 Java 我向每个表输入了 100 万行数据
  3. 在规范化表上运行两个 OLTP 和两个 OLAP 查询。
  4. 非规范化表格。
  5. 对它们运行相同的 OLTP 和 OLAP 查询并比较时间。

OLAP 查询是什么意思?我已经在互联网上搜索过,我能找到的只是我必须制作一个立方体,并在其上应用查询。如何在 RDBMS 上编写 OLAP 查询?我有一个样本: 表格规范化(订单、产品、客户、分支机构、销售)

  1. 销售:order_id,product_id,数量
  2. 产品:product_id,name,description,price,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

我想在上面的表上写一个 OLAP 查询。我将 Oracle Express 与 SQL Developer 结合使用。

最佳答案

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

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

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

我看到 Oracle 也有一个单独的 OLAP 产品来处理多维数据集,但这是目前企业版的一个单独许可的选项,所以如果您使用的是 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 

关于sql - 编写 OLAP SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13900229/

相关文章:

oracle - Sqoop导入作业报错org.kitesdk.data.ValidationException for Oracle

sql - 数据库设计: problem with updating a table

SQL - 优化批量插入和大型连接的性能?

mysql - 还选择空值

r - 'RJDBC' 的 dbSendStatement() 中的 ORA-00900 错误

sql - Access 和 ODBC/Oracle 都能理解的通用 SQL

mysql循环访问数据库的性能

hadoop - Apache Sqoop 于 2021 年 6 月搬进阁楼

ms-access - 如何在 MS Access 中创建(类型,ID)(又名 'polymorphic' )外键列?

mysql - 匹配嵌套 select 语句返回的所有行