我想将多个行有效地插入VERTICA。在PostgreSQL(以及可能的其他SQL实现)中,可以在一个语句中INSERT
行多行,这比单次插入(特别是在自动提交模式下)要快得多。
一个在新创建的表中加载两行的最小自包含示例如下所示:(a):
CREATE TABLE my_schema.my_table (
row_count int,
some_float float,
some_string varchar(8));
INSERT INTO my_schema.my_table (row_count, some_float, some_string)
VALUES (1,1.0,'foo'),(2,2.0,'bar');
但是,这样做的好处是,可以将值的束缚顺序更改为(b):
INSERT INTO my_schema.my_table (some_float, some_string, row_count)
VALUES (1.0,'foo',1),(2.0,'bar',2);
此外,此语法还允许省略列,然后将其填充为默认值(例如,自动递增整数等)。
但是,VERTECA似乎没有可能用相同的微调进行多行插入。实际上,模拟类似行为的唯一方法似乎是UNION
一起为(c):
INSERT INTO my_schema.my_table SELECT 1,1.0,'foo' UNION SELECT 2,2.0,'bar';
如该答案:Vertica SQL insert multiple rows in one statement。
但是,这似乎仅在插入的列的顺序与其初始定义的顺序匹配时有效。我的问题是,可以制作像(c)这样的单个插入物,但是可以像(b)中那样更改列顺序吗?还是我解决这个问题完全错了?如果是这样,那么多行插入有什么选择?我应该尝试COPY LOCAL
吗?
答案 0 :(得分:2)
Just list the columns in the insert
:
INSERT INTO my_schema.my_table (row_count, some_float, some_string)
SELECT 1,1.0,'foo'
UNION ALL
SELECT 2,2.0,'bar';
Note the use of UNION ALL
instead of UNION
. UNION
incurs overhead for removing duplicates, which is not needed.