如何从Flex表复制数据

时间:2019-07-01 10:18:38

标签: vertica flextable

我有一个巨大的CSV文件,我已将其加载到Flex Table中,该csv包含的列超出了要求。 现在我想将数据从flex表复制到我的常规表(包括映射列)中。 我尝试了“插入选择”,但是在转换时遇到了一些错误,因此我尝试运行Vertica不支持的插入忽略。 就我而言,我不在乎丢失的消息。 我考虑过使用拒绝表进行写复制,但是我找不到正确的语法。 谢谢

1 个答案:

答案 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