|
140 | 140 | └─StreamTableScan { table: items, columns: [name, embedding, id] }
|
141 | 141 | - id: create_table_and_index
|
142 | 142 | sql: |
|
143 |
| - create table items (id int primary key, name string, unindexed timestamptz, embedding vector(3)) append only; |
| 143 | + create table items (id int primary key, unindexed timestamptz, name string, embedding vector(3)) append only; |
144 | 144 | create index vector_index on items using flat (embedding) include (name) with (distance_type = 'inner_product');
|
145 | 145 | - before:
|
146 | 146 | - create_table_and_index
|
|
150 | 150 | LogicalProject { exprs: [items.id, items.name] }
|
151 | 151 | └─LogicalTopN { order: [$expr1 ASC], limit: 5, offset: 0 }
|
152 | 152 | └─LogicalProject { exprs: [items.id, items.name, Neg(InnerProduct(items.embedding, '[1,2,3]':Vector(3))) as $expr1] }
|
153 |
| - └─LogicalScan { table: items, columns: [items.id, items.name, items.unindexed, items.embedding, items._rw_timestamp] } |
| 153 | + └─LogicalScan { table: items, columns: [items.id, items.unindexed, items.name, items.embedding, items._rw_timestamp] } |
154 | 154 | optimized_logical_plan_for_batch: |-
|
155 | 155 | LogicalVectorSearch { distance_type: InnerProduct, top_n: 5, left: $2, right: '[1,2,3]':Vector(3), output_columns: [items.id:Int32, items.name:Varchar] }
|
156 | 156 | └─LogicalScan { table: items, columns: [items.id, items.name, items.embedding] }
|
|
172 | 172 | └─LogicalTopN { order: [$expr1 ASC], limit: 5, offset: 0 }
|
173 | 173 | └─LogicalProject { exprs: [items.id, items.name, Neg(InnerProduct(items.embedding, '[1,2,3]':Vector(3))) as $expr1] }
|
174 | 174 | └─LogicalFilter { predicate: (items.id > 0:Int32) }
|
175 |
| - └─LogicalScan { table: items, columns: [items.id, items.name, items.unindexed, items.embedding, items._rw_timestamp] } |
| 175 | + └─LogicalScan { table: items, columns: [items.id, items.unindexed, items.name, items.embedding, items._rw_timestamp] } |
176 | 176 | optimized_logical_plan_for_batch: |-
|
177 | 177 | LogicalVectorSearch { distance_type: InnerProduct, top_n: 5, left: $2, right: '[1,2,3]':Vector(3), output_columns: [items.id:Int32, items.name:Varchar] }
|
178 | 178 | └─LogicalScan { table: items, columns: [items.id, items.name, items.embedding], predicate: (items.id > 0:Int32) }
|
|
191 | 191 | LogicalProject { exprs: [items.id, items.name] }
|
192 | 192 | └─LogicalTopN { order: [$expr1 ASC], limit: 5, offset: 0 }
|
193 | 193 | └─LogicalProject { exprs: [items.id, items.name, Neg(InnerProduct(items.embedding, OpenaiEmbedding('{"model": "model"}':Jsonb, 'hello':Varchar)::Vector(3))) as $expr1] }
|
194 |
| - └─LogicalScan { table: items, columns: [items.id, items.name, items.unindexed, items.embedding, items._rw_timestamp] } |
| 194 | + └─LogicalScan { table: items, columns: [items.id, items.unindexed, items.name, items.embedding, items._rw_timestamp] } |
195 | 195 | optimized_logical_plan_for_batch: |-
|
196 | 196 | LogicalVectorSearch { distance_type: InnerProduct, top_n: 5, left: $2, right: OpenaiEmbedding('{"model": "model"}':Jsonb, 'hello':Varchar)::Vector(3), output_columns: [items.id:Int32, items.name:Varchar] }
|
197 | 197 | └─LogicalScan { table: items, columns: [items.id, items.name, items.embedding] }
|
|
214 | 214 | └─LogicalProject { exprs: [$expr1] }
|
215 | 215 | └─LogicalTopN { order: [$expr2 ASC], limit: 5, offset: 0 }
|
216 | 216 | └─LogicalProject { exprs: [(items.id + 1:Int32) as $expr1, Neg(InnerProduct(items.embedding, '[3,1,2]':Vector(3))) as $expr2] }
|
217 |
| - └─LogicalScan { table: items, columns: [items.id, items.name, items.unindexed, items.embedding, items._rw_timestamp] } |
| 217 | + └─LogicalScan { table: items, columns: [items.id, items.unindexed, items.name, items.embedding, items._rw_timestamp] } |
218 | 218 | optimized_logical_plan_for_batch: |-
|
219 | 219 | LogicalProject { exprs: [count, $expr1] }
|
220 | 220 | └─LogicalAgg { group_key: [$expr1], aggs: [count] }
|
|
238 | 238 | LogicalProject { exprs: [items.id, items.name, items.embedding] }
|
239 | 239 | └─LogicalTopN { order: [$expr1 ASC], limit: 5, offset: 0 }
|
240 | 240 | └─LogicalProject { exprs: [items.id, items.name, items.embedding, Neg(InnerProduct(items.embedding, '[3,1,2]':Vector(3))) as $expr1] }
|
241 |
| - └─LogicalScan { table: items, columns: [items.id, items.name, items.unindexed, items.embedding, items._rw_timestamp] } |
| 241 | + └─LogicalScan { table: items, columns: [items.id, items.unindexed, items.name, items.embedding, items._rw_timestamp] } |
242 | 242 | optimized_logical_plan_for_batch: |-
|
243 | 243 | LogicalVectorSearch { distance_type: InnerProduct, top_n: 5, left: $2, right: '[3,1,2]':Vector(3), output_columns: [items.id:Int32, items.name:Varchar, items.embedding:Vector(3)] }
|
244 | 244 | └─LogicalScan { table: items, columns: [items.id, items.name, items.embedding] }
|
|
257 | 257 | LogicalProject { exprs: [items.id, items.name, items.unindexed] }
|
258 | 258 | └─LogicalTopN { order: [$expr1 ASC], limit: 5, offset: 0 }
|
259 | 259 | └─LogicalProject { exprs: [items.id, items.name, items.unindexed, Neg(InnerProduct(items.embedding, '[3,1,2]':Vector(3))) as $expr1] }
|
260 |
| - └─LogicalScan { table: items, columns: [items.id, items.name, items.unindexed, items.embedding, items._rw_timestamp] } |
| 260 | + └─LogicalScan { table: items, columns: [items.id, items.unindexed, items.name, items.embedding, items._rw_timestamp] } |
261 | 261 | optimized_logical_plan_for_batch: |-
|
262 |
| - LogicalVectorSearch { distance_type: InnerProduct, top_n: 5, left: $3, right: '[3,1,2]':Vector(3), output_columns: [items.id:Int32, items.name:Varchar, items.unindexed:Timestamptz] } |
263 |
| - └─LogicalScan { table: items, columns: [items.id, items.name, items.unindexed, items.embedding] } |
| 262 | + LogicalProject { exprs: [items.id, items.name, items.unindexed, vector_distance] } |
| 263 | + └─LogicalVectorSearch { distance_type: InnerProduct, top_n: 5, left: $3, right: '[3,1,2]':Vector(3), output_columns: [items.id:Int32, items.unindexed:Timestamptz, items.name:Varchar] } |
| 264 | + └─LogicalScan { table: items, columns: [items.id, items.unindexed, items.name, items.embedding] } |
264 | 265 | batch_plan: |-
|
265 | 266 | BatchProject { exprs: [items.id, items.name, items.unindexed] }
|
266 |
| - └─BatchTopN { order: [$expr1 ASC], limit: 5, offset: 0 } |
267 |
| - └─BatchExchange { order: [], dist: Single } |
268 |
| - └─BatchTopN { order: [$expr1 ASC], limit: 5, offset: 0 } |
269 |
| - └─BatchProject { exprs: [items.id, items.name, items.unindexed, Neg(InnerProduct(items.embedding, '[3,1,2]':Vector(3))) as $expr1] } |
270 |
| - └─BatchScan { table: items, columns: [items.id, items.name, items.unindexed, items.embedding], distribution: UpstreamHashShard(items.id) } |
| 267 | + └─BatchProject { exprs: [items.id, items.name, items.unindexed, $expr1] } |
| 268 | + └─BatchTopN { order: [$expr1 ASC], limit: 5, offset: 0 } |
| 269 | + └─BatchExchange { order: [], dist: Single } |
| 270 | + └─BatchTopN { order: [$expr1 ASC], limit: 5, offset: 0 } |
| 271 | + └─BatchProject { exprs: [items.id, items.unindexed, items.name, Neg(InnerProduct(items.embedding, '[3,1,2]':Vector(3))) as $expr1] } |
| 272 | + └─BatchScan { table: items, columns: [items.id, items.unindexed, items.name, items.embedding], distribution: UpstreamHashShard(items.id) } |
271 | 273 | - before:
|
272 | 274 | - create_table_and_index
|
273 | 275 | sql: |
|
|
281 | 283 | └─LogicalTopN { order: [$expr1 ASC], limit: 5, offset: 0 }
|
282 | 284 | └─LogicalProject { exprs: [items.embedding, items.id, $expr1] }
|
283 | 285 | └─LogicalProject { exprs: [items.id, Neg(InnerProduct(items.embedding, '[3,1,2]':Vector(3))) as $expr1, items.embedding] }
|
284 |
| - └─LogicalScan { table: items, columns: [items.id, items.name, items.unindexed, items.embedding, items._rw_timestamp] } |
| 286 | + └─LogicalScan { table: items, columns: [items.id, items.unindexed, items.name, items.embedding, items._rw_timestamp] } |
285 | 287 | optimized_logical_plan_for_batch: |-
|
286 | 288 | LogicalProject { exprs: [count, items.id] }
|
287 | 289 | └─LogicalAgg { group_key: [items.id], aggs: [count] }
|
|
0 commit comments