Выберите верхние / нижние 50% таблицы в запросе Redshift sql - PullRequest
0 голосов
/ 13 июля 2020

Использование psql (Postgres 12.3.1), запущенного на Windows Server 2019. На этом сервере 64 ГБ ОЗУ, и я пытаюсь выполнить следующий запрос в базе данных Amazon Redshift:

psql -h amazon-redshift-database.redshift.amazonaws.com -d DATABASE -U USER -p 5439 -a -c "select * from realy.large_table" -F ',' -o "D:\Program Files\PostgreSQL\12\data\amazon_redshift_download\really.large_table.csv"

Выдает ошибку: «недостаточно памяти» в середине запроса. Таблица содержит 458 968 689 строк с 5 столбцами: varchar (50), varchar (50), varchar (50), integer, timestamp.

MS SQL, кажется, имеет следующие возможности:

"select top 50 percent * from really.large_table ..."

Есть ли у PostgreSQL что-нибудь подобное? Если нет, есть ли способ разбить мои запросы на проценты, чтобы я мог уменьшить размер / потребление памяти для моего запроса? Я пробовал настроить производительность и безуспешно использовать серверы с большим объемом памяти.

Версия:

psql -h amazon-redshift-database.redshift.amazonaws.com -d DATABASE-U USER -p 5439 -a -c "select version();"
 version
---------------------------------------------------------------------------------------------------------------------------
 PostgreSQL 8.0.2 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 3.4.2 20041017 (Red Hat 3.4.2-6.fc3), Redshift 1.0.16966
(1 row)

Пробовал:

select * from really.large_table tablesample (50)
select * from really.large_table tablesample(50)
select * from really.large_table tablesample (50);
select * from really.large_table tablesample(50);
tablesample system (50)
tablesample system(50)
tablesample system (50);
tablesample system(50);
select * from tablesample system (50); <-with above combinations

Результат:

ERROR:  syntax error at or near "50"
LINE 1: select * from really.large_table tablesample(50)

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

1 Ответ

0 голосов
/ 30 июля 2020

Это было не самое желанное решение, но оно сработало для меня.

  1. Установить SQL Workbench / J

  2. Скачать и установите драйвер Redshift JDB C: https://docs.aws.amazon.com/redshift/latest/mgmt/connecting-using-workbench.htm

  3. Из административной командной строки запустите SQL Workbench J с помощью следующей команды Java (примечание: 60 г = 60 ГБ, установлено количество ОЗУ, которое вы хотите использовать):

    java -Xmx 60g -jar sqlworkbench.jar

  4. При запуске установите для параметра «Размер выборки» на главном экране значение X: 10,000

  5. Подключитесь к базе данных

  6. Используйте обозреватель баз данных GUI для экспорта данных.

  7. Расслабьтесь и долго ждите, пока он загрузит ваши большие таблицы

Он никогда не потреблял много оперативной памяти, когда размер выборки ограничен. Я считаю, что это ключевой шаг, а не увеличение объема памяти для приложения.

...