gbase 导出_使用GBase 8t外部表进行高速数据导入导出
什么是外部表
在GBase 8t中,支持創建一種不受數據庫服務器管理的數據表,表的數據來源于格式化的數據文件,數據庫使用FIFO VP以Nonblocking的方式來操作表中的數據,因此可以實現高速的數據導入導出。
創建外部表
外部表可以采用以下三種方法創建:
1.使用帶有列指定的 CREATE EXTERNAL TABLE 語句
CREATE EXTERNAL TABLE et_state
(code CHAR(2),sname CHAR(15))
USING (DATAFILES ("DISK:/data/NA_states.unl", "DISK:/data/SA_states.unl"));
2.使用帶有一個 SAMEAS 子句的 CREATE EXTERNAL TABLE
CREATE EXTERNAL TABLE et_state SAMEAS state
USING (DATAFILES ("DISK:/data/states.unl"));
3.使用 SELECT 語句從一個數據源選擇構成外部表的數據
SELECT *
FROM state
INTO EXTERNAL et_state
USING (DATAFILES("DISK:/data/states.unl"));
使用外部表進行數據導入
下面是一個數據加載的例子:
欲加載的表結構如下:
create table warehouse
(
w_id smallint not null ,
w_ytd decimal(12,2),
w_tax decimal(4,4),
w_name char(10),
w_street_1 char(20),
w_street_2 char(20),
w_city char(20),
w_state char(2),
w_zip char(9)
) ;
create unique index idx_warehouse on warehouse(w_id);
數據文件路徑為/home/informix/data/warehouse.unl,使用外部表進行數據加載時要保證每行數據末尾都要有一個分隔符,否則會報錯,這與使用load進行數據導入時不同。
如下為數據導入步驟,
1,創建表warehouse,不創建表warehouse上的索引
2,創建外部表warehouse_ext
drop table if exists warehouse_ext;
create external table warehouse_ext sameas warehouse
using
(datafiles("DISK:/home/informix/data/warehouse.unl"),
format "delimited",
DELIMITER "|",
rejectfile "/home/informix/data/warehouse.err",
maxerrors 10000
);
3,手工做一個檢查點
使用使用onmode -c將表結構刷會磁盤,否則在數據加載過程中會先寫物理日志,影響數據加載的速度。
4,修改表warehouse為裸表
這樣才能使用到Informix中的Light Append,加快數據導入的速度
alter table warehouse type(raw);
5,打開PDQ,進行數據導入,并創建表上的索引
set pdqpriority 100;
insert into warehouse select * from warehouse_ext;
alter table warehouse type(standard);
create unique index idx_warehouse on warehouse(w_id);
數據導入導出監控
可以使用onstat使用來查看數據的導入導出速度
查看數據導入進度:
[informix@centos7 ~]$ onstat -g lap
GBase 8t V8.5 Server Version 12.10.FC4G1AEE -- On-Line -- Up 00:01:06 -- 2394568 Kbytes
Light Append Info
session id address cur_ppage la_npused la_ndata la_nrows bufcnt
la_nrows為當前導入的記錄數
查看數據導出進度:
[informix@centos7 ~]$ onstat -g scn
GBase 8t Database Server Version 12.10.FC4G1AEE -- On-Line -- Up 02:09:24 -- 1385528 Kbytes
Light Scan Info
descriptor address next_lpage next_ppage ppage_left bufcnt look_aside
RSAM batch sequential scan info
SesID Thread Partnum Rowid Rows Scan'd Scan Type Lock Mode Notes
" 88 167 50013c 3041907 1185648 Light +Test Forward row lookup,Must copy,"
RSAM batch index scan info
SesID Thread Partnum Scan Type Lock Mode Notes
Rows Scan 為當前導出的記錄數
注意事項
在使用外部表進行數據加載的時候有兩點需要注意,
使用Light Append加快數據導入的速度,與light scan不同的是,我們沒有辦法強制啟用light append,而只能在同時滿足如下2個特定條件的情況下,數據庫優化器將自動啟用。
? Raw table 即對表的操作取消日志
create raw table…,或者通過alter table tabname type(raw);來創建或者修改為rawtable。對臨時表with no log情況也有效。
? No Index 表沒有任何索引
在創建完外部表后需要手工做一個檢查點的操作,否則會將數據先寫入物理日志,再往dbspace上寫。我們可以使用onstat -D監控數據讀寫情況,使用外部表進行數據加載時,是不會寫物理日志或只有少量的物理日志讀寫,如沒有手工做檢查點,則會看到有大量的物理日志讀寫,這一步完全是可跳過的。
使用外部表進行數據導出
使用外部表進行數據導出時大體的步驟與上面的相同,只是在進行數據導出時需要打開輕量掃描的開關
set environment IFX_BATCHEDREAD_TABLE '1';
總結
以上是生活随笔為你收集整理的gbase 导出_使用GBase 8t外部表进行高速数据导入导出的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ae等高线_AE插件-地形海拔轮廓等高线
- 下一篇: RK3399Pro LVDS接口触摸屏调