Redshift Spectrum Query - Запросу не хватает памяти на уровне запроса S3.

Я пытаюсь выполнить запрос с группировкой по 26 столбцам. Данные хранятся в S3 в формате паркета с разбивкой по дням. Запрос Redshift Spectrum возвращает ошибку ниже. Я не могу найти соответствующую документацию в aws по этому поводу.

Запросу не хватает памяти на уровне запроса S3

  1. Общее количество строк в таблице: 770 миллионов
  2. Общий размер стола в формате Parquet: 45 ГБ
  3. Количество записей в каждом разделе: 4,2 миллиона
  4. Конфигурация Million Redshift: один узел dc2.xlarge

Приложена таблица ddl  введите описание изображения здесь


person conetfun    schedule 18.10.2018    source источник
comment
обновите свой вопрос, указав ddl для таблиц, которые вы используете, приблизительное количество строк и sql, который вы используете. Также вы можете попробовать то же самое / подобное в Афине, это работает?   -  person Jon Scott    schedule 18.10.2018
comment
с каким запросом вы сталкиваетесь?   -  person Jon Scott    schedule 19.10.2018
comment
вам действительно нужна группировка? Трудно сказать, не видя вашего фактического запроса или данных, но похоже, что ваша схема таблицы уже содержит много столбцов, таких как event_at_timestamp и click_guid, агрегирование которых с использованием группировки может быть избыточным, потому что эти значения могут быть уникальными ...   -  person Nathan Griffiths    schedule 30.10.2018


Ответы (1)


Попробуйте объявить текстовые столбцы в этой таблице как VARCHAR, а не STRING. Также убедитесь, что вы используете минимально возможный размер VARCHAR для столбца, чтобы уменьшить объем памяти, необходимый для GROUP BY.

Также два дополнительных предложения:

  1. Рекомендуется всегда использовать как минимум 2 узла Redshift. Это дает вам бесплатный ведущий узел и позволяет вашим вычислительным узлам использовать всю свою оперативную память для обработки запросов.

  2. Группировка по такому количеству столбцов - необычный шаблон запроса. Если вы ищете дубликаты в таблице, рассмотрите возможность хеширования столбцов в одно значение и группировки по нему. Вот пример:

    SELECT MD5(ws_sold_date_sk
             ||ws_sold_time_sk
             ||ws_ship_date_sk
             ||ws_item_sk
             ||ws_bill_customer_sk
             ||ws_bill_cdemo_sk
             ||ws_bill_hdemo_sk
             ||ws_bill_addr_sk
             ||ws_ship_customer_sk
             ||ws_ship_cdemo_sk
             ||ws_ship_hdemo_sk
             ||ws_ship_addr_sk
             ||ws_web_page_sk
             ||ws_web_site_sk
             ||ws_ship_mode_sk)
         , COUNT(*)
    FROM spectrum.web_sales
    GROUP BY 1
    ORDER BY 2 DESC
    LIMIT 10
    ;
    
person Joe Harris    schedule 18.10.2018
comment
эй, отличные предложения. Я просто задаю этот вопрос для понимания, я играл с красным смещением, выделив 1% памяти для очереди WLM, и я выполнил запрос, он был слишком медленным, но работал без сбоев. Обычно, если памяти недостаточно, сервер базы данных будет использовать диск (даже красное смещение делает это), но почему он дает сбой вместо использования диска? - person Bhuvanesh; 28.10.2020