Как эффективно хранить и запрашивать данные с помощью пары ключ-значение в AWS S3 и Athena?

У меня есть набор данных, хранящийся в 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), запрос будет сложным с указанной выше структурой или может не масштабироваться для огромного объема данных. .

Размер данных

  1. Количество идентификаторов клиентов (в виде строк) составит несколько миллионов.
  2. Продукты могут находиться в диапазоне 0–100 для каждого идентификатора клиента.

Мы будем очень признательны за любые идеи о том, как хранить данные столбцов продуктов и количества в альтернативном формате, оптимальном для запросов.

Вы хотите сказать, что данные хранятся в текстовом файле со столбцами фиксированной ширины, разделенными вертикальной чертой (|), а во втором поле есть данные, разделенные запятыми? Если да, можете ли вы получить данные в другом формате?

John Rotenstein 15.07.2024 23:42

Да, данные хранятся в файле со столбцами фиксированной ширины и разделены вертикальной чертой. Чтобы включить дополнительное поле (количество) для каждого продукта для каждого клиента, я придумал этот формат (P1:3, P2:1, P3:5). Хотелось бы знать другой способ форматирования этих данных для их создания.

Swapna K E 16.07.2024 06:02
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
2
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Более традиционный формат — отдельные строки для каждого отношения.

Например:

Customer_ID, Product, Quantity
C1, P1, 3
C1, P2, 1
C1, P3, 5
C2, P2, 2
C2, P4, 7

Миллионы строк — не проблема. Афине будет легче обработать более простой формат.

Вы получите гораздо лучшую производительность, если данные будут храниться в формате Parquet. Можно использовать Athena для преобразования данных в Parquet, но начните с использования CSV, чтобы убедиться, что все работает.

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