Ошибка сканирования AWS Spectrum Неожиданное завершение сжатого файла

#json #amazon-web-services #amazon-redshift #amazon-redshift-spectrum

Вопрос:

Я хочу использовать запросы AWS к спектру в Redshift на основе файла в S3.

Поскольку вы можете выбрать либо папку в S3, либо файл JSON, я решил использовать файл JSON в качестве местоположения.

Жучок:

Когда я ссылаюсь на файл test в папке — Красное смещение работает эффективно.

Когда я ссылаюсь на JSON file то, что ссылается на файл test , и пытаюсь выполнить запрос, который выполняется для всего файла, он завершается неудачей:

 select count(*)
from test
 

Ошибка: Unexpected end of compressed file. File may be truncated.

Странная вещь — если я запрашиваю только количество строк X, это работает:

 select *
from test
limit 100;
 

Это означает, что столбцы таблицы, которую я создал (когда я создавал внешнюю таблицу), верны. Я что-то пропустил в файле JSON? Вот как я это написал (взято из документов AWS):

 {
  "entries": [
    {"url":"s3://s3_bucket/SpectrumTest/test.gz", "meta": { "content_length": 4668469 } }
  ]
}
 

Ответ №1:

content_length это размер файла в bytes . Поскольку файл изменился, но манифест JSON остался со старой длиной содержимого, он не загрузил весь файл, что привело к ошибке в конце сжатого файла.

Причина, по которой это limit 100 сработало, заключается в том, что DBeaver сохранил результаты в кэше.

Надеюсь, это поможет кому-нибудь еще в будущем.