我有一个巨大的CSV文件,我已将其加载到Flex Table中,该csv包含的列超出了要求。 现在我想将数据从flex表复制到我的常规表(包括映射列)中。 我尝试了“插入选择”,但是在转换时遇到了一些错误,因此我尝试运行Vertica不支持的插入忽略。 就我而言,我不在乎丢失的消息。 我考虑过使用拒绝表进行写复制,但是我找不到正确的语法。 谢谢
答案 0 :(得分:0)
您需要materialize弹性表中所需的列。因此,当您运行COPY
命令时,只会加载与正确数据类型匹配的值。
假设您的数据如下:
col1,col2,col3,col4,col4
1.2,2019-07-01 10:00:00,1,string 2
1.2,2019-07-01 10:00:00,string 1,string 2
您只关心col1,col2,col3。 col3包含混合的int和字符串值。
创建flex表并加载csv:
CREATE FLEX TABLE flex_table
(
col1 float,
col2 timestamp,
col3 int
);
COPY public.flex_table FROM '/data/csv/data_june7_15.csv' PARSER fcsvparser();
然后,您可以将数据从flex表插入到常规表中(不需要视图):
CREATE TABLE regular_table
(
col1 float,
col2 timestamp,
col3 int
);
INSERT INTO regular_table (col1, col2, col3) SELECT col1, col2, col3 FROM flex_table;
SELECT * FROM regular_table;
col1 | col2 | col3
------+---------------------+------
1.2 | 2019-07-01 10:00:00 |
1.2 | 2019-07-01 10:00:00 | 1