如何在同一个数据库中使用“COPY FROM VERTICA”将数据从一个表复制到另一个表

时间:2016-10-19 11:54:09

标签: sql vertica

我想使用COPY FROM VERTICA命令将数据从一个表复制到另一个表中。我有一个包含大量数据的表,我想从中选择一些数据(其中field1 ='some val'等)并复制到另一个表。

源表有long varchar类型的列,我想在另一个具有不同列类型的表中复制这些值,如varchar,date和boolean等。我想要的是只应在目标表中复制有效值,错误数据应该被拒绝。

我尝试使用如下所示的insert命令移动数据,但问题是如果只有一行包含无效数据,那么它将终止进程(我没有在目标表中复制任何内容)。

INSERT INTO cb.destTable(field1, field2, field3)
Select cast(field1 as varchar), cast(field2 as varchar), cast(field3 as int)
FROM sourceTable Where Id = 2;

如何做到这一点?

3 个答案:

答案 0 :(得分:0)

COPY FROM VERTICAEXPORT TO VERTICA旨在在群集之间复制数据。即使您确实环回了连接,也无法使用拒绝,因为COPY FROM VERTICA不支持拒绝。映射是严格的,所以如果不能强制它就会失败。

你必须:

  1. INSERT ... SELECT ... WHERE <conditions to filter out data that won't coerce>
  2. INSERT ... SELECT <expressions that massage data that won't coerce>

  3. 使用vsql将数据导出到文件中(您可以关闭页眉/页脚,关闭填充,将分隔符设置为数据中不存在的内容等)然后使用副本加载回来。

答案 1 :(得分:0)

尝试将其导出到csv文件中:

=&gt; / o output.csv

=&gt;选择cast(field1 as varchar),cast(field2 as varchar),cast(field3 as int)FROM sourceTable Where Id = 2;

=&GT; / O

然后使用COPY命令将其加载回所需的表格。

COPY FROM&#39;(csv_directory)&#39; DELIMITER&#39;(逗号或您配置的分隔符)&#39; NO ESCAPE NULL&#39;(NULL指示符)&#39;跳过1;

答案 2 :(得分:0)

它们是否在同一个Vertica数据库中?如果是这样,另一种选择是:

MultiIndex