Redshift Spectrum Query - Запрос исчерпал память в слое запросов S3 - PullRequest
0 голосов
/ 18 октября 2018

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

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

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

Прилагается таблица ddl enter image description here

1 Ответ

0 голосов
/ 18 октября 2018

Попробуйте объявить текстовые столбцы в этой таблице как 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
    ;
    
...