2013-04-30 121 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不会将突出显示应用于该选项,但会执行并将标题写入第一行。