Распределение пространства данных типа AWS Redshift - PullRequest
0 голосов
/ 14 сентября 2018

Я планирую создать идентификатор CHARACTER VARYING (100) ENCODE ZSTD, id2 CHARACTER VARYING (5000) ENCODE ZSTD.

Теперь мои id и id1 имеют размер только 20 символов.

В AWS Redshift происходит ли выделение пространства на основе фактического размера данных, равного 20, или оно выделяется первым на основе определенного размера, равного 100 и 5000 соответственно.Если это так, как производительность влияет на эти сценарии.

Спасибо TOM

Ответы [ 2 ]

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

Здесь есть две вещи.

Хранение: при использовании varchars объем потребляемого пространства зависит от фактического требуемого пространства, а не от объявленной длины (в байтах).

Производительность запроса: Redshift не знает заранее, сколько байтов потребуется для хранения varchar.Он распределяет количество байтов на основе длины, объявленной для varchar.Это приведет к тому, что запросы будут занимать больше памяти, что в некоторых случаях может привести к тому, что запросы попадут на диск.Это может оказать особенно негативное влияние на производительность вакуума.

Резюме: Объявите varchars как можно короче.Итак, в вашем случае, если это 20 или около того, может быть, 25-30 будет хорошей длиной, чтобы пойти с.

0 голосов
/ 15 сентября 2018

Amazon Redshift хранит данные с использованием кодировки сжатия , поэтому выделять минимальное пространство не обязательно.

Часто лучше разрешить Redshift выбирать тип сжатия при загрузке данных с помощью команды COPY, а не указывать его самостоятельно. Это приведет к выбору наиболее эффективного метода на основе первых 100 000 загруженных строк.

...