У меня есть набор данных, хранящийся в 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), запрос будет сложным с указанной выше структурой или может не масштабироваться для огромного объема данных. .
Размер данных
Мы будем очень признательны за любые идеи о том, как хранить данные столбцов продуктов и количества в альтернативном формате, оптимальном для запросов.
Да, данные хранятся в файле со столбцами фиксированной ширины и разделены вертикальной чертой. Чтобы включить дополнительное поле (количество) для каждого продукта для каждого клиента, я придумал этот формат (P1:3, P2:1, P3:5). Хотелось бы знать другой способ форматирования этих данных для их создания.
Более традиционный формат — отдельные строки для каждого отношения.
Например:
Customer_ID, Product, Quantity
C1, P1, 3
C1, P2, 1
C1, P3, 5
C2, P2, 2
C2, P4, 7
Миллионы строк — не проблема. Афине будет легче обработать более простой формат.
Вы получите гораздо лучшую производительность, если данные будут храниться в формате Parquet. Можно использовать Athena для преобразования данных в Parquet, но начните с использования CSV, чтобы убедиться, что все работает.
Вы хотите сказать, что данные хранятся в текстовом файле со столбцами фиксированной ширины, разделенными вертикальной чертой (
|
), а во втором поле есть данные, разделенные запятыми? Если да, можете ли вы получить данные в другом формате?