Запрос строк по индексу в S3 Select

С mysql следующий код:

SELECT * from TABLE limit 5, 10 

будет тянуть с 5 по 10 ряды таблицы. Что является эквивалентом для этого через механизм SQL в S3 select (PrestoDB, я полагаю)? Есть ли конструктор или оператор числовых значений, который работает с S3 select?

2 ответа

Решение

Документация по S3 Select находится по адресу: Справочник по SQL для Amazon S3 Select и Amazon Glacier Select - Amazon Glacier

LIMIT пункт задокументирован как:

LIMIT number

LIMIT Предложение ограничивает количество записей, которые вы хотите, чтобы запрос возвращал на основе числа.

Итак, не доступно.

Это недоступно как функция, но это то, как мы сделали для нашего проекта.

Перед загрузкой файлов CSV в S3 мы просто добавили поле row_index в CSV.

row_index, field1
1, a, 
2, b,
3, c,
4, d,
5, d,

Итак, запрос

Select * from Table Limit 1, 4

Будет заменен на

Select * from s3 where row_index >= 1 and row_index <= 4

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

Например, файл с 100k-rows.csv можно разделить на 10 файлов.

1-10000-rows.csv
10001-20000-rows.csv
...

Тогда вы можете прочитать offset, limitпеременная, чтобы определить, какой файл следует запрашивать для ваших строк. Например

to fetch rows 200- 300 - You will query the 1-10000-rows.csv
to fetch rows 12000- 12500  - You will query the 10001-20000-rows.csv

Согласно их документации, PrestoDB поддерживает предложение LIMIT, но только с одним аргументом для количества строк. Он не поддерживает второй аргумент для смещения.

Прочитайте документы для себя: https://prestodb.io/docs/current/sql/select.html

Другие вопросы по тегам