我想使用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;
如何做到这一点?
答案 0 :(得分:0)
COPY FROM VERTICA
和EXPORT TO VERTICA
旨在在群集之间复制数据。即使您确实环回了连接,也无法使用拒绝,因为COPY FROM VERTICA
不支持拒绝。映射是严格的,所以如果不能强制它就会失败。
你必须:
INSERT ... SELECT ... WHERE <conditions to filter out data that won't coerce>
INSERT ... SELECT <expressions that massage data that won't coerce>
使用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