我有一个大文件,我使用ETL工具在netezza数据库的表中加载,让我们调用这个数据库Staging_DB
。现在,发布一些验证,需要将此表的内容插入驻留在另一个 netezza DB 中的类似结构化表中,让我们调用这个PROD_DB
。将数据从staging_DB
传输到PROD_DB
的最快方法是什么?
PROD_DB
吗?或者,答案 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)
在大多数情况下,您只需使用"设置目录"更改目录。命令
答案 5 :(得分:0)
set catalog='database_name';
insert into target_db.target_schema.target_table select source_db.source_schema.source_table;