Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

`Table.scan(options=...)` silently ignores S3 properties for FileIO during data materialization (`to_pandas` / `to_arrow`)

Aberta
#3,166 1 comentário 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
4/5
Tempo estimado
3-5 dias
Facilidade para iniciantes
55/100
Tipo de issue
Bug
Clareza
Razoavelmente clara
Status de atividade
Pouca atividade
Stack de tecnologia
aws, python
Domínio
data-engineering

Direção de pesquisa

Comece em pyiceberg/table/init.py, em DataScan.to_arrow(), e então acompanhe como ArrowScan recebe self.io durante a materialização de to_arrow() e to_pandas(). Verifique como as opções de scan e as propriedades de FileIO são tratadas e considere os pontos de entrada de teste existentes para scan e materialização. A tarefa estará concluída quando as opções de timeout do S3 no nível do scan forem respeitadas por FileIO durante as leituras de manifestos e dados, com cobertura de regressão.

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

Descrição

Apache Iceberg version

0.11.0 (latest release)

Please describe the bug 🐞

Description:
When passing an options dictionary to Table.scan(options=...), the properties (such as s3.connect-timeout or s3.request-timeout) are accepted by the DataScan object but are never propagated to the underlying FileIO (e.g., PyArrowFileIO) when actual data materialization occurs via methods like to_pandas() or to_arrow().
Because ArrowScan is initialized with the FileIO that was created during catalog instantiation (table.io), any S3-specific configurations provided at the scan level are completely bypassed. This causes operations reading numerous manifest files to fall back to the AWS C++ SDK default timeouts (often 10s-30s), leading to unexpected curlCode: 28 (Timeout was reached) errors even when generous timeouts are explicitly requested in the scan options.

Steps to Reproduce:

# 1. Load catalog with default (or no) S3 timeout properties

from pyiceberg.catalog import load_catalog
catalog = load_catalog("my_catalog", **{
    "uri": "...",
    "s3.endpoint": "..."
})
table = catalog.load_table("my_namespace.my_table")

# 2. Attempt to scan with explicit S3 timeout options

scan_options = {
    "s3.connect-timeout": "600.0",
    "s3.request-timeout": "600.0"
}


# The options are accepted by DataScan...

scan = table.scan(options=scan_options)
# 3. ...but completely ignored during S3 I/O operations (ArrowScan)
# This may throw a timeout error if RGW/S3 latency spikes, ignoring the 600s setting above.
df = scan.to_pandas()
Expected Behavior:

Properties passed via options in Table.scan() should cascade down and either update or override the table.io.properties for the duration of the scan. Specifically, s3.* configurations should be respected by the underlying FileIO (e.g., PyArrowFileIO) when downloading manifest lists or data files.

Actual Behavior:

The options passed to Table.scan() are stored in the DataScan instance but are never passed to the ArrowScan class or the FileIO instance during to_arrow() / to_pandas().
The ArrowScan relies entirely on the unmodified self.io object originally initialized by the catalog:

# In pyiceberg/table/__init__.py -> DataScan.to_arrow()
        return ArrowScan(
            self.table_metadata, 
            self.io,  # <--- options are missing here!
            self.projection(), 
            self.row_filter, 
            self.case_sensitive, 
            self.limit
        ).to_table(self.plan_files())

Environment:

  • PyIceberg Version: 0.11.1 (and earlier)
  • PyArrow Version: 18.0.0
  • Storage: Ceph S3 / Rados Gateway (RGW)
Suggested Fix:

Ideally, DataScan should merge its options with self.io.properties and instantiate a new FileIO, or ArrowScan should be modified to accept the scan-level options and apply them dynamically to the FileSystem instance before reading files.

Willingness to contribute
  • I can contribute a fix for this bug independently
  • I would be willing to contribute a fix for this bug with guidance from the Iceberg community
  • I cannot contribute a fix for this bug at this time
Linguagem predominante
Python
Estrelas
1.1k
Forks
589
Merge médio
1d 20h
PRs com merge (30d)
68

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.

Mais de apache/iceberg-python

Todas as issues de apache/iceberg-python

Issues semelhantes

Mais issues de Python

Receba novas issues na sua caixa de entrada

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