#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 сохранил результаты в кэше.
Надеюсь, это поможет кому-нибудь еще в будущем.