在netezza中创建带有标题的外部表(postgres)

时间:2013-04-30 16:59:12

标签: csv netezza

我正在创建一个外部表,如下所示

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命令来完成它。

由于

4 个答案:

答案 0 :(得分:2)

在Netezza的7.2版本中,您现在可以指定IncludeHeader选项来实现外部表格。

记录在案here

答案 1 :(得分: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

答案 2 :(得分: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文件中的最后一列。

答案 3 :(得分: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不对该选项应用突出显示,但它会执行并向第一行写入标题。