apache / apache/iceberg-python

Upsert gets slow on tables with many columns

Aberta
#3,860 0 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Linguagem predominante
Python
Estrelas
1.1k
Forks
588
Merge médio
1d 23h
PRs com merge (30d)
84

Descrição

Feature Request / Improvement

upsert compares the matched rows one cell at a time, so it gets slower with every extra column, not just with every extra row.

On a table with 200 columns, comparing 20k matched rows takes around 20 seconds on my machine, before anything is written.

To reproduce:

import time
import pyarrow as pa
from pyiceberg.table.upsert_util import get_rows_to_update

rows, cols = 20_000, 200
table = pa.table({"pk": pa.array(range(rows)), **{f"c{i}": pa.array([float(i)] * rows) for i in range(cols)}})

start = time.monotonic()
get_rows_to_update(table, table, ["pk"])  # nothing has changed
print(time.monotonic() - start)

Guia de contribuição

Nenhum guia de contribuição indexado para este repositório

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Direção de pesquisa

Comece com pyiceberg.table.upsert_util.get_rows_to_update e execute a reprodução fornecida do PyArrow com 20,000 linhas e 200 colunas. Compare o comportamento atual em tabelas inalteradas e rastreie onde as linhas correspondentes são comparadas; considera-se concluído quando a comparação de um upsert sem alterações evita a lentidão dependente do número de colunas relatada, preservando as linhas esperadas para atualização.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
python
Domínio
databases, performance
Tipo de issue
Funcionalidade
Dificuldade
3/5
Tempo estimado
1-2 dias
Status de atividade
Ativa
Clareza
Razoavelmente clara
Facilidade para iniciantes
68/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.