2014-02-26 31 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支持跨用戶數據庫支持,其中用戶具有兩個數據庫的對象級別權限。

您可以檢查許可使用下面的命令 -

dbname.schemaname(loggenin_username)=> \dpu username 

請找工作示例如下 -

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

如果你想要做一些改造,比之後,你需要在另一個數據庫中插入,然後您可以編寫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

我會在生產數據庫上寫一個SP,並從舞臺到生產數據庫做一個CTAS。 SP的美妙之處在於你也可以添加轉換。 另一個選擇是Netezza提供的NZ migrate工具,這是我相信的最快的路線。

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; 
相關問題