2014-02-26 1 views
3

ETL 도구를 사용하여 netezza 데이터베이스의 테이블에로드 한 큰 파일이 있는데이 데이터베이스를 Staging_DB으로 호출 할 수 있습니다. 이제 몇 가지 검증을 게시하십시오.이 테이블의 내용은 다른 netezza DB에있는 유사한 구조화 된 테이블에 삽입해야하며 이것을 PROD_DB이라고합니다. staging_DB에서 PROD_DB으로 데이터를 전송하는 가장 빠른 방법은 무엇입니까?한 테이블의 데이터를 다른 데이터베이스에있는 다른 테이블로로드 - Netezza

  1. ETL 도구를 사용하여 PROD_DB에 데이터를로드해야합니까? 또는
  2. 외부 테이블 개념을 사용하여 전송을 수행해야합니까?
+1

PROD_DB에 데이터를 삽입하기 전에 수행해야 할 변환이없는 경우, 당신은 확실히 공격한다 ETL 도구를 사용할 수 있습니다. – Incognito

답변

1

변형이 필요없는 경우 전송하는 더 좋은 방법은 데이터베이스 간 데이터 전송입니다. Netezza 설명서에 설명 된대로 Netezza는 사용자가 두 데이터베이스에 대한 개체 수준 권한을 가지고있는 데이터베이스 간 지원을 지원합니다.

당신은 다음 명령을 사용하여 권한을 확인하실 수 있습니다 - 일부 변환을 수행 할 경우

INSERT INTO Staging_DB..TBL1 SELECT * FROM PROD_DB..TBL1 

하고 다음 다른 데이터베이스에 삽입해야 후 이상 -

dbname.schemaname(loggenin_username)=> \dpu username 

작업 예를 검색 UDT 프로 시저 (결과 집합 프로 시저라고도 함)를 작성할 수 있습니다.

희망이 도움이 될 것입니다.

1

데이터를 이동할 수있는 한 가지 방법은 Transient External Tables을 사용하는 것입니다. 소스 테이블/db에서 플랫 파일을 작성하는 것으로 시작하십시오. Netezza에서 Netezza으로 이동하기 때문에 압축을 켜고 internal 서식을 사용하여 시간과 공간을 절약 할 수 있습니다.

CREATE EXTERNAL TABLE 'C:\FileName.dat' 
USING (
delim 167 
datestyle 'MDY' 
datedelim '/' 
maxerrors 2 
encoding 'internal' 
Compress True 
REMOTESOURCE 'ODBC' 
logDir 'c:\') AS 
SELECT * FROM source_table; 

그런 다음 소스에서 같은 DDL을 사용하여 대상 데이터베이스에서 테이블을 작성하고 그냥로드.

INSERT INTO target SELECT * FROM external 'C:\FileName.dat' 
USING (
delim 167 
datestyle 'MDY' 
datedelim '/' 
maxerrors 2 
encoding 'internal' 
Compress True 
REMOTESOURCE 'ODBC' 
logDir 'c:\'); 
0

나는 프로덕션 db에 SP를 쓰고 스테이지에서 프로덕션 데이터베이스로 CTAS를 작성합니다. SP의 장점은 변형을 추가 할 수 있다는 것입니다. Netezza에서 제공하는 NZ 마이그레이션 유틸리티 중 하나가 가장 빠른 방법입니다.

0

당신은 그냥 그렇게해야하는 경우

INSERT INTO Staging_DB..TBL1 SELECT * FROM PROD_DB..TBL1 

같은 간단한 SQL 쿼리가 잘 작동합니다.

그냥 그렇지 않으면 오류 코드

HY0000 얻을 것이다, 당신은 쿼리를 실행하면 대상 데이터베이스에 연결해야한다는 인식 :

"명령이 유형에 대해 지원되지 간 데이터베이스 액세스를"

데이터베이스와 테이블 모두에 대한 읽기/쓰기 권한이 있더라도.당신은 단순히 명령에 "설정 카탈로그"를 사용하여 카탈로그를 변경할 수 있습니다 대부분의 경우

0
set catalog='database_name'; 
insert into target_db.target_schema.target_table select source_db.source_schema.source_table;