Найти в Дзене

Миграция из Netezza в Greenplum

Для удобства я буду использовать сокращения Netezza (NZ) и Greenplum (GP) При миграции с NZ на GP сталкиваешься с проблемой, что SQL запросы написанные для NZ отрабатывают не так как в GP, а некоторых функций в GP и вовсе нет. В этой статье я перечислю некоторые особенности с которыми я сталкивался (их на самом деле на много больше) Далее слева я буду отображать как выглядит в NZ, а справа в GP Типы данных x::byteint -> x::smallint x::nvarchar(20) -> left(x::text, 20) int_to_string(x, byteint) -> x::text Функции замены nvl(x,-1) -> coalesce(x,-1) - если null то -1 nvl2(x, 'u', 'i') -> decode(x, null, 'i', 'u') - если Null то i иначе u NullToValu(x, y) -> coalesce(x, y) - если x = null то y NullToEmpty(x) -> coalesce(x, '') - если x = null то '' NullToZero(x) -> coalesce(x, 0) - если x = null то 0 Функции которых нет в GP le
Оглавление

Для удобства я буду использовать сокращения Netezza (NZ) и Greenplum (GP)

При миграции с NZ на GP сталкиваешься с проблемой, что SQL запросы написанные для NZ отрабатывают не так как в GP, а некоторых функций в GP и вовсе нет.

В этой статье я перечислю некоторые особенности с которыми я сталкивался (их на самом деле на много больше)

Далее слева я буду отображать как выглядит в NZ, а справа в GP

Типы данных

x::byteint -> x::smallint
x::nvarchar(20) -> left(x::text, 20)
int_to_string(x, byteint) -> x::text

Функции замены

nvl(x,-1) -> coalesce(x,-1) - если null то -1
nvl2(x, 'u', 'i') -> decode(x, null, 'i', 'u') - если Null то i иначе u
NullToValu(x, y) -> coalesce(x, y) - если x = null то y
NullToEmpty(x) -> coalesce(x, '') - если x = null то ''
NullToZero(x) -> coalesce(x, 0) - если x = null то 0

Функции которых нет в GP

len(x) -> length(x) - длина строки x
min(x, y) -> least(x, y) - меньшее среди списка
max(x, y) -> greatest(x, y) - максимальная среди списка
x:y -> (x:text || y::text)::int - соединение двух чисел в одно

Функции с датами

last_day(dt) - последний день в месяце

создадим функцию last_day
создадим функцию last_day

add_months(dt, m) - изменить дату на количество месяцев

создадим функцию add_months
создадим функцию add_months

months_between(dt1, dt2) - количество месяцев между датами

создадим функцию months_between
создадим функцию months_between

Надеюсь кому то пригодятся мои заметки