2017-05-08 50 views
1

當我有一個包含一列用浮漂特定文件類型,我在使用閱讀插入KDB類型的錯誤插入我爲F

`table insert ("TISISIFIIIFFIbIFFFFFFIIIFIIFFFFIIIIIIIIIIIIFFFFFFIIFFIIIIFFIIIIIIIIIIIIIIIII"; enlist "\t") 0:`:my_file.txt 

不幸的是,有時在列中的值恰好是所有整數和該txt文件保存爲整數,而不是浮動,所以1而不是1.0,似乎kdb是拋出一個類型錯誤。有沒有辦法讓kdb接受以浮點格式保存的格式?

我確實有很多帶有浮點的列,理論上這個問題可能出現在其中的任何一個。如果列類型爲float,是否有某種方法可以告訴kdb insert以將任何int視爲float?

+0

您是否使用了'meta'函數來檢查列數據類型?我無法重現該問題(在kdb + 3.2上) –

回答

2

'類型錯誤實際上是從插入中發生的。您試圖插入一些已分析的數據,但每列的類型不符合'表'中每列的類型。 你基本上說你的原始數據可以包含浮點數,所以你將不得不讀取它們作爲浮點數。 解析完成後,你對該列做了什麼。

1)保持爲浮動,讀入作爲花車,插入的花車,列應該是一個浮動「表」預讀(我想這是你想要你的問題會是什麼):

update "f"$COLUMN from `table 
`table insert (1#"F";1#"\t") 0:`myfile.txt 

2)更新爲整數,然後插入到「表」 - 你將不得不先更新表的模式,作爲花車閱讀,然後再運行更新後,每讀:

update "i"$COLUMN from `table 
`table insert update "i"COLUMN from (1#"F";1#"\t") 0:`myfile.txt 

另一個選項,你可能要考慮,但請先測試,因爲它可能會取代太多,是取代尾隨的「 .0「,然後只讀爲整數:

q)\cd /var/tmp 
q)`:myfile.txt 0:("x\tx1";"1.0\t2.0";"3.0\t1.0") 
q)\sed -i -e 's/.0//g' myfile.txt 
q)("II";1#"\t")0:`myfile.txt 
+0

我實際上想將它們保留爲浮動。問題似乎是一些值與csv一樣保存爲整數,圓形浮點數將保存爲整數,因此,115.0將保存爲115. – chrise

+0

如果某些值在csv中保存爲整數,則可以全部讀取它們作爲花車罰款 - 只要保持你的專欄作爲浮動,閱讀他們作爲浮動,並作爲浮動插入(#1上面) –