У меня есть набор данных, хранящийся в AWS S3, и я делаю запрос с помощью AWS Athena. В настоящее время данные структурированы в двух столбцах в S3 следующим образом:
Набор данных
Customer_ID | Products_csv
C1 | P1, P2, P3
C2 | P2, P4
При дополнительном требовании необходимо добавить еще одно поле — количество продукта, и вот как я планировал его хранить:
Customer_ID | Product:Quantity(csv)
C1 | P1:3, P2:1, P3:5
C2 | P2:2, P4:7
Если для таблицы в athena соблюдать указанный выше формат, выполнить необходимые операции с данными будет не проще. Например, если для каждого клиента необходимо получить только продукты с количеством (>=3) (то есть P1, P3 для клиента 1 и P4 для клиента 2), запрос будет сложным с указанной выше структурой или может не масштабироваться для огромного объема данных. .
Размер данных
Мы будем очень признательны за любые идеи о том, как хранить данные столбцов продуктов и количества в альтернативном формате, оптимальном для запросов.
🤔 А знаете ли вы, что...
SQL может работать с большими объемами данных благодаря оптимизации и индексам.
Более традиционный формат — отдельные строки для каждого отношения.
Например:
Customer_ID, Product, Quantity
C1, P1, 3
C1, P2, 1
C1, P3, 5
C2, P2, 2
C2, P4, 7
Миллионы строк — не проблема. Афине будет легче обработать более простой формат.
Вы получите гораздо лучшую производительность, если данные будут храниться в формате Parquet. Можно использовать Athena для преобразования данных в Parquet, но начните с использования CSV, чтобы убедиться, что все работает.