Минимизация проблем с SQL для миграций Netezza

Эта статья представляет собой пятую из семи статей, посвященных рекомендациям по переходу от Netezza к Azure Synapse Analytics. Эта статья посвящена рекомендациям по минимизации проблем с SQL.

Обзор

Характеристики сред Netezza

Совет

В начале 2000-х годов Netezza впервые разработала концепцию "устройства хранилища данных".

В 2003 году Netezza первоначально выпустила свой продукт устройства хранилища данных. Она сократила затраты на ввод и улучшила простоту использования методов массовой параллельной обработки (MPP), чтобы обеспечить более эффективную обработку данных, чем существующие мейнфреймы или другие технологии MPP, доступные в то время. С тех пор продукт развивался и много раз устанавливался в крупных финансовых учреждениях, телекоммуникационных и розничных компаниях. В исходной реализации использовалось собственное оборудование, в том числе программируемые для полей массивы шлюзов (или ППВМ) и она была доступна через сетевое подключение ODBC или JDBC через TCP/IP.

Большинство существующих установок Netezza находятся в локальной среде, поэтому многие пользователи рассматривают возможность переноса некоторых или всех своих данных Netezza в Azure Synapse Analytics, чтобы получить преимущества перехода в современную облачную среду.

Совет

Многие существующие установки Netezza — это хранилища данных, использующие модель мерных данных.

Технология Netezza часто используется для реализации хранилища данных, поддерживая сложные аналитические запросы на большие объемы данных с помощью SQL. Многомерные модели данных — схемы типа "звезда" или "снежинка" являются общими, как и реализация киосков данных для отдельных отделов.

Такое сочетание моделей SQL и многомерных данных упрощает миграцию в Azure Synapse, так как основные понятия и навыки SQL можно перенести. Рекомендуемый подход заключается в переносе существующей модели данных "как есть", чтобы снизить риски и время. Даже если конечное намерение состоит в том, чтобы внести изменения в модель данных (например, переход на модель хранилища данных), выполнить начальную миграцию "как есть", а затем внести изменения в облачную среду Azure, используя производительность, эластичную масштабируемость и преимущества затрат.

Хотя язык SQL стандартизирован, отдельные поставщики в некоторых случаях реализовали собственные расширения. В этом документе рассматриваются потенциальные SQL различия, которые могут возникнуть при миграции из устаревшей среды Netezza, и предоставляются обходные пути.

Реализация миграции на основе метаданных с помощью Фабрики данных Azure

Совет

Автоматизируйте процесс миграции с помощью возможностей Фабрики данных Azure.

Автоматизируйте и оркестрируйте процесс миграции, используя возможности среды Azure. Такой подход также позволяет снизить влияние миграции на существующую среду Netezza, нагрузка на которую уже может быть максимальной.

Фабрика данных Azure — это облачная служба интеграции данных, которая позволяет создавать управляемые данными рабочие процессы в облаке для оркестрации и автоматизации перемещения и преобразования данных. С помощью Фабрики данных можно создавать и включать в расписание управляемые данными рабочие процессы, так называемые конвейеры, которые могут принимать данные из разнородных хранилищ данных. Можно обрабатывать и преобразовывать эти данные с помощью таких служб вычислений, как Azure HDInsight Hadoop, Spark, Azure Data Lake Analytics и машинное обучение Azure.

Создавая метаданные для перечисления таблиц данных для переноса и их расположения, можно использовать средства фабрики данных для управления и автоматизации частей процесса миграции. Вы также можете использовать Azure Synapse Pipelines.

Различия SQL DDL между Netezza и Azure Synapse

Язык описания данных SQL (DDL)

Совет

Команды SQL DDL CREATE TABLE и CREATE VIEW содержат стандартные основные элементы, но также используются для определения вариантов, связанных с конкретной реализацией.

Стандарт ANSI SQL определяет базовый синтаксис для таких команд DDL, как CREATE TABLE и CREATE VIEW. Эти команды используются как в Netezza, так и в Azure Synapse, но они также были расширены, чтобы разрешить определение конкретных возможностей реализации, таких как индексирование, распределение таблиц и параметры секционирования.

В следующих разделах рассматриваются варианты, связанные с Netezza, которые следует учитывать во время миграции на Azure Synapse.

Рекомендации по таблице

Совет

Используйте существующие индексы для указания кандидатов на индексирование в перенесенном хранилище.

При переносе таблиц между разными технологиями между двумя средами физически перемещаются только необработанные данные и их описательные метаданные. Другие элементы базы данных из исходной системы, такие как индексы и файлы журналов, не переносятся напрямую, так как они могут быть не нужны или могут быть реализованы в новой целевой среде по-другому. Например, TEMPORARY параметр в синтаксисе Netezza CREATE TABLE эквивалентен префиксу имени таблицы с символом "#" в Azure Synapse.

Важно понимать, где в исходной среде использовались оптимизации производительности, такие как индексы. Это указывает, где можно добавить оптимизацию производительности в новую целевую среду. Например, если в исходной среде Teradata был создан неуникальный вторичный индекс (NUSI), это может указывать на то, что в перенесенной базе данных Azure Synapse следует создать некластеризованный индекс. Применение других нативных методов оптимизации производительности, например репликации таблиц, может быть более целесообразным, чем прямое создание индексов like-for-like.

Неподдерживаемые типы объектов базы данных Netezza

Совет

Функции netezza можно заменить функциями Azure Synapse.

Netezza реализует некоторые объекты базы данных, которые Azure Synapse не поддерживает напрямую, но есть методы достижения той же функциональности в новой среде:

  • Карты зон. В Netezza карты зон автоматически создаются и поддерживаются для некоторых типов столбцов и используются во время запроса, чтобы ограничить объем сканируемых данных. Карты зон создаются для следующих типов столбцов:

    • Столбцы INTEGER длиной 8 байтов или меньше.
    • Темпоральные столбцы. Например, DATE, TIME и TIMESTAMP.
    • столбцы CHAR, если они являются частью материализованного представления и указаны в предложении ORDER BY.

    Вы можете узнать, какие столбцы имеют карты зоны, с помощью nz_zonemap служебной программы, которая входит в набор средств NZ. В Azure Synapse карты зон не используются, но вы можете добиться аналогичных результатов с помощью определяемых пользователем типов индексов и/или секционирования.

  • Кластеризованные базовые таблицы (CBT). В Netezza CBT обычно используются для таблиц фактов, которые могут содержать миллиарды записей. Сканирование такой большой таблицы занимает много времени, поскольку для получения нужных записей может потребоваться полное сканирование таблицы. Организация записей в CBT позволяет Netezza группировать записи в одном или соседних экстентах. Так создаются карты зон, что повышает производительность благодаря уменьшению объема сканируемых данных.

    В Azure Synapse можно добиться аналогичного эффекта, используя секционирование и (или) другие индексы.

  • Материализованные представления. Netezza поддерживает материализованные представления и рекомендует создавать одно или несколько из них в больших таблицах с большим количеством столбцов, где в запросах регулярно используются только некоторые из этих столбцов. Система автоматически обслуживает материализованное представление при обновлении данных в базовой таблице.

    Azure Synapse поддерживает материализованные представления с той же функциональностью, что и Netezza.

Сопоставление типов данных Netezza

Совет

Оцените влияние неподдерживаемых типов данных в рамках этапа подготовки.

Большинство типов данных Netezza имеют прямой эквивалент в Azure Synapse. В таблице ниже представлены эти типы данных наряду с рекомендованными способами работы.

Тип данных Netezza Тип данных Azure Synapse
bigint bigint
BINARY VARYING(n) VARBINARY(n)
BOOLEAN BIT
BYTEINT TINYINT
CHARACTER VARYING(n) VARCHAR(n)
CHARACTER(n) CHAR(n)
DATE DATE(date)
DECIMAL(p,s) DECIMAL(p,s)
DOUBLE PRECISION FLOAT
FLOAT(n) FLOAT(n)
INTEGER INT
INTERVAL Azure Synapse сейчас не поддерживает типы данных INTERVAL напрямую, но их можно вычислить с помощью темпоральных функций, таких как DATEDIFF.
MONEY MONEY
NATIONAL CHARACTER VARYING(n) NVARCHAR(n)
NATIONAL CHARACTER(n) NCHAR(n)
NUMERIC(p,s) NUMERIC(p,s)
real ВЕЩЕСТВЕННОЕ ЧИСЛО
SMALLINT SMALLINT
ST_GEOMETRY(n) Azure Synapse сейчас не поддерживает пространственные типы данных, такие как ST_GEOMETRY, но данные могут храниться как VARCHAR или VARBINARY.
TIME TIME
TIME WITH TIME ZONE DATETIMEOFFSET
timestamp DATETIME

Создание языка описания данных (DDL)

Совет

Используйте существующие метаданные Netezza для автоматизации создания DDL CREATE TABLE и CREATE VIEW Azure Synapse.

При необходимости измените существующие скрипты Netezza CREATE TABLE и CREATE VIEW, чтобы создать эквивалентные определения с измененными типами данных, как описано ранее. Как правило, это включает удаление или изменение любых дополнительных предложений Netezza, таких как ORGANIZE ON.

Однако все сведения, указывающие текущие определения таблиц и представлений в существующей среде Netezza, сохраняются в таблицах системного каталога. Это лучший источник этой информации, так как она гарантированно будет обновлена и завершена. Имейте в виду, что поддерживаемая пользователем документация может не синхронизироваться с текущими определениями таблиц.

Получите доступ к этим сведениям с помощью таких служебных программ, как nz_ddl_table и создайте CREATE TABLE инструкции DDL. Измените эти инструкции для эквивалентных таблиц в Azure Synapse.

Совет

Сторонние средства и службы могут автоматизировать задачи сопоставления данных.

Партнеры Майкрософт предлагают средства и службы для автоматизации миграции, включая сопоставление типов данных. Кроме того, если сторонний инструмент ETL, такой как Informatica или Talend, уже используется в среде Netezza, этот инструмент может реализовать любые необходимые преобразования данных.

Различия SQL DML между Netezza и Azure Synapse

Язык обработки данных SQL (DML)

Совет

Команды SQL DML SELECT, INSERT и UPDATE имеют стандартные основные элементы, но также могут реализовывать различные параметры синтаксиса.

Стандарт ANSI SQL определяет базовый синтаксис для таких команд DML, как SELECT, INSERT, UPDATE и DELETE. И Netezza, и Azure Synapse используют эти команды, но в некоторых случаях существуют различия в реализации.

В следующих разделах рассматриваются команды DML для Netezza, которые следует учитывать во время миграции на Azure Synapse.

Различия в синтаксисе SQL DML

Учитывайте эти различия в синтаксисе языка обработки данных DML SQL между Netezza SQL и Azure Synapse при миграции:

  • STRPOS. В Netezza функция STRPOS возвращает положение подстроки в строке. Эквивалентной функцией в Azure Synapse является CHARINDEX, но порядок аргументов обратный. Например, SELECT STRPOS('abcdef','def')... в Netezza эквивалентно SELECT CHARINDEX('def','abcdef')... в Azure Synapse.

  • AGE. Netezza поддерживает оператор AGE, задающий интервал между двумя темпоральными значениями, такими как метки времени и даты. Например, SELECT AGE('23-03-1956','01-01-2019') FROM.... В Azure Synapse DATEDIFF указывает интервал. Например, SELECT DATEDIFF(day, '1956-03-26','2019-01-01') FROM.... Обратите внимание на последовательность представления даты.

  • NOW(). В Netezza используется NOW() для представления CURRENT_TIMESTAMP в Azure Synapse.

Функции, хранимые процедуры и последовательности

Совет

В рамках этапа подготовки оцените количество и тип переносимых объектов, не относящихся к данным.

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

В рамках этапа подготовки создайте инвентаризацию объектов, которые необходимо перенести, и определите методы их обработки. Затем назначьте соответствующее выделение ресурсов в плане проекта.

В среде Azure могут быть устройства, которые заменяют функциональные возможности, реализованные в среде Netezza в виде функций или хранимых процедур в среде Netezza. В таком случае, эффективнее использовать встроенные средства Azure вместо переписывания кода функций Netezza.

Совет

Сторонние продукты и службы могут автоматизировать миграцию элементов, отличных от данных.

Партнеры Майкрософт предлагают средства и службы, которые могут автоматизировать миграцию, включая сопоставление типов данных. Также, сторонние инструменты извлечения, преобразования и загрузки, такие как Informatica или Talend, которые уже используется в среде IBM Netezza, могут реализовать любые необходимые преобразования данных.

Дополнительные сведения о каждом из этих элементов см. в следующих разделах.

Функции

Как и большинство систем баз данных, Netezza поддерживает системные и определяемые пользователем функции в реализации SQL. При миграции на другую платформу базы данных, например Azure Synapse, доступны общие системные функции, которые могут быть перенесены без изменений. Некоторые системные функции могут иметь немного другой синтаксис, но необходимые изменения можно автоматизировать. Возможно потребуется перекодировать системные функции, в которых нет эквивалентов, таких как произвольные пользовательские функции, с помощью языков, доступных в целевой среде. В Azure Synapse для реализации определяемых пользователем функций применяется популярный язык Transact-SQL. В Netezza определяемые пользователем функции программируются на языках nzLua или C++.

Хранимые процедуры

Большинство современных продуктов баз данных позволяют хранить процедуры в базе данных. Netezza предоставляет язык NZPLSQL, основанный на Postgres PL/pgSQL. Как правило, хранимая процедура содержит инструкции SQL и процедурную логику, а также может возвращать данные или состояние.

Azure Synapse Analytics также поддерживает хранимые процедуры с помощью T-SQL, поэтому, если необходимо перенести хранимые процедуры, перекодируйте их соответствующим образом.

Последовательности

В Netezza последовательность — это именованный объект базы данных, созданный с помощью CREATE SEQUENCE, который может предоставить уникальное значение с помощью метода NEXT VALUE FOR. Используйте эти значения для создания уникальных чисел в качестве значений суррогатных ключей для значений первичного ключа.

В Azure Synapse нетCREATE SEQUENCE. Последовательности обрабатываются с помощью IDENTITY для создания суррогатных ключей или управляемого удостоверения с помощью кода SQL для создания следующего порядкового номера в ряде.

Использование EXPLAIN для проверки устаревших SQL

Совет

Найдите потенциальные проблемы миграции с помощью реальных запросов из существующих системных журналов запросов.

Зафиксируйте некоторые репрезентативные SQL инструкции из журналов устаревших запросов, чтобы оценить устаревшие SQL Netezza для обеспечения совместимости с Azure Synapse. Затем добавьте к этим запросам префикс EXPLAIN и (предполагая, что в Azure Synapse используется модель данных, перенесенная по аналогичному принципу с теми же именами таблиц и столбцов), запустите эти инструкции EXPLAIN в Azure Synapse. При любом несовместимом SQL ошибка повторится. Используйте эту информацию, чтобы определить масштаб задачи перекодирования. Этот подход не требует загрузки данных в среду Azure, требуется только создание соответствующих таблиц и представлений.

Сопоставление IBM Netezza с T-SQL

Соответствие IBM Netezza T-SQL с сопоставлением типов данных Azure Synapse SQL приведено в этой таблице:

Тип данных IBM Netezza Тип данных Azure Synapse SQL
массиве Не поддерживается
BIGINT BIGINT
binary large object [(n[K|M|G])] nvarchar [(n|max)]
 blob [(n[K|M|G])] nvarchar [(n|max)]
 byte [(n)] binary [(n)]|varbinary(max)
 byteint smallint
 char varying [(n)] varchar [(n|max)]
character varying [(n)] varchar [(n|max)]
 char [(n)] char [(n)]|varchar(max)
character [(n)] char [(n)]|varchar(max)
 character large object [(n[K|M|G])] varchar [(n|max)
 clob [(n[K|M|G])] varchar [(n|max)
 набор данных Не поддерживается 
 Дата Дата
 dec [(p[,s])] decimal [(p[,s])]
 decimal [(p[,s])] decimal [(p[,s])]
 double precision float(53)
 float [(n)] float [(n)]
 graphic [(n)] nchar [(n)]| varchar(max)
 interval Не поддерживается 
 json [(n)] nvarchar [(n|max)]
 long varchar nvarchar(max)
 long vargraphic nvarchar(max)
 mbb Не поддерживается 
 mbr Не поддерживается 
 number [((p|*)[,s])] numeric [(p[,s])]
 numeric [(p [,s])]  numeric [(p[,s])]
 period Не поддерживается 
 real  real
 smallint smallint
 st_geometry Не поддерживается 
 time time
 time with time zone datetimeoffset
 TIMESTAMP  datetime2
 timestamp with time zone datetimeoffset
 varbyte varbinary [(n|max)]
 varchar [(n)]  varchar [(n)]
 vargraphic [(n)] nvarchar [(n|max)]
 varray Не поддерживается 
 Xml Не поддерживается 
 xmltype Не поддерживается 

Сводка

Типичные устаревшие установки Netezza реализованы таким образом, чтобы упростить миграцию в Azure Synapse. Они используют SQL для аналитических запросов к большим объемам данных и имеют некоторую форму многомерной модели данных. Эти факторы делают их подходящими кандидатами для миграции в Azure Synapse.

Чтобы свести к минимуму задачу миграции фактического кода SQL, следуйте этим рекомендациям:

  • Первоначальная миграция хранилища данных должна осуществляться как есть, чтобы свести к минимуму риск и затраты времени, даже если конечная среда будет включать другую модель данных, например хранилище данных.

  • Ознакомьтесь с различиями между реализацией Netezza SQL и Azure Synapse.

  • Используйте метаданные и журналы запросов из существующей реализации Netezza, чтобы оценить влияние различий и спланировать подход к смягчению последствий.

  • По возможности автоматизируйте процесс, чтобы свести к минимуму ошибки, риски и время миграции.

  • Рассмотрите возможность использования специализированных партнеров и служб Майкрософт для упрощения миграции.

Дальнейшие действия

Дополнительные сведения о средствах Майкрософт и сторонних производителей см. в следующей статье этой серии: Средства для переноса хранилища данных Netezza в Azure Synapse Analytics.