Oracle Dimension學習樣本____Oracle

來源:互聯網
上載者:User

--create sales table
CREATE TABLE sales
(trans_date DATE, cust_id INT, sales_amount NUMBER);

 

--insert sale rows
INSERT /*+ APPEND */
INTO SALES
 SELECT TRUNC(SYSDATE, 'year') + MOD(ROWNUM, 366) TRANS_DATE,
     MOD(ROWNUM, 100) CUST_ID,
     ABS(DBMS_RANDOM.RANDOM) / 100 SALES_AMOUNT
   FROM ALL_OBJECTS;
     
SELECT COUNT(*) FROM sales;


--go on inserting rows
BEGIN
 FOR I IN 1 .. 6 LOOP
  INSERT /*+ APPEND */
  INTO SALES
   SELECT TRANS_DATE,
       CUST_ID,
       ABS(DBMS_RANDOM.RANDOM) / 100 SALES_AMOUNT
     FROM SALES;
  COMMIT;
 END LOOP;
END;

 

--create index organized table
CREATE TABLE TIME_HIERARCHY(DAY PRIMARY KEY, MMYYYY, MON_YYYY, QTR_YYYY, YYYY) ORGANIZATION INDEX AS
    SELECT DISTINCT TRANS_DATE DAY,
                    CAST(TO_CHAR(TRANS_DATE, 'mmyyyy') AS NUMBER) MMYYYY,
                    TO_CHAR(TRANS_DATE, 'mon-yyyy') MON_YYYY,
                    'Q' || CEIL(TO_CHAR(TRANS_DATE, 'mm') / 3) || ' FY' ||
                    TO_CHAR(TRANS_DATE, 'yyyy') QTR_YYYY,
                    CAST(TO_CHAR(TRANS_DATE, 'yyyy') AS NUMBER) YYYY
      FROM SALES;


--create materialized view
CREATE MATERIALIZED VIEW MV_SALES BUILD IMMEDIATE REFRESH ON DEMAND ENABLE QUERY REWRITE AS
    SELECT SALES.CUST_ID,
           SUM(SALES.SALES_AMOUNT) SALES_AMOUNT,
           TIME_HIERARCHY.MMYYYY
      FROM SALES, TIME_HIERARCHY
     WHERE SALES.TRANS_DATE = TIME_HIERARCHY.DAY
     GROUP BY SALES.CUST_ID, TIME_HIERARCHY.MMYYYY;
    
analyze table sales compute statistics;
analyze table time_hierarchy compute statistics;

alter session set query_rewrite_enabled=true;
alter session set query_rewrite_integrity=trusted;

 

--query by Month
SELECT TIME_HIERARCHY.MMYYYY, SUM(SALES_AMOUNT)
  FROM SALES, TIME_HIERARCHY
 WHERE SALES.TRANS_DATE = TIME_HIERARCHY.DAY
 GROUP BY TIME_HIERARCHY.MMYYYY
 
--query by Quarter
SELECT TIME_HIERARCHY.QTR_YYYY, SUM(SALES_AMOUNT)
  FROM SALES, TIME_HIERARCHY
 WHERE SALES.TRANS_DATE = TIME_HIERARCHY.DAY
 GROUP BY TIME_HIERARCHY.QTR_YYYY;

 

--create dimension
CREATE DIMENSION TIME_HIERARCHY_DIM
  LEVEL DAY IS TIME_HIERARCHY.DAY
  LEVEL MMYYYY IS TIME_HIERARCHY.MMYYYY
  LEVEL QTR_YYYY IS TIME_HIERARCHY.QTR_YYYY
  LEVEL YYYY IS TIME_HIERARCHY.YYYY
  HIERARCHY TIME_ROLLUP(DAY CHILD OF MMYYYY CHILD OF QTR_YYYY CHILD OF YYYY)
  ATTRIBUTE MMYYYY DETERMINES MON_YYYY;


--drop dimension
DROP DIMENSION TIME_HIERARCHY_DIM;

 

--yearly query
SELECT TIME_HIERARCHY.YYYY, SUM(SALES_AMOUNT)
  FROM SALES, TIME_HIERARCHY
 WHERE SALES.TRANS_DATE = TIME_HIERARCHY.DAY
 GROUP BY TIME_HIERARCHY.YYYY;

 

--create index organized table
CREATE TABLE CUSTOMER_HIERARCHY(CUST_ID PRIMARY KEY, ZIP_CODE, REGION) ORGANIZATION INDEX AS
    SELECT CUST_ID,
           MOD(ROWNUM, 6) || TO_CHAR(MOD(ROWNUM, 1000), 'fm0000') ZIP_CODE,
           MOD(ROWNUM, 6) REGION
      FROM (SELECT DISTINCT CUST_ID FROM SALES);

 

analyze table CUSTOMER_HIERARCHY compute statistics;

 

drop materialized view mv_sales;

 

--recreate materialized view
CREATE MATERIALIZED VIEW MV_SALES BUILD IMMEDIATE REFRESH ON DEMAND ENABLE QUERY REWRITE AS
    SELECT CUSTOMER_HIERARCHY.ZIP_CODE,
           TIME_HIERARCHY.MMYYYY,
           SUM(SALES.SALES_AMOUNT) SALES_AMOUNT
      FROM SALES, TIME_HIERARCHY, CUSTOMER_HIERARCHY
     WHERE SALES.TRANS_DATE = TIME_HIERARCHY.DAY
       AND SALES.CUST_ID = CUSTOMER_HIERARCHY.CUST_ID
     GROUP BY CUSTOMER_HIERARCHY.ZIP_CODE, TIME_HIERARCHY.MMYYYY;


--query by month
SELECT CUSTOMER_HIERARCHY.ZIP_CODE,
    TIME_HIERARCHY.MMYYYY,
    SUM(SALES.SALES_AMOUNT) SALES_AMOUNT
  FROM SALES, TIME_HIERARCHY, CUSTOMER_HIERARCHY
 WHERE SALES.TRANS_DATE = TIME_HIERARCHY.DAY
   AND SALES.CUST_ID = CUSTOMER_HIERARCHY.CUST_ID
 GROUP BY CUSTOMER_HIERARCHY.ZIP_CODE, TIME_HIERARCHY.MMYYYY

 

--query by year
SELECT CUSTOMER_HIERARCHY.REGION,
    TIME_HIERARCHY.YYYY,
    SUM(SALES.SALES_AMOUNT) SALES_AMOUNT
  FROM SALES, TIME_HIERARCHY, CUSTOMER_HIERARCHY
 WHERE SALES.TRANS_DATE = TIME_HIERARCHY.DAY
   AND SALES.CUST_ID = CUSTOMER_HIERARCHY.CUST_ID
 GROUP BY CUSTOMER_HIERARCHY.REGION, TIME_HIERARCHY.YYYY;

 

DROP DIMENSION time_hierarchy_dim;

 

CREATE DIMENSION SALES_DIMENSION
       LEVEL CUST_ID IS CUSTOMER_HIERARCHY.CUST_ID
       LEVEL ZIP_CODE IS CUSTOMER_HIERARCHY.ZIP_CODE
       LEVEL REGION IS CUSTOMER_HIERARCHY.REGION
       LEVEL DAY IS TIME_HIERARCHY.DAY
       LEVEL MMYYYY IS TIME_HIERARCHY.MMYYYY
       LEVEL QTR_YYYY IS TIME_HIERARCHY.QTR_YYYY
       LEVEL YYYY IS TIME_HIERARCHY.YYYY
HIERARCHY CUST_ROLLUP(CUST_ID CHILD OF ZIP_CODE CHILD OF REGION)
HIERARCHY TIME_ROLLUP(DAY CHILD OF MMYYYY CHILD OF QTR_YYYY CHILD OF YYYY)
ATTRIBUTE MMYYYY DETERMINES MON_YYYY;

SELECT CUSTOMER_HIERARCHY.REGION,
    TIME_HIERARCHY.YYYY,
    SUM(SALES.SALES_AMOUNT) SALES_AMOUNT
  FROM SALES, TIME_HIERARCHY, CUSTOMER_HIERARCHY
 WHERE SALES.TRANS_DATE = TIME_HIERARCHY.DAY
   AND SALES.CUST_ID = CUSTOMER_HIERARCHY.CUST_ID
 GROUP BY CUSTOMER_HIERARCHY.REGION, TIME_HIERARCHY.YYYY;

 

--DROP DIMENSION SALES_DIMENSION;

 

ALTER SYSTEM FLUSH buffer_cache;
ALTER SYSTEM FLUSH SHARED_POOL;

 

SELECT * FROM dba_dimensions;
SELECT * FROM user_indexes WHERE index_type ='IOT - TOP';
SELECT * FROM user_indextypes;


SELECT * FROM TIME_HIERARCHY;
SELECT * FROM CUSTOMER_HIERARCHY;

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.