2012-12-16 15 views
1

我有一個項目,我對工作要求如下:寫作OLAP SQL查詢

  1. 創建標準化樣本使用Java我進入了一個百萬行數據的每個表RDBMS(5臺)
  2. 在標準化表上運行兩個OLTP和兩個OLAP查詢。
  3. 非規範化表。
  4. 對它們運行相同的OLTP和OLAP查詢並比較時間。

OLAP查詢是什麼意思?我搜索了互聯網,所有我能找到的是我必須製作一個多維數據集,並對其應用查詢。我如何在RDBMS上編寫OLAP查詢?我有一個例子:標準化 表(訂單,產品,客戶,分公司,銷售)

  1. 銷售:的order_id,product_id,數量
  2. 產品:PRODUCT_ID,名稱,描述,價格,sales_tax
  3. 客戶:CUSTOMER_ID,f_name,l_name,tel_no,地址,網卡,城市
  4. 分支:branch_id,名稱,tel_no,地址,城市
  5. 訂單:ORDER_ID,CUSTOMER_ID,order_date的,branch_id

我想寫上述表的OLAP查詢。我正在使用Oracle Developer和SQL Developer。

+0

OLAP查詢我做出了上述表格的示例: SELECT BRANCH.BRANCH_ID,PRODUCT.PRODUCT_ID,ORDERS.ORDER_DATE,SUM(SALES.QUANTITY) FROM BRANCH,PRODUCT,SALES,ORDERS WHERE ORDERS.BRANCH_ID = BRANCH.BRANCH_ID AND SALES.PRODUCT_ID = PRODUCT.PRODUCT_ID AND ORDERS.ORDER_ID = SALES.ORDER_ID AND ORDER_DATE BETWEEN to_date('02/01/2000','dd/mm/yyyy') AND to_date('12/12/2006','dd/mm/yyyy') GROUP BY BRANCH。 BRANCH_ID,SALES.PRODUCT_ID,ORDERS.ORDER_DATE – hasnain095

回答

1

根據您使用的RDBMS,有些SQL函數有時稱爲「分析」,「窗口化」或「OLAP」。在某些情況下,它們可以提供巨大的性能改進,通常是在比較同一組數據中的行的情況下,否則這些數據會需要自行聯接。

當您使用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 
+0

我不需要使用SQL fucntions,我需要的是爲上面不是OLTP的表格編寫SQL查詢,而是OLAP。我舉了一個我認爲可能是答案的例子,但我不確定。 – hasnain095

+0

@ user1859596我的例子中沒有看到任何分析函數?我編輯了我的帖子,提供了一個計算運行總數的非常簡單的例子,如果沒有分析函數,這並不是微不足道的。還有無數的分析用例 - 請檢查一下asktom網站 - 您將學到很多東西。 –