6

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

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

4 回答 4

3

在 Netezza 7.2 版中,您现在可以指定 IncludeHeader 选项以使用外部表实现此目的。

这记录在这里

于 2014-11-19T20:39:52.580 回答
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
于 2014-01-21T05:35:48.430 回答
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 文件中删除最后一列。

于 2014-06-16T16:58:41.377 回答
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 不会对选项应用突出显示,但它会执行并将标题写入第一行。

于 2017-01-30T22:04:41.497 回答