Oracle 11g OLAP 새 기능 안내
2009 년 3 월 5 일
댓 글 1 개
Oacle 11g 은 데이터 창고 에 도 새로운 기능 이 많 습 니 다. 특히 새로운 다 차원 데이터 세트 조직의 cube (즉, 흔히 말 하 는 MOLAP).
본 고 를 시작 하기 전에 otn 에서 Oacle 11g 의 새로운 기능 을 소개 하 는 data warehouse 부분 을 살 펴 보 는 것 을 권장 합 니 다. Oacle ace 총감독 Arup Nanda 가 쓴 것 입 니 다. 현재 otn 의 중국어 사이트 에는 번역 판 이 있 습 니 다. 주 소 는 다음 과 같 습 니 다.
http://www.oracle.com/technology/global/cn/pub/articles/oracle-database-11g-top-features/11g-dw-olap.html?_template=/ocom/print
이 글 은 주로 위의 이 글 중의 일부 실험 과 덮어 쓰 지 않 은 부분 을 소개 한다.
데이터 가 져 오기
먼저http://www.oracle.com/technology/products/bi/olap/doc_sample_schemas/global_11g_schema.zip
예제 데 이 터 를 다운로드 한 후 DBA 권한 을 가 진 사용 자 를 사용 하여 global 사용 자 를 만 듭 니 다. 사용자 이름 은 global (스 크 립 트 를 수정 하지 않 는 한) 이 어야 합 니 다.
8665fb959e4f46e9d701dc587fea8b93000
시스템 의 비밀번호 와 글로벌 사용자 의 비밀 번 호 를 입력 하 라 고 요구 할 것 입 니 다.
그 후에 global schema 를 가 져 옵 니 다. 모두 8 개의 표 입 니 다. 기본적으로 성공 하고 경고 가 없 을 것 입 니 다.
두 번 째 스 크 립 트 를 실행 하지 마 세 요 global11g_create_cubes. sql, 비록 global11g_readme. html 설명 에서 두 번 째 스 크 립 트 를 실행 하 겠 다 고 했 지만 이 스 크 립 트 에 문제 가 있 으 면 실패 합 니 다. 실행 해도 괜 찮 습 니 다.
AWM 사용 하기
Oacle 11g 이 발표 한 AWM (Analysis Workspace Manager) 도구 와 함께 버 전 은 11.1.0.7 입 니 다. 이것 은 JAVA 도구 입 니 다. JDK 5.0 이상 이 필요 합 니 다. 아래 주소 로 다운로드 할 수 있 습 니 다.
http://www.oracle.com/technology/global/cn/products/bi/olap/index.html
Oacle 11g 은 OLAP 와 관련 된 대상 을 관리 하기 위해 분석 작업 영역 (aw) 을 도입 하 였 으 며, awm 는 aw 를 관리 하 는 도형 화 된 도구 입 니 다.
awm 압축 해제 후 명령 행 에서 실행
java –jar awm11.1.0.7.0B.jar
awm 시작 후 클릭 File – > Connect Database, 연결 할 데이터베이스 로 Global 을 선택 하고 방금 입력 한 global 사용자 이름과 비밀 번 호 를 입력 하 십시오. 그리고 분석 작업 영역 을 열 면 global 작업 분석 영역 아래 dimensions, cubes 폴 더 가 있 습 니 다. 누 르 면 비어 있 을 것 입 니 다.(otn 의 예제 에는 위의 두 번 째 스 크 립 트 가 실 행 됐 지만 다운로드 한 파일 에 문제 가 있어 실행 되 지 않 았 기 때문에 비어 있 을 것 입 니 다).
이제 dimension 과 cube 의 정 의 를 가 져 올 수 있 습 니 다. Dimension 폴 더 를 오른쪽 클릭 하여 템 플 릿 에서 만 들 기 를 선택 한 다음 CHANNEL, CUSTOMER, PRDUCT, TIME dimension 을 부 을 수 있 습 니 다. 파일 은 global schema 폴 더 아래 templates 에 있 고 cube 에 도 같은 동작 을 수행 하여 PRICE CUBE 와 UNIT CUBE 를 가 져 올 수 있 습 니 다.
큐 브 데이터 채 우기
위의 작업 을 마 친 후, 당신 은 4 개의 dimension 과 2 개의 cube 가 있 을 것 입 니 다. 그러나 안에 데이터 가 없습니다. 당신 은 두 가지 방법 으로 table 에서 데 이 터 를 가 져 올 수 있 습 니 다.
1. pl/sql 로 , sqlplus 에 exec dbms cube. build ('PRICE CUBE') 를 사용 합 니 다.
2. awm 를 사용 할 지, awm 의 cube 폴 더 아래 의 PRICE CUBE 에서 오른쪽 단 추 를 누 르 고, 큐 브 를 선택 합 니 다.
awm 는 유지 보수 의 cube 와 dimension 을 선택 하고 Next 를 클릭 한 후 즉시 실행 을 선택 합 니 다. 실행 중인 것 이 무엇 인지 보고 싶 으 면 파일 저장 을 선택 할 수 있 습 니 다.
그리고 Build log 대화 상자 에서 Output 열 을 볼 수 있 습 니 다.
<CommandOutput>
<CubeLoad
Name="MAP1"
SQL="SELECT /*+ bypass_recursive_check cursor_sharing_exact no_expand */
T16_MONTH_ID ALIAS_114,
T13_ITEM_ID ALIAS_115,
SUM(T19_UNIT_PRICE) ALIAS_116,
SUM(T19_UNIT_COST) ALIAS_117
FROM
(
SELECT
T1.ITEM_ID T19_ITEM_ID,
T1.MONTH_ID T19_MONTH_ID,
T1.UNIT_PRICE T19_UNIT_PRICE,
T1.UNIT_COST T19_UNIT_COST
FROM
GLOBAL.PRICE_FACT T1 )
T19,
(
SELECT
T1.MONTH_ID T16_MONTH_ID
FROM
GLOBAL.TIME_DIM T1 )
T16,
(
SELECT
T1.ITEM_ID T13_ITEM_ID
FROM
GLOBAL.PRODUCT_DIM T1 )
T13
WHERE
((T16_MONTH_ID = T19_MONTH_ID)
AND (T13_ITEM_ID = T19_ITEM_ID)
AND (T16_MONTH_ID = T19_MONTH_ID)
AND (T13_ITEM_ID = T19_ITEM_ID) )
GROUP BY
(T13_ITEM_ID, T16_MONTH_ID)
ORDER BY
T13_ITEM_ID ASC NULLS LAST ,
T16_MONTH_ID ASC NULLS LAST "
LOADED="2523"
REJECTED="0"
</CommandOutput>
완성 하면 cube 안의 데 이 터 를 볼 수 있 습 니 다.
데이터 보기
Oracle 11g 은 새로운 함수 cube table 을 도입 하여 sql 문법 을 사용 하면 MOLAP 의 데 이 터 를 볼 수 있 습 니 다. 문법 은 다음 과 같 습 니 다.
cube 문법: select * from table(cube_table(‘
예제 PRICE CUBE: select * from table(cube_table(‘GLOBAL.PRICE_CUBE’)) (글로벌 로그 인 이 라면 앞의 글로벌 을 추가 하지 않 아 도 됩 니 다.)
dimension 문법: select * from table(cube_table(‘
그 중에서 hierarchy 부분 은 선택 할 수 있 습 니 다. 예 를 들 어 global 사용자 의 produt dimension:
select * from table(cube_table(‘global.product’));
dimension 에 hierarchy 가 하나 밖 에 없다 면 Oacle 은 당연히 이것 을 선택 할 것 입 니 다. dimension 에 두 개 이상 의 hierarchy 가 있다 면 Oacle 은 지정 한 기본 값 을 사용 합 니 다. time dimension 은 CALENDAR 과 FISCAL 두 개의 hierarchy 가 있 습 니 다. calendar 는 기본 값 입 니 다. 그래서 time dimension 을 조회 할 때 hierarchy 를 지정 하지 않 았 습 니 다. 실제 검색 한 ca 입 니 다.lendar hierarchy.
모든 cube 와 dimension 에 대해 Oacle 은 해당 하 는 view 를 만 들 기 때문에 cube 와 dimension 을 조회 할 때 도 해당 하 는 view 를 조회 합 니 다.
예 를 들 어 global schema 는 기본적으로 다음 view 를 만 듭 니 다 (cube 를 만 들 때): product view, product parmary view, time view, time calendar view, time fiscal view, price cube view.
모든 dimension 은 기본적으로 < dimension name > view 와 < dimension name > < hierarchy name > view 를 만 들 고, cube 는 < cube name > cube view 에 대응 합 니 다.
그 러 니까 select 실행 * from table (cube table (xxx);
예 를 들 어 price cube view 의 정 의 는 다음 과 같다.
8665fb959e4f46e9d701dc587fea8b93001
cube 필터, 정렬, 집합
좀 더 복잡 한 sql:
SELECT * FROM TABLE(CUBE_TABLE( ‘global.price_cube HIERARCHY product primary HIERARCHY time calendar’))
where TIME=’TOTAL_TOTAL’
ORDER BY PRODUCT ;
SELECT SUM(UNIT_COST),SUM(UNIT_PRICE),PRODUCT FROM TABLE(CUBE_TABLE( ‘global.price_cube HIERARCHY product primary HIERARCHY time calendar’))
where TIME=’TOTAL_TOTAL’ GROUP BY PRODUCT
ORDER BY PRODUCT ;
일반적인 sql 기본 과 마찬가지 로 cube table 의 쓰기 방법 을 제외 하고 주의해 야 합 니 다. GUI 인터페이스 를 통 해 보 는 것 을 좋아한다 면 awm 에서 오른쪽 단 추 를 누 르 면 cube 를 선택 하여 데 이 터 를 볼 수 있 습 니 다. 차원 을 클릭 하여 펼 칠 수도 있 고 아래 에 도표 도 있 습 니 다.
검색 구축 기 에서 (위의 그림 에서 파일 메뉴 의 아래 버튼) 복잡 한 구축 도 선택 할 수 있 습 니 다.
이 화면 은 오히려 owb 안의 것 과 완전히 같 아서 같은 코드 를 사용 할 것 으로 추정 된다
가장 원시 적 인 모델 은 essbase 에서 참고 한 것 이 고 인터페이스 구조 와 조작 방식 은 모두 essbase 와 매우 비슷 하 다.
cube 관리 방법
cube 를 삭제 하거나 수정 할 수 있 는 직접적인 pl/sql 이 없습니다. 현재 dbms cube 패키지 에는 세 개의 함수 build (), import xml, vaidate xml () 이 있 습 니 다. build () 는 데 이 터 를 채 우 는 데 사 용 됩 니 다. cube 의 정의 가 마음 에 들 지 않 으 면 수정 하거나 삭제 하려 면 보통 awm 를 통 해 otn 위 에 제 시 된 global schema 파일 에는 삭제 한 예 가 있 습 니 다. 수 동 으로 xml 를 연결 한 다음 dbms cube. import (xml).
set serverout on
declare xmlCLOB clob; v_i number; type t_dims is table of all_cube_dimensions%rowtype; type t_cubes is table of all_cubes%rowtype; v_dims t_dims; v_cubes t_cubes; v_cmd varchar2(400);
begin -- Check if the AW exists
dbms_output.put_line('... checking for GLOBAL AW in GLOBAL schema'); SELECT COUNT(*) INTO v_i FROM all_aws WHERE owner = 'GLOBAL' AND aw_name = 'GLOBAL';
-- Delete the AW if it exists if v_i > 0 then dbms_output.put_line('... deleting GLOBAL AW in GLOBAL schema'); dbms_lob.createtemporary(xmlCLOB,TRUE); dbms_lob.open(xmlCLOB, DBMS_LOB.LOB_READWRITE); dbms_lob.writeappend(xmlCLOB, 9, '<Metadata'); dbms_lob.writeappend(xmlCLOB, 16, ' Version="1.1">'); dbms_lob.writeappend(xmlCLOB, 5, ' <AW'); dbms_lob.writeappend(xmlCLOB, 19, ' Action="REMOVE"'); dbms_lob.writeappend(xmlCLOB, 18, ' Owner="GLOBAL"'); dbms_lob.writeappend(xmlCLOB, 19, ' Name="GLOBAL"/>'); -- Loop over each of the Dimensions in the AW and delete them select * bulk collect into v_dims from all_cube_dimensions where owner = 'GLOBAL' and aw_name = 'GLOBAL';
for i in 1 .. v_dims.count loop v_cmd := '<' || initcap(v_dims(i).dimension_type) || 'Dimension'; dbms_lob.writeappend(xmlCLOB, length(v_cmd), v_cmd); dbms_lob.writeappend(xmlCLOB, 19, ' Action="REMOVE"'); dbms_lob.writeappend(xmlCLOB, 18, ' Owner="GLOBAL"'); v_cmd := ' Name="' || v_dims(i).dimension_name || '"/>'; dbms_lob.writeappend(xmlCLOB, length(v_cmd), v_cmd); end loop;
-- Loop over each of the cubes and delete them
select * bulk collect into v_cubes from all_cubes where owner = 'GLOBAL' and aw_name = 'GLOBAL'; for i in 1 .. v_cubes.count loop dbms_lob.writeappend(xmlCLOB, 7, ' <Cube'); dbms_lob.writeappend(xmlCLOB, 19, ' Action="REMOVE"'); dbms_lob.writeappend(xmlCLOB, 18, ' Owner="GLOBAL"'); v_cmd := ' Name="' || v_cubes(i).cube_name || '"/>'; dbms_lob.writeappend(xmlCLOB, length(v_cmd), v_cmd); end loop; -- Finish off the removal tags
dbms_lob.writeappend(xmlCLOB, 11, '</Metadata>'); dbms_lob.close(xmlCLOB); dbms_output.put_line(xmlCLOB); -- dbms_cube.import_xml(xmlCLOB); commit; else dbms_output.put_line('... GLOBAL AW in GLOBAL schema not found'); end if; exception when others then dbms_output.put_line(' '); dbms_output.put_line('# ERROR: Installation failed.'); dbms_output.put_line('# Please ensure that the analytic workspace GLOBAL is not currently open.'); raise_application_error(-20000, 'Can not delete analytic workspace that is currently in use.');
end;
/
dbms cube. import xml () 줄 의 주석 을 지 웠 습 니 다. 출력 은 다음 과 같 습 니 다.
<Metadata Version="1.1"> <AW Action="REMOVE" Owner="GLOBAL" Name="GLOBAL"/><StandardDimension Action="REMOVE" Owner="GLOBAL" Name="CHANNEL"/><StandardDimension Action="REMOVE" Owner="GLOBAL" Name="CUSTOMER"/><TimeDimension Action="REMOVE" Owner="GLOBAL" Name="TIME"/><StandardDimension Action="REMOVE" Owner="GLOBAL" Name="PRODUCT"/> <Cube Action="REMOVE" Owner="GLOBAL" Name="PRICE_CUBE"/></Metadata>
삭제 작업 을 수행 하 는 것 이 Action = "REMOVE"를 통 해 이 루어 지 는 것 을 볼 수 있 습 니 다.
마지막.
cube 의 데이터 저장 및 새로 고침 에 관 한 소개, 그리고 Oacle 11g 의 OLAP 새로운 기능 도 있 습 니 다. 검색 재 작성 을 더 자주 실행 합 니 다. ,
파 티 션 의 오래된 정도 검사 otn 에 소개 가 있 으 니 가 보 셔 도 됩 니 다.
참고 자료
http://www.oracle.com/technology/global/cn/pub/articles/oracle-database-11g-top-features/11g-dw-olap.html?_template=/ocom/print
otn 에 Oacle 11g olap 의 새로운 기능 을 소개 하 는 글 입 니 다.
http://www.oracle.com/technology/products/bi/olap/collateral/OLAP_11g_MV_query_rewrite.html?_template=/ocom/print
cube 뮤 직 비디오 의 리 셋 방식 을 소개 하 는 글
http://www.dba-oracle.com/t_olap_dimensions_cubes.htm
11g 이전 olap 개념 을 소개 하 는 글 은 Oacle ace 입 니 다. Mark Rittman pl/sql 에서 cube 를 만 들 고 유지 하 는 방법 에 대한 코드 가 있 습 니 다 (awm 작업 은 더 간단 합 니 다)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
activemq 5.5 의 입문 은 설치, 시작, 데이터베이스 지속 화 를 포함한다Apache ActiveMQ 5.5.0 은 주로 유지보수 버 전 으로 130 개가 넘 는 문 제 를 복 구 했 으 며 대부분 bug 와 개선 이 었 다. Improved performance for offline d...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.