首页 > 解决方案 > 如何从弹性表中复制数据

问题描述

我有一个巨大的 CSV 文件,我将它加载到 Flex Table 中,该 csv 包含的列比需要的多。现在我想将数据从 flex 表复制到我的常规表(包括映射列)。我尝试了“插入选择”,但出现了一些关于 cast 的错误,因此我尝试运行 Vertica 不支持的插入忽略。就我而言,我不在乎丢失消息。我想过用被拒绝的表写副本,但我找不到正确的语法。谢谢

标签: verticaflextable

解决方案


您需要在弹性表中具体您想要的列。因此,当您运行该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 和 string 值。

创建弹性表并加载 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();

然后,您可以将数据从弹性表插入到常规表中(不需要视图):

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

推荐阅读