A big-endian data variable registers, then every query fails: Byte-swapped arrays not supported

Aberta Para iniciantes
#288 0 comentários 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 2 dias

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
2/5
Tempo estimado
1-3 horas
Facilidade para iniciantes
72/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Ativa
Stack de tecnologia
numpy, python
Domínio
backend, databases

Direção de pesquisa

Comece pelo código que converte os valores de um bloco de dados em uma coluna Arrow. Como a issue não indica o arquivo nem o teste, localize essa conversão e leia os pontos que a chamam. Reproduza o problema com o Dataset big-endian e a consulta fornecidos e, em seguida, verifique os testes próximos sobre conversão para Arrow. O trabalho está concluído quando a consulta funciona com valores com os bytes invertidos e continua funcionando com valores que já estão na ordem de bytes da máquina.

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

Descrição

bug

A Dataset whose data variable is big-endian, as a NetCDF file written on a big-endian machine, or some FITS or binary files, can be, registers without error, and then every query on it fails.

import numpy as np, xarray as xr, xarray_sql as xql

ds = xr.Dataset({"w": (("a",), np.zeros(3, ">f8"))}, coords={"a": np.arange(3)})
ctx = xql.Context()
ctx.from_dataset("t", ds)
ctx.sql("SELECT * FROM t").to_pandas()

On main:

DataFusion error: FFI error: Execution error: Error reading batch from stream: ArrowNotImplementedError: Byte-swapped arrays not supported

pyarrow can't make an array from a byte-swapped NumPy array. With #275, such a Dataset is read lazily, as on main, so it fails the same way.

Expected: the query works. One fix is to convert the values to the machine's byte order (values.astype(values.dtype.newbyteorder("="))) when making a block's Arrow column. That costs a copy, which an array in the machine's byte order doesn't need.

Linguagem predominante
Python
Estrelas
142
Forks
19
Merge médio
3d 47min
PRs com merge (30d)
8

Preparar o ambiente

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 xqlsystems/xarray-sql

Todas as issues de xqlsystems/xarray-sql

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.