我正在创建一个外部表,如下所示
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命令来完成它。
由于
答案 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不对该选项应用突出显示,但它会执行并向第一行写入标题。