@@ -285,10 +285,17 @@ void BigqueryArrowScanFunction::BigqueryArrowScanExecute(ClientContext &ctx,
285285 NumericCast<idx_t >(state.chunk ->arrow_array .length ) - state.chunk_offset );
286286 data.lines_read += output_size;
287287
288+ auto ensure_column_id_coverage = [&](DataChunk &chunk) {
289+ if (!state.column_ids .empty () && state.column_ids .size () != chunk.ColumnCount ()) {
290+ state.column_ids .clear ();
291+ }
292+ };
293+
288294 if (gstate.CanRemoveFilterColumns ()) {
289295 state.all_columns .Reset ();
290296 state.all_columns .SetCardinality (output_size);
291297
298+ ensure_column_id_coverage (state.all_columns );
292299 ArrowTableFunction::ArrowToDuckDB (state,
293300 data.arrow_table .GetColumns (),
294301 state.all_columns ,
@@ -358,13 +365,15 @@ void BigqueryArrowScanFunction::BigqueryArrowScanExecute(ClientContext &ctx,
358365 bool do_cast = data.requires_cast || geometry_cast_needed;
359366 if (!do_cast) {
360367 // Direct write to output
368+ ensure_column_id_coverage (output);
361369 ArrowTableFunction::ArrowToDuckDB (state,
362370 data.arrow_table .GetColumns (),
363371 output,
364372 data.lines_read - output_size);
365373 } else {
366374 state.all_columns .Reset ();
367375 state.all_columns .SetCardinality (output_size);
376+ ensure_column_id_coverage (state.all_columns );
368377 ArrowTableFunction::ArrowToDuckDB (state,
369378 data.arrow_table .GetColumns (),
370379 state.all_columns ,
0 commit comments