如何提升 netezza 插入语句过程

Posted

技术标签:

【中文标题】如何提升 netezza 插入语句过程【英文标题】:How to boost up netezza insert statement process 【发布时间】:2015-07-15 22:15:43 【问题描述】:

我正在将数据从 Oracle 复制到 Netezza。我有成千上万的行,并且使用一次插入一行将所有这些数据输出到 netezza 需要很长时间。我怎么能提高这个?

copyToChidDatabaseColumnInfo(rs.getString("OWNER"), rs.getString("TABLE_NAME"), rs.getString("COLUMN_NAME"));

// this is what it is within the copyToChidDatabaseColumnInfo method: 

PreparedStatement pstmt = ChildConnection.prepareStatement("INSERT INTO DATABASE_COLUMN_INFO (OWNER_NAME, TABLE_NAME, COLUMN_NAME, SYSTEM_ID, PLATFORM) VALUES (?,?,?,?,?)");
            pstmt.setString(1,owner);
            pstmt.setString(2,tbname);
            pstmt.setString(3,columnname);
            pstmt.setString(4,parentSYSTEM_ID);
            pstmt.setString(5,parentPlatform);
            pstmt.execute(); 
            pstmt.close();

【问题讨论】:

提示 1:谷歌搜索“netezza 批量加载”。提示 2:考虑将 insert 语句更改为一次插入一批行。 我正在使用外部 csv 文件将数据推送到 netezza。我在 netezza 中的表有 6 列。第一列必须保持为空,并且 CSV 文件中的数据必须填写扩孔列,但我的所有数据都存储在每一行的第一列中。这些是我的列名: 'TABLE_NAME','COLUMN_NAME','SYSTEM_ID','PLATFORM' "INSERT INTO DATABASE_TABLE_INFO SELECT * FROM EXTERNAL 'table_info.csv' USING (delimiter ','REMOTESOURCE 'jdbc' LOGDIR 'C:\\ temp'skirows 1 maxerrors 0 fillrecord)";有什么建议吗? 【参考方案1】:

建议:

INSERT INTO DATABASE_COLUMN_INFO (nullcolumn, OWNER_NAME, TABLE_NAME, COLUMN_NAME, SYSTEM_ID, PLATFORM)
SELECT null, OWNER_NAME, TABLE_NAME, COLUMN_NAME, SYSTEM_ID, PLATFORM
FROM EXTERNAL 'table_info.csv'
(
OWNER_NAME varchar(500)
 ,TABLE_NAME  varchar(500)
 , COLUMN_NAME  varchar(500)
 , SYSTEM_ID  varchar(500)
 , PLATFORM  varchar(500)

)
USING (delimiter ',' REMOTESOURCE 'jdbc' LOGDIR 'C:\\temp' skiprows 1 maxerrors 0 fillrecord true)

【讨论】:

以上是关于如何提升 netezza 插入语句过程的主要内容,如果未能解决你的问题,请参考以下文章

选择语句从 Netezza 数据库中获取数据并插入 SQL Server 数据库 (SSIS)

使用存储过程将值插入到 netezza

在 netezza 存储过程中立即执行不会向表中插入值

极慢的 Netezza(数据库)批量插入

如果不存在则插入,否则在 Netezza 中更新

如何在 Netezza 中比较日期?