簡體   English   中英

Db2 使用 FIXED 格式創建外部表

[英]Db2 external table creation with FIXED format

我正在嘗試使用 FIXED 格式創建/選擇 Db2 外部表,但沒有成功。

這是我嘗試過的:

來自 IBM pdf( https://www.tridex.org/wp-content/uploads/Db2ExternalTables_Tridex.Z437175BA4191210EE004E1D937494D09

db2 "CREATE EXTERNAL TABLE TABLE1_FIXED (col1 int, col2 varchar(20)) USING (DATAOBJECT '/home/myuser/myfile.fixed' FORMAT FIXED LAYOUT(REF BYTES 1,col1 BYTES \@1, col2 varchar(20) BYTES 4) RECORDLENGTH \@1+6)"
DB21034E  The command was processed as an SQL statement because it was not a valid Command Line Processor command.  During SQL processing it returned:
SQL0007N  The statement was not processed because a character that is not supported in SQL statements was included in the SQL statement.  Invalid character: "\".  Text preceding the invalid character: "F BYTES 1,col1 BYTES". 
SQLSTATE=42601

我已經嘗試了很多關於這個 SQL 查詢的事情,但沒有任何成功。

我還嘗試從一個簡單的表創建一個外部表:

[i1156@pc-l-0037(el040701_dev:) ~]$ db2 "create table TABLE (col1 char(1) not null)"
DB20000I  The SQL command completed successfully.

db2 "CREATE EXTERNAL TABLE TABLE_EXT (col1 char(1) not null) USING (DATAOBJECT '/home/myuser/TABLE.fixed' FORMAT FIXED LAYOUT(col1 char(1)) RECORDLENGTH 1)"
DB20000I  The SQL command completed successfully.

cat TABLE.fixed
abc

db2 "select * from TABLE_EXT"
SQL1476N  The current transaction was rolled back because of error "-5199".  
SQLSTATE=40506

外部表創建似乎沒問題,但是當我在這個外部表上運行“選擇 *”時,我得到了 SQL1476N 錯誤。

我希望有人可以幫助我;)謝謝

最后,我已經能夠取得進展並解決了最初的問題。

在我的簡單測試 sql 查詢中,我忘記在 LAYOUT 選項的列定義之后指定“字節”選項。

而且,我猜我的輸入文件“TABLE.fixed”需要有行尾字符,原來情況並非如此。 編輯它並用 LF 分隔每一行后,我可以在我的外部表上運行“select *”。 也許這是外部表解析的限制。

以下是步驟:

cat TABLE.fixed
a
b
c

db2 "CREATE EXTERNAL TABLE TABLE_EXT (col1 char(1) not null) USING (DATAOBJECT '/home/myuser/TABLE.fixed' FORMAT FIXED LAYOUT(col1 char(1) BYTES 1))"

db2 "select * from TABLE_EXT"

COL1
----
a   
b   
c   

  3 record(s) selected.

關於包含引用的其他 SQL 查詢,我也能夠通過將 '\@' 序列替換為 '&' 來解決該問題(以下查詢是根據我的需要改編的,具有 null 值):

cat table1_ASC.txt
N1          Nrow1                
N2          Nrow2                
N45         Y                    

db2 "CREATE EXTERNAL TABLE TABLE1_FIXED (col1 int, col2 varchar(20)) USING (DATAOBJECT '/home/myuser/table1_ASC.txt' FORMAT FIXED LAYOUT(ref BYTES 1, col1 int BYTES 11 nullif &1='Y', ref BYTES 1, col2 varchar(20) BYTES 20 nullif &3='Y'))"

db2 "select * from TABLE1_FIXED"

COL1        COL2                
----------- --------------------
          1 row1                
          2 row2                
          3 -                   

  3 record(s) selected.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM