Перейти к основному содержимому
Перейти к основному содержимому

Руководство по переводу SQL Amazon Redshift

Типы данных

Пользователи, перемещающие данные между ClickHouse и Redshift, сразу же заметят, что ClickHouse предлагает более широкий диапазон типов, которые также менее ограничительные. В то время как Redshift требует от пользователей указывать возможные длины строк, даже если они переменные, ClickHouse устраняет это ограничение и бремя с пользователя, храня строки без кодирования в байтах. Таким образом, тип String в ClickHouse не имеет ограничений или требований к спецификации длины.

Более того, пользователи могут использовать массивы, кортежи и перечисления, которые отсутствуют в Redshift в качестве первоклассных объектов (хотя массивы/структуры можно имитировать с помощью SUPER) и вызывают общие неудовольствия у пользователей. Кроме того, ClickHouse позволяет сохранять состояния агрегации, как во время запроса, так и даже в таблице. Это позволит предварительно агрегировать данные, обычно с использованием материализованного представления, что может значительно улучшить производительность запросов для общих запросов.

Ниже мы сопоставляем эквивалентный тип ClickHouse для каждого типа Redshift:

RedshiftClickHouse
SMALLINTInt8 *
INTEGERInt32 *
BIGINTInt64 *
DECIMALUInt128, UInt256, Int128, Int256, Decimal(P, S), Decimal32(S), Decimal64(S), Decimal128(S), Decimal256(S) - (высокая точность и возможные диапазоны)
REALFloat32
DOUBLE PRECISIONFloat64
BOOLEANBool
CHARString, FixedString
VARCHAR **String
DATEDate32
TIMESTAMPDateTime, DateTime64
TIMESTAMPTZDateTime, DateTime64
GEOMETRYGeo Data Types
GEOGRAPHYGeo Data Types (менее развиты, например, нет систем координат - можно эмулировать с помощью функций)
HLLSKETCHAggregateFunction(uniqHLL12, X)
SUPERTuple, Nested, Array, JSON, Map
TIMEDateTime, DateTime64
TIMETZDateTime, DateTime64
VARBYTE **String в сочетании с Bit и Encoding функциями
* ClickHouse дополнительно поддерживает беззнаковые целые числа с расширенными диапазонами т.е. UInt8, UInt32, UInt32 и UInt64.
**Тип String в ClickHouse по умолчанию не ограничен, но может быть ограничен до конкретных длин с помощью Ограничений.

Синтаксис DDL

Ключи сортировки

Как ClickHouse, так и Redshift имеют концепцию "ключа сортировки", которая определяет, как данные сортируются при хранении. Redshift определяет ключ сортировки с помощью предложения SORTKEY:

CREATE TABLE some_table(...) SORTKEY (column1, column2)

Сравнительно, ClickHouse использует предложение ORDER BY для указания порядка сортировки:

CREATE TABLE some_table(...) ENGINE = MergeTree ORDER BY (column1, column2)

В большинстве случаев вы можете использовать те же столбцы и порядок ключа сортировки в ClickHouse, как и в Redshift, при условии, что вы используете тип COMPOUND по умолчанию. Когда данные добавляются в Redshift, вам следует запустить команды VACUUM и ANALYZE, чтобы пересортировать вновь добавленные данные и обновить статистику для планировщика запросов - в противном случае несортируемое пространство будет расти. Для ClickHouse такой процесс не требуется.

Redshift поддерживает несколько удобных функций для ключей сортировки. Первая - автоматические ключи сортировки (с использованием SORTKEY AUTO). Хотя это может быть целесообразно для начала, явные ключи сортировки обеспечивают наилучшую производительность и эффективность хранения, когда ключ сортировки оптимален. Вторая - ключ сортировки INTERLEAVED, который придает равный вес подмножеству столбцов в ключе сортировки, чтобы улучшить производительность, когда запрос использует один или несколько вторичных столбцов сортировки. ClickHouse поддерживает явные проекции, которые достигают того же конечного результата с немного другой настройкой.

Пользователям следует учитывать, что концепция "первичного ключа" представляет собой разные вещи в ClickHouse и Redshift. В Redshift первичный ключ напоминает традиционную концепцию РСУБД, предназначенную для обеспечения ограничений. Однако они не строго соблюдаются в Redshift и вместо этого действуют как подсказки для планировщика запросов и распределения данных между узлами. В ClickHouse первичный ключ обозначает столбцы, используемые для построения разреженного первичного индекса, который используется для обеспечения порядка данных на диске, максимизируя сжатие и избегая загрязнения первичного индекса и излишнего расхода памяти.