2013-04-30 90 views
5

我創建一個外部表如下圖所示創建與Netezza公司頭外部表(Postgres的)

CREATE EXTERNAL TABLE '~\test.csv' 
USING (DELIMITER ',' Y2BASE 2000 ENCODING 'internal' REMOTESOURCE 'ODBC' ESCAPECHAR '\') 
AS SELECT * FROM TEST_TABLE; 

它工作正常。我的問題是:

有沒有一種方法可以將頭文件的值命名爲test.csv文件中的列名?在Netezza或Postgres中可能嗎?

我認爲我們可以使用COPY,但是我想使用EXTERNAL TABLE命令來完成它。

感謝

回答

1

這不是漂亮,而且它會開銷一定量可能添加到查詢,但你可以做這樣的事情:

CREATE EXTERNAL TABLE ... AS 
SELECT ColumnId, OtherColumn 
FROM (
    SELECT FALSE as IsHeader, ColumnId::VARCHAR(512), OtherColumn::VARCHAR(512) 
    FROM TEST_TABLE 
    UNION ALL 
    SELECT TRUE as IsHeader, 'ColumnId', 'OtherColumn' 
) x 
ORDER BY IsHeader DESC 
0

這是另一個例子,沿着同樣的想法那qSlug給...

CREATE EXTERNAL TABLE 
'C:\HEADER_TEST.csv' USING 
(DELIMITER '|' ESCAPECHAR '\' Y2BASE 2000 REMOTESOURCE 'ODBC') AS 

--actual query goes here. Leave the 'data' field on there. 
(select store_name, address1, 'data' 
from yourtable 
limit 10) 
union 
--field names go here. Leave the 'header' field on there. 
select 'store_name', 'address1', 'header' 
from _v_dual 
order by 3 desc 

然後你可以刪除你的csv文件的最後一列。

+0

只適用於所有字符數據或將所有實際數據先轉換爲字符。 – Chris 2014-10-22 02:25:08

2

在Netezza的7.2版本中,您現在可以指定IncludeHeader選項來實現這個功能。

這是記錄here

0

有實際上是一個辦法,包括文件中的標頭,如果你有Netezza的版本7.2或更高。

該選項是'includeheader',但它看起來不像Aginity Workbench突出顯示'includeheader',就像它是一個選項(至少在我的版本中爲4.8)。

CREATE EXTERNAL TABLE '~\test.csv' 
    USING 
( 
DELIMITER ',' 
Y2BASE 2000 
ENCODING 'internal' 
REMOTESOURCE 'ODBC' 
ESCAPECHAR '\' 
/****THIS IS THE OPTION ****/ 
INCLUDEHEADER 
) 
     AS 
    SELECT * 
    FROM TEST_TABLE; 

您會注意到Aginity不會將突出顯示應用於該選項,但會執行並將標題寫入第一行。