将一个表的数据加载到另一个表中,驻留在不同的数据库上 - Netezza

时间:2014-02-26 04:14:49

标签: netezza

我有一个大文件,我使用ETL工具在netezza数据库的表中加载,让我们调用这个数据库Staging_DB。现在,发布一些验证,需要将此表的内容插入驻留在另一个 netezza DB 中的类似结构化表中,让我们调用这个PROD_DB。将数据从staging_DB传输到PROD_DB的最快方法是什么?

  1. 我应该使用ETL工具将数据加载到PROD_DB吗?或者,
  2. 是否应使用外部表概念完成转移?

6 个答案:

答案 0 :(得分:1)

如果不需要进行转换,那么更好的转移方式是跨数据库数据传输。如Netezza文档中所述,Netezza支持跨数据库支持,其中用户对两个数据库都具有对象级别权限。

您可以使用以下命令检查权限 -

dbname.schemaname(loggenin_username)=> \dpu username

请参阅下面的工作示例 -

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

如果你想进行一些转换,而不是在需要插入另一个数据库后,你可以编写UDT程序(也称为结果集程序)。

希望这会有所帮助。

答案 1 :(得分: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:\' );

答案 2 :(得分:0)

我会在生产数据库上编写SP,并从阶段到生产数据库执行CTAS。 SP的美妙之处在于你也可以添加转换。 另一个选择是由Netezza提供的NZ迁移实用程序,这是我认为最快的路线。

答案 3 :(得分:0)

一个简单的SQL查询,如

INSERT INTO Staging_DB..TBL1 SELECT * FROM PROD_DB..TBL1
如果您只是需要这样做,

效果很好。

请注意,在执行查询时必须连接到目标数据库,否则会出现错误代码

  

HY0000:“此类命令不支持跨数据库访问”

即使您对数据库和表都有读/写访问权限。

答案 4 :(得分:0)

在大多数情况下,您只需使用"设置目录"更改目录。命令

https://www-304.ibm.com/support/knowledgecenter/SSULQD_7.0.3/com.ibm.nz.dbu.doc/r_dbuser_set_catalog.html

答案 5 :(得分:0)

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