Какой объект табличного процессора может иметь следующие характеристики количество высота количество

Обновлено: 21.11.2024

Amazon EBS предоставляет следующие типы томов, которые различаются по характеристикам производительности и цене, чтобы вы могли адаптировать производительность и стоимость хранилища к потребностям ваших приложений. Типы томов делятся на следующие категории:

Твердотельные накопители (SSD) — оптимизированы для транзакционных рабочих нагрузок, включающих частые операции чтения/записи с малым объемом операций ввода-вывода, где основным атрибутом производительности является IOPS.

Жесткие диски (HDD) — оптимизированы для больших потоковых рабочих нагрузок, где доминирующим атрибутом производительности является пропускная способность.

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

Существует несколько факторов, которые могут повлиять на производительность томов EBS, например конфигурация экземпляра, характеристики ввода-вывода и потребность в рабочей нагрузке. Чтобы полностью использовать количество операций ввода-вывода в секунду, выделенное для тома EBS, используйте инстансы, оптимизированные для EBS. Дополнительные сведения о том, как максимально эффективно использовать тома EBS, см. в разделе Производительность тома Amazon EBS на инстансах Linux.

Дополнительную информацию о ценах см. в разделе Цены на Amazon EBS .

Твердотельные накопители (SSD)

Тома на SSD, предоставляемые Amazon EBS, относятся к следующим категориям:

Твердотельный накопитель общего назначения — обеспечивает баланс цены и производительности. Мы рекомендуем эти тома для большинства рабочих нагрузок.

Выделенный твердотельный накопитель IOPS. Обеспечивает высокую производительность для критически важных рабочих нагрузок с малой задержкой или высокой пропускной способностью.

Ниже приводится сводка вариантов использования и характеристик томов на основе SSD. Информацию о максимальном количестве операций ввода-вывода в секунду и пропускной способности на инстанс см. в разделе Инстансы, оптимизированные для Amazon EBS.

Интерактивные приложения с малой задержкой

Среды разработки и тестирования

Стабильная производительность операций ввода-вывода в секунду

Более 64 000 операций ввода-вывода в секунду или 1000 МиБ/с пропускной способности

Рабочие нагрузки, требующие стабильной производительности операций ввода-вывода в секунду или более 16 000 операций ввода-вывода в секунду

Рабочие нагрузки базы данных с интенсивным вводом-выводом

* Ограничение пропускной способности составляет от 128 МБ/с до 250 МБ/с в зависимости от размера тома. Тома меньше или равные 170 ГиБ обеспечивают максимальную пропускную способность 128 МиБ/с. Тома больше 170 ГиБ, но меньше 334 ГиБ обеспечивают максимальную пропускную способность 250 МиБ/с, если доступны кредиты для пакетной передачи. Объемы, превышающие или равные 334 ГиБ, обеспечивают скорость 250 МиБ/с независимо от количества кредитов. тома gp2, созданные до 3 декабря 2018 г. и не измененные с момента создания, могут не достичь полной производительности, если вы не измените том.

† Максимальное количество операций ввода-вывода в секунду и пропускная способность гарантируются только для инстансов, созданных на основе системы Nitro, с производительностью более 32 000 операций ввода-вывода в секунду. Другие экземпляры гарантируют до 32 000 IOPS и 500 МБ/с. Тома io1, созданные до 6 декабря 2017 года и не измененные с момента создания, могут не достичь полной производительности, если вы не измените том.

‡ Тома io2 Block Express поддерживаются только инстансами R5b и X2. Тома io2, подключенные к этим экземплярам во время или после запуска, автоматически запускаются в Block Express. Дополнительные сведения см. в разделе Тома io2 Block Express.

Жесткие диски (HDD)

Тома на жестких дисках, предоставляемые Amazon EBS, относятся к следующим категориям:

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

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

Ниже приводится сводка вариантов использования и характеристик томов на жестких дисках. Информацию о максимальном количестве операций ввода-вывода в секунду и пропускной способности на инстанс см. в разделе Инстансы, оптимизированные для Amazon EBS.

Хранилище, ориентированное на пропускную способность, для данных, к которым редко обращаются

Сценарии, в которых важна минимальная стоимость хранения

Типы томов предыдущего поколения

В следующей таблице описаны типы томов EBS предыдущего поколения. Если вам нужна более высокая производительность или согласованность производительности, чем могут обеспечить тома предыдущего поколения, мы рекомендуем вам рассмотреть возможность использования SSD общего назначения ( gp2 и gp3 ) или других текущих типов томов. Дополнительную информацию см. в разделе Тома предыдущего поколения .

< td>Случаи использования < /tr>
Магнитный
Тип тома стандартный
Рабочие нагрузки, при которых доступ к данным осуществляется нечасто
Размер тома 1 ГиБ-1 ТиБ
Максимальное количество операций ввода-вывода в секунду на том 40–200
Максимальная пропускная способность на том 40– 90 МБ/с
Загрузочный том Поддерживается

Тома SSD общего назначения (gp3)

Тома SSD общего назначения ( gp3 ) предлагают экономичное хранилище, которое идеально подходит для широкого спектра рабочих нагрузок.Эти тома обеспечивают постоянную базовую скорость 3000 IOPS и 125 МБ/с, включая стоимость хранилища. Вы можете предоставить дополнительные операции ввода-вывода в секунду (до 16 000) и пропускную способность (до 1000 МиБ/с) за дополнительную плату.

Максимальное отношение количества выделенных операций ввода-вывода в секунду к размеру выделенного тома составляет 500 операций ввода-вывода в секунду на ГиБ. Максимальное отношение подготовленной пропускной способности к предоставленным операциям ввода-вывода в секунду составляет 0,25 МБ/с на операцию ввода-вывода в секунду. Следующие конфигурации томов поддерживают выделение либо максимального количества операций ввода-вывода в секунду, либо максимальной пропускной способности:

32 ГиБ или больше: 500 IOPS/ГиБ × 32 ГиБ = 16 000 IOPS

8 ГиБ или больше и 4000 IOPS или больше: 4000 IOPS × 0,25 МБ/с/IOPS = 1000 МБ/с

Тома SSD общего назначения (gp2)

Тома SSD общего назначения ( gp2 ) предлагают экономичное хранилище, которое идеально подходит для широкого спектра рабочих нагрузок. Эти тома обеспечивают задержку, исчисляемую одноразрядными миллисекундами, и возможность увеличения производительности до 3000 операций ввода-вывода в секунду в течение продолжительных периодов времени. От минимума 100 IOPS (при 33,33 ГиБ и ниже) до максимума 16 000 IOPS (при 5334 ГиБ и выше) базовая производительность линейно масштабируется на 3 IOPS на ГиБ размера тома. AWS проектирует тома gp2 таким образом, чтобы обеспечить заданную производительность в 99 % случаев. Размер тома gp2 может варьироваться от 1 ГиБ до 16 ТиБ.

Кредиты ввода-вывода и максимальная производительность

Производительность томов gp2 привязана к размеру тома, который определяет базовый уровень производительности тома и скорость накопления кредитов ввода-вывода. большие тома имеют более высокие базовые уровни производительности и быстрее накапливают кредиты ввода-вывода. Кредиты ввода-вывода представляют собой доступную пропускную способность, которую ваш том gp2 может использовать для увеличения объема операций ввода-вывода, когда требуется производительность, превышающая базовую. Чем больше кредитов у вашего тома для ввода-вывода, тем больше времени он может превысить базовый уровень производительности и тем лучше он работает, когда требуется больше производительности. На следующей диаграмме показано поведение пакетной корзины для gp2 .

Каждый том получает первоначальный баланс кредитов ввода-вывода в размере 5,4 млн кредитов ввода-вывода, что достаточно для поддержания максимальной производительности 3000 IOPS в течение как минимум 30 минут. Этот начальный кредитный баланс предназначен для обеспечения быстрого цикла начальной загрузки для загрузочных томов и обеспечения хорошей начальной загрузки для других приложений. Тома зарабатывают кредиты ввода-вывода при базовой производительности 3 IOPS на ГиБ размера тома. Например, том gp2 объемом 100 ГиБ имеет базовую производительность 300 IOPS.

Если для вашего тома требуется более высокий уровень производительности ввода-вывода, чем базовый уровень производительности, он использует кредиты ввода-вывода в кредитном балансе, чтобы увеличить производительность до требуемого уровня, максимум до 3000 IOPS. Когда ваш том использует меньше кредитов ввода-вывода, чем зарабатывает за секунду, неиспользованные кредиты ввода-вывода добавляются к балансу кредитов ввода-вывода. Максимальный баланс кредитов ввода-вывода для тома равен начальному балансу кредитов (5,4 млн кредитов ввода-вывода).

Если базовая производительность тома выше максимальной пакетной производительности, кредиты ввода-вывода никогда не тратятся. Если том подключен к инстансу, построенному на системе Nitro, баланс всплеска не сообщается. Для других экземпляров заявленный пакетный баланс равен 100%.

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

В следующей таблице перечислены несколько размеров томов и соответствующая базовая производительность тома (которая также представляет собой скорость, с которой он накапливает кредиты ввода-вывода), продолжительность пакета при максимальном значении 3000 IOPS (при запуске с полным балансом кредитов). ) и время в секундах, которое потребуется тому для пополнения пустого кредитного баланса.

ПРИМЕНЯЕТСЯ К Управляемому экземпляру Azure SQL

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

Сведения о различиях в поддерживаемых функциях и операторах T-SQL см. в разделе Различия между функциями и поддержкой операторов T-SQL. Чтобы узнать об общих различиях между уровнями служб для Базы данных SQL Azure и Управляемого экземпляра SQL, ознакомьтесь с уровнями служб общего назначения и критически важных для бизнеса.

Характеристики поколения оборудования

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

Поколение оборудования Gen5 было переименовано в стандартную серию (Gen5), и мы представляем два новых поколения оборудования в рамках ограниченного предварительного просмотра: серию Premium и серию Premium с оптимизацией памяти.

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

Поколения оборудования имеют разные характеристики, как описано в следующей таблице:

< tr>
Стандартная серия (Gen5) Премиум-серия (предварительная версия ) Серия премиум-класса с оптимизацией памяти (предварительная версия)
ЦП Intel® E5-2673 v4 (Broadwell) 2,3 ГГц, Intel® SP-8160 (Skylake) и Intel® 8272CL (Cascade Lake) Процессоры 2,5 ГГц Процессоры Intel® 8370C (Ice Lake) 2,8 ГГц Процессоры Intel® 8370C (Ice Lake) с тактовой частотой 2,8 ГГц
Количество виртуальных ядер
vCore=1 LP (гиперпотоковое )
4-80 виртуальных ядер 4-80 виртуальных ядер 4–64 виртуальных ядра
Макс. память (соотношение памяти и виртуальных ядер) 5,1 ГБ на виртуальное ядро
Добавьте больше виртуальных ядер, чтобы получить больше памяти.
7 ГБ на виртуальное ядро 13,6 ГБ на виртуальное ядро
Максимальная память OLTP в памяти Ограничение экземпляра: 0,8–1,65 ГБ на виртуальное ядро Ограничение экземпляра: 1,1–2,3 ГБ на виртуальное ядро Ограничение экземпляра: 2,2–4,5 ГБ на виртуальное ядро
Максимальное зарезервированное хранилище для экземпляра* Общее назначение: до 16 ТБ
Критично для бизнеса : до 4 ТБ
Общего назначения: до 16 ТБ
Критически важные для бизнеса: до 5,5 ТБ
Общего назначения: до 16 ТБ
Критически важный для бизнеса: до 16 ТБ

Если вашему бизнесу требуются объемы хранилища, превышающие доступные лимиты ресурсов для Управляемого экземпляра SQL Azure, рассмотрите возможность использования уровня службы "Гипермасштабирование базы данных SQL Azure".

Региональная поддержка поколений оборудования премиум-класса (предварительная версия)

Поддержка поколений аппаратного обеспечения премиум-класса (общедоступная предварительная версия) в настоящее время доступна только в следующих регионах:

Регион Премиум-серия Премиум-серия с оптимизацией памяти
Центральная Австралия Да
Восточная Австралия Да Да
Центральная Канада Да
Восточная Япония Да
Центральная Корея Да
Северо-центральная часть США Да
Юг и центральная часть США Да Да
Юго-Восточная Азия Да
Западная Европа< /td> Да
Запад США Да Да
Запад США 2 Да Да
Запад США 3 Да Да

Доступное пространство для OLTP в памяти

Объем пространства OLTP в памяти на уровне обслуживания "Критически важный для бизнеса" зависит от количества виртуальных ядер и поколения оборудования. В следующей таблице перечислены пределы памяти, которые можно использовать для объектов OLTP в памяти.

< /таблица>

Характеристики уровня службы

У управляемого экземпляра SQL есть два уровня служб: общего назначения и критического для бизнеса.

Критически важный для бизнеса уровень служб предоставляет дополнительную встроенную копию Управляемого экземпляра SQL (вторичную реплику), которую можно использовать для рабочей нагрузки только для чтения. Если вы можете разделить запросы на чтение-запись и запросы только на чтение/аналитику/отчетность, вы получаете вдвое больше виртуальных ядер и памяти по той же цене. Вторичная реплика может отставать от основного экземпляра на несколько секунд, поэтому она предназначена для разгрузки отчетов и аналитических рабочих нагрузок, которым не требуется точное текущее состояние данных. В таблице ниже запросы только для чтения — это запросы, которые выполняются на вторичной реплике.

Виртуальные ядра Стандартная серия (Gen5) Премиум-серия Премиум-серия, оптимизированная для памяти
4 виртуальных ядра 3,14 ГБ 4,39 ГБ 8.79 ГБ
8 виртуальных ядер 6,28 ГБ 8,79 ГБ 22,06 ГБ
16 виртуальных ядер 15,77 ГБ 22,06 ГБ< /td> 57,58 ГБ
24 виртуальных ядра 25,25 ГБ 35,34 ГБ 93,09 ГБ
32 виртуальных ядра 37,94 ГБ 53,09 ГБ 128,61 ГБ
40 виртуальных ядер 52,23 ГБ 73,09 ГБ 164,13 ГБ
64 виртуальных ядра 99,9 ГБ 139,82 ГБ 288,61 ГБ
80 виртуальных ядер 131,68 ГБ 184,30 ГБ Н/Д
td> < td>16–320 K (4000 IOPS/vCore)
Добавьте больше виртуальных ядер, чтобы повысить производительность ввода-вывода. < td>Не поддерживается
Функция Общего назначения Важно для бизнеса
Число виртуальных ядер* 4, 8, 16, 24, 32, 40, 64, 80 Стандартная серия (Gen5): 4, 8, 16, 24, 32, 40 , 64, 80
Премиум-серии: 4, 8, 16, 24, 32, 40, 64, 80
Премиум-серии с оптимизацией памяти: 4, 8, 16, 24, 32, 40, 64
*То же количество виртуальных ядер выделяется для запросов только для чтения.
Максимальная память Стандартная серия (Gen5): 20,4 ГБ — 408 ГБ (5,1 ГБ на виртуальное ядро)
Серия Premium: 28–560 ГБ (7 ГБ на виртуальное ядро)
Серия Premium с оптимизацией памяти: 54,4–870,4 ГБ (13,6 ГБ на виртуальное ядро)
Серия Standard (Gen5): 20,4–408 ГБ (5,1 ГБ/виртуальное ядро) на каждую реплику
Серия Premium: 28–560 ГБ (7 ГБ/виртуальное ядро) на каждую реплику
Премиум-серия с оптимизацией памяти: 54,4–870,4 ГБ (13,6 ГБ на виртуальное ядро) на каждую реплику
Максимальный размер хранилища экземпляра (зарезервировано) – 2 ТБ для 4 виртуальных ядер
– 8 ТБ для 8 виртуальных ядер
– 16 ТБ для других размеров s
Стандартная серия (Gen5):
– 1 ТБ для 4, 8, 16 виртуальных ядер
– 2 ТБ для 24 виртуальных ядер
– 4 ТБ для 32, 40, 64, 80 виртуальных ядер
Премиум-серия:
– 1 ТБ для 4, 8 виртуальных ядер
– 2 ТБ для 16, 24 виртуальных ядер
– 4 ТБ для 32 vCores
– 5,5 ТБ для 40, 64, 80 виртуальных ядер
Премиум-серия с оптимизацией памяти:
– 1 ТБ для 4, 8 виртуальных ядер
– 2 ТБ для 16, 24 виртуальных ядер< br />– 4 ТБ для 32 виртуальных ядер
– 5,5 ТБ для 40 виртуальных ядер
– 16 ТБ для 64 виртуальных ядер
Максимальный размер базы данных До доступного в настоящее время размера экземпляра (в зависимости от количества виртуальных ядер). До доступного в настоящее время размера экземпляра (в зависимости от количества виртуальных ядер).
Максимальный размер базы данных tempDB Ограничен до 24 ГБ на виртуальное ядро ​​(96–1920 ГБ) и доступный в настоящее время размер хранилища экземпляра.
Добавьте больше виртуальных ядер, чтобы получить больше места для базы данных TempDB.
Размер файла журнала ограничен 120 ГБ.
До доступного на данный момент размера хранилища экземпляра.
Максимальное количество баз данных на экземпляр100 пользовательских баз данных, если не достигнут предел размера хранилища экземпляра. 100 пользовательских баз данных, если не достигнут предел размера хранилища экземпляра.
Максимальное количество файлов базы данных на один экземпляр До 280, если не был достигнут размер хранилища экземпляра или ограничение на выделение дискового пространства Azure Premium Disk. 32 767 файлов на базу данных , если не достигнут предел размера хранилища экземпляра.
Максимальный размер файла данных Максимальный размер каждого файла данных — 8 ТБ. Используйте как минимум два файла данных для баз данных размером более 8 ТБ. Максимум доступного на данный момент размера экземпляра (в зависимости от количества виртуальных ядер).
Макс. размер файла журнала Ограничен до 2 ТБ и доступного в настоящее время размера хранилища экземпляра. Ограничен до 2 ТБ и доступного в настоящее время размера хранилища экземпляра.
Data/Log IOPS (приблизительно) 500–7500 на файл
*Увеличьте размер файла, чтобы получить больше IOPS
Ограничение пропускной способности записи журнала (на экземпляр) 3 МБ/с на виртуальное ядро
Макс. 120 МБ/с на экземпляр
22–65 МБ/с на БД (в зависимости от размера файла журнала)
*Увеличьте размер файла для повышения производительности ввода-вывода
4 МБ/с на виртуальное ядро
Максимум 96 МБ/с
Пропускная способность (приблизительно) 100–250 МБ/с на файл
*Увеличьте размер файла, чтобы повысить производительность ввода-вывода
Не ограничено.
Хранилище Задержка ввода-вывода (приблизительно) 5-10 мс 1-2 мс
OLTP в памяти Доступно, размер зависит от количества виртуальных ядер
Максимум сеансов 30000 30000
Максимум одновременных рабочих процессов 105 * количество виртуальных ядер + 800 105 * количество количество виртуальных ядер + 800
Реплики только для чтения 0 1 (включены в стоимость)
Изоляция вычислений Не поддерживается, так как экземпляры общего назначения могут совместно использовать физическое оборудование с другими экземплярами Стандартная серия (Gen5):
Поддерживается для 40, 64, 80 виртуальных ядер
Премиум-серия: поддерживается для 64, 80 виртуальных ядер
Премиум-серия с оптимизацией памяти: поддерживается для 64 виртуальных ядер

Несколько дополнительных соображений:

Хранение данных и журналов

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

  • Каждый размер вычислительных ресурсов поддерживает максимальный размер данных, который по умолчанию составляет 16 ГБ. Дополнительные сведения об ограничениях ресурсов в Управляемом экземпляре Azure SQL см. в [resource-limits.md].
  • При настройке максимального размера данных для файлов журналов автоматически добавляется 30 % хранилища.
  • Вы можете выбрать любой максимальный размер данных от 1 ГБ до максимального поддерживаемого объема хранилища с шагом 1 ГБ.
  • На уровне служб общего назначения база данных tempdb использует локальное хранилище SSD, и стоимость этого хранилища включена в стоимость виртуального ядра.
  • На уровне обслуживания "Критически важный для бизнеса" база данных tempdb совместно использует локальное хранилище SSD с файлами данных и журналов, а стоимость хранилища tempdb включена в стоимость виртуального ядра.
  • Максимальный размер хранилища для Управляемого экземпляра SQL должен быть кратен 32 ГБ.

На уровнях General Purpose и Business Critical с вас взимается плата за максимальный размер хранилища, настроенный для управляемого экземпляра.

Чтобы отслеживать общий потребляемый объем хранилища экземпляра для Управляемого экземпляра SQL, используйте показатель storage_space_used_mb. Чтобы контролировать текущий выделенный и используемый размер хранилища отдельных файлов данных и журналов в базе данных с помощью T-SQL, используйте представление sys.database_files и функцию FILEPROPERTY(. , 'SpaceUsed').

В некоторых случаях может потребоваться сжать базу данных, чтобы освободить неиспользуемое пространство. Дополнительные сведения см. в разделе Управление файловым пространством в базе данных SQL Azure.

Резервные копии и хранилище

Хранилище для резервных копий базы данных выделяется для поддержки возможностей восстановления на момент времени (PITR) и долгосрочного хранения (LTR) Управляемого экземпляра SQL. Это хранилище отделено от хранилища файлов данных и журналов и оплачивается отдельно.

  • PITR: на уровнях общего назначения и критически важных для бизнеса резервные копии отдельных баз данных автоматически копируются в геоизбыточное хранилище с доступом для чтения (RA-GRS). Размер хранилища динамически увеличивается по мере создания новых резервных копий. Хранилище используется для полных, дифференциальных резервных копий и резервных копий журнала транзакций. Потребление хранилища зависит от скорости изменения базы данных и периода хранения, настроенного для резервных копий. Вы можете настроить отдельный период хранения для каждой базы данных от 0 до 35 дней для Управляемого экземпляра SQL. Объем хранилища резервных копий, равный настроенному максимальному размеру данных, предоставляется бесплатно.
  • LTR: у вас также есть возможность настроить долгосрочное хранение полных резервных копий на срок до 10 лет. Если вы настроили политику LTR, эти резервные копии автоматически сохраняются в хранилище RA-GRS, но вы можете контролировать частоту копирования резервных копий. Чтобы соответствовать различным требованиям соответствия, вы можете выбрать разные периоды хранения для еженедельных, ежемесячных и/или ежегодных резервных копий. Выбранная конфигурация определяет объем хранилища, который будет использоваться для резервных копий LTR. Дополнительные сведения см. в разделе Долгосрочное хранение резервных копий.

Характеристики файлового ввода-вывода на уровне общего назначения

На уровне служб общего назначения каждый файл базы данных получает выделенное количество операций ввода-вывода в секунду и пропускную способность, которые зависят от размера файла. Большие файлы получают больше IOPS и пропускную способность. Характеристики ввода-вывода файлов базы данных показаны в следующей таблице:

Следующие типы данных Snowflake могут содержать другие типы данных:

ВАРИАНТ (может содержать любой другой тип данных).

ARRAY (может непосредственно содержать VARIANT и, таким образом, косвенно содержать любой другой тип данных, включая самого себя).

OBJECT (может непосредственно содержать VARIANT и, таким образом, косвенно содержать любой другой тип данных, включая самого себя).

Мы часто называем эти типы данных полуструктурированными типами данных. Строго говоря, OBJECT — единственный из этих типов данных, который сам по себе обладает всеми характеристиками настоящего полуструктурированного типа данных. Однако объединение этих типов данных позволяет явно представлять произвольные иерархические структуры данных, которые можно использовать для загрузки и работы с данными в полуструктурированных форматах (например, JSON, Avro, ORC, Parquet или XML).

Каждый из этих типов данных описан ниже.

В этой теме:

ВАРИАНТ¶

Характеристики ВАРИАНТА¶

ВАРИАНТ может хранить значение любого другого типа, включая ОБЪЕКТ и МАССИВ.

Максимальная длина ВАРИАНТА – 16 МБ.

Использование значений в ВАРИАНТЕ¶

Чтобы преобразовать значение в тип данных VARIANT или из него, можно выполнить явное приведение типов с помощью функции CAST, функции TO_VARIANT или оператора :: (например, expression::variant ).

В некоторых ситуациях значения могут быть неявно приведены к VARIANT. Подробнее см. в разделе Преобразование типов данных .

Приведенный ниже пример кода показывает, как использовать VARIANT, в том числе как преобразовать VARIANT в VARIANT.

Создайте таблицу и вставьте значение:

Первое UPDATE преобразует значение из FLOAT в VARIANT. Второй UPDATE преобразует значение из VARIANT в FLOAT.

ВЫБЕРИТЕ все значения:

Чтобы преобразовать значение из типа данных VARIANT, укажите тип данных, в который вы хотите преобразовать. Например, в следующем операторе используется оператор ::, чтобы указать, что VARIANT следует преобразовать в FLOAT:

VARIANT хранит как значение, так и тип данных значения. Это также позволяет использовать значения VARIANT в выражениях, где тип данных значения допустим, без предварительного приведения VARIANT. Например, если столбец VARIANT my_variant_column содержит числовое значение, то вы можете напрямую умножить my_variant_column на другое числовое значение:

Вы можете получить исходный тип данных значения с помощью функции TYPEOF.

Значение VARIANT может отсутствовать (содержать SQL NULL), что отличается от нулевого значения VARIANT, которое является реальным значением, используемым для представления нулевого значения в частично структурированных данных. VARIANT null — это истинное значение, которое сравнивается как равное самому себе. Дополнительные сведения см. в разделе VARIANT null .

Если данные были загружены из формата JSON и сохранены в VARIANT, применяются следующие правила:

Для данных, которые в основном являются обычными и используют только собственные типы JSON (строки и числа, а не временные метки), производительность хранения и запросов для операций с реляционными данными и данными в столбце VARIANT очень похожа. Однако несобственные значения, такие как даты и метки времени, сохраняются в виде строк при загрузке в столбец VARIANT, поэтому операции с этими значениями могут выполняться медленнее и занимать больше места, чем при сохранении в реляционном столбце с соответствующим типом данных

Дополнительную информацию о запросе полуструктурированных данных, хранящихся в VARIANT, см. в разделе Запрос полуструктурированных данных .

Пример вставки ВАРИАНТА¶

Чтобы напрямую вставить данные VARIANT, используйте IIS ( INSERT INTO . SELECT ). В приведенном ниже примере показано, как вставить данные в формате JSON в VARIANT:

Общее использование ВАРИАНТА¶

ВАРИАНТ обычно используется, когда:

Вы хотите создать иерархические данные, явно указав иерархию, содержащую два или более МАССИВОВ или ОБЪЕКТОВ.

Вы хотите загрузить данные JSON, Avro, ORC или Parquet напрямую, без явного описания иерархической структуры данных.

Snowflake умеет автоматически преобразовывать данные из форматов JSON, Avro, ORC или Parquet во внутреннюю иерархию данных ARRAY, OBJECT и VARIANT и сохранять эти иерархические данные непосредственно в VARIANT. Хотя вы можете вручную построить иерархию данных, обычно проще позволить Snowflake сделать это за вас.

ОБЪЕКТ¶

Объект Snowflake аналогичен «объекту» JSON. В других языках программирования соответствующий тип данных часто называют «словарем», «хэшем» или «картой».

ОБЪЕКТ содержит пары ключ-значение.

Характеристики ОБЪЕКТА¶

В ОБЪЕКТЕ Snowflake каждый ключ — это VARCHAR, а каждое значение — это VARIANT .

Поскольку VARIANT может хранить любой другой тип данных, разные значения (в разных парах "ключ-значение") могут иметь разные базовые типы данных. Например, ОБЪЕКТ может содержать имя человека как VARCHAR и возраст человека как ЦЕЛОЕ ЧИСЛО. В приведенном ниже примере и имя, и возраст преобразуются в VARIANT.

В настоящее время Snowflake не поддерживает объекты с явным типом.

В паре ключ-значение ключ не должен быть пустой строкой, и ни ключ, ни значение не должны быть NULL.

Максимальная длина ОБЪЕКТА – 16 МБ.

ОБЪЕКТ можно использовать для создания иерархических структур данных.

Доступ к элементам ОБЪЕКТА по ключу¶

Чтобы получить значение в объекте, укажите ключ в квадратных скобках, как показано ниже:

Пример вставки ОБЪЕКТА¶

Чтобы напрямую вставить данные OBJECT, используйте IIS ( INSERT INTO . SELECT ). Следующий код вставляет ОБЪЕКТ в таблицу:

Обратите внимание, что значение в паре ключ-значение преобразуется в VARIANT.

Общее использование ОБЪЕКТА¶

ОБЪЕКТ обычно используется, когда верно одно или несколько из следующих условий:

У вас есть несколько фрагментов данных, которые идентифицируются строками. Например, если вы хотите найти информацию по названию провинции, вы можете использовать ОБЪЕКТ.

Вы хотите хранить информацию о данных вместе с данными; имена (ключи) — это не просто отдельные идентификаторы, они имеют смысл.

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

Структура данных различается или данные могут быть неполными. Например, если вы хотите создать каталог книг, который обычно содержит название, имя автора и дату публикации, но в некоторых случаях дата публикации неизвестна, вы можете использовать ОБЪЕКТ.

МАССИВ¶

Массив Snowflake аналогичен массиву во многих других языках программирования. МАССИВ содержит 0 или более фрагментов данных. Доступ к каждому элементу осуществляется путем указания его позиции в массиве.

Характеристики МАССИВА¶

Каждое значение в ARRAY имеет тип VARIANT . (ВАРИАНТ может содержать значение любого другого типа данных.)

Значения других типов данных можно преобразовать в VARIANT, а затем сохранить в массиве. Некоторые функции для массивов, включая ARRAY_CONSTRUCT , могут неявно преобразовывать значения в VARIANT.

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

Snowflake не поддерживает массивы элементов определенного типа, отличного от VARIANT.

Массив Snowflake объявляется без указания количества элементов. ARRAY может динамически увеличиваться на основе таких операций, как ARRAY_APPEND . В настоящее время Snowflake не поддерживает массивы фиксированного размера.

Массив может содержать значения NULL.

Теоретический максимальный суммарный размер всех значений в массиве составляет 16 МБ. Однако массивы имеют внутренние накладные расходы. Практический максимальный размер данных обычно меньше в зависимости от количества и значений элементов.

Доступ к элементам массива по индексу или по фрагменту¶

Индексы массива отсчитываются от 0; первым элементом массива является элемент 0.

Доступ к значениям в массиве осуществляется путем указания порядкового номера элемента массива в квадратных скобках. Например, следующий запрос считывает значение в позиции индекса 2 в массиве, хранящемся в my_array_column .

Массивы могут быть вложенными. Следующий запрос считывает нулевой элемент нулевого элемента вложенного массива:

Попытка доступа к элементу за пределами конца массива возвращает NULL.

Срез массива – это последовательность смежных элементов (т. е. непрерывное подмножество массива).

Вы можете получить доступ к фрагменту массива, вызвав функцию ARRAY_SLICE. Например:

Функция ARRAY_SLICE() возвращает элементы от указанного начального элемента (5 в приведенном выше примере) до указанного конечного элемента, но не включая его (10 в приведенном выше примере).

Пустой массив или пустой фрагмент часто обозначается парой квадратных скобок, между которыми ничего нет ( [] ).

Разреженные и плотные массивы¶

Массив может быть плотным или разреженным.

В плотном массиве значения индексов элементов начинаются с нуля и идут последовательно (0, 1, 2 и т. д.). Однако в разреженном массиве значения индекса могут быть непоследовательными (например, 0, 2, 5). Значения не обязательно должны начинаться с 0.

Если у индекса нет соответствующего элемента, то говорят, что значение, соответствующее этому индексу, не определено. Например, если разреженный массив состоит из трех элементов, и эти элементы имеют индексы 0, 2 и 5, то элементы с индексами 1, 3 и 4 не определены .

Неопределенный элемент рассматривается как элемент. Например, рассмотрим предыдущий пример разреженного массива, который содержит элементы с индексами 0, 2 и 5 (и не имеет элементов после индекса 5). Если вы прочитаете срез, содержащий элементы с индексами 3 и 4, результат будет примерно таким:

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

Выход представляет собой пустой массив:

Обратите внимание, что undefined отличается от NULL. Значение NULL в массиве является определенным элементом.

В плотном массиве каждый элемент занимает место для хранения, даже если значение элемента равно NULL.

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

В плотном массиве теоретический диапазон значений индекса составляет от 0 до 1 6777 215. (Максимальное теоретическое число элементов – 1 677 7216, поскольку верхний предел размера – 16 МБ (1 6777 216 байт), а наименьшее возможное значение – один байт. .)

В разреженном массиве теоретический диапазон значений индекса составляет от 0 до 2 31–1. Однако из-за ограничения в 16 МБ разреженный массив не может содержать 2 31 значения. Максимальное теоретическое количество значений по-прежнему ограничено 16777216.

(Помните, что из-за внутренних накладных расходов практический предел размера как плотных, так и разреженных массивов как минимум немного меньше теоретического максимума в 16 МБ.)

Вы можете создать разреженный массив, используя функцию ARRAY_INSERT для вставки значений в определенные точки индекса в массиве (оставляя другие элементы массива неопределенными ). Обратите внимание: поскольку ARRAY_INSERT() перемещает элементы вправо, что изменяет значения индекса, необходимые для доступа к ним, вы почти всегда хотите заполнять разреженный массив слева направо (т. е. от 0 вверх, увеличивая значение индекса для каждого нового вставленного значения).

Пример вставки массива¶

Чтобы напрямую вставить данные VARIANT, используйте IIS ( INSERT INTO . SELECT ). Следующий код вставляет МАССИВ значений в таблицу:

В целом Snowflake создает хорошо кластеризованные данные в таблицах; однако со временем, особенно когда DML возникает в очень больших таблицах (что определяется объемом данных в таблице, а не количеством строк), данные в некоторых строках таблицы могут перестать оптимально кластеризоваться по нужным измерениям.

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

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

Вы можете кластеризовать материализованные представления , а также таблицы. Правила кластеризации таблиц и материализованных представлений обычно одинаковы. Несколько дополнительных советов по материализованным представлениям см. в разделах Материализованные представления и кластеризация и Рекомендации для материализованных представлений.

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

Вам требуется максимально быстрое время отклика независимо от стоимости.

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

Дополнительную информацию о выборе таблиц для кластеризации см. в разделе Рекомендации по выбору кластеризации для таблицы .

Разделы в этой теме:

Что такое ключ кластеризации?¶

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

Некоторые общие индикаторы, которые могут помочь определить, следует ли определять ключ кластеризации для таблицы, включают:

Запросы в таблице выполняются медленнее, чем ожидалось, или со временем заметно ухудшились.

Глубина кластеризации таблицы велика.

Ключ кластеризации можно определить при создании таблицы (с помощью команды CREATE TABLE) или позже (с помощью команды ALTER TABLE). Ключ кластеризации для таблицы также можно изменить или удалить в любое время.

Преимущества определения ключей кластеризации (для очень больших таблиц)¶

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

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

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

После определения ключа для таблицы дополнительное администрирование не требуется, если только вы не решите удалить или изменить ключ. Все дальнейшее обслуживание строк в таблице (для обеспечения оптимальной кластеризации) выполняется Snowflake автоматически.

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

Обычно запросы выигрывают от кластеризации, когда запросы фильтруют или сортируют по ключу кластеризации для таблицы. Сортировка обычно выполняется для операций ORDER BY, GROUP BY и некоторых соединений. Например, следующее соединение, скорее всего, заставит Snowflake выполнить операцию сортировки:

В этом псевдопримере Snowflake, скорее всего, будет сортировать значения либо в my_materialized_view.col1, либо в my_table.col1 . Например, если значения в my_table.col1 отсортированы, то при сканировании материализованного представления Snowflake может быстро найти соответствующую строку в my_table .

Чем чаще запрашивается таблица, тем больше преимуществ дает кластеризация. Однако чем чаще таблица изменяется, тем дороже будет поддерживать ее кластеризацию. Таким образом, кластеризация, как правило, наиболее рентабельна для таблиц, которые часто запрашиваются и редко изменяются.

После определения ключа кластеризации для таблицы строки не обязательно обновляются немедленно. Snowflake выполняет автоматическое обслуживание только в том случае, если таблица выиграет от этой операции. Дополнительные сведения см. в разделах Рекластеризация (в этом разделе) и Автоматическая кластеризация .

Соображения по выбору кластеризации для таблицы¶

Если вам нужно более быстрое время отклика или более низкие общие затраты, кластеризация лучше всего подходит для таблицы, отвечающей всем следующим критериям:

Таблица содержит большое количество микроразделов. Как правило, это означает, что таблица содержит несколько терабайт (ТБ) данных.

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

Запросы являются выборочными. Другими словами, запросы должны считывать только небольшой процент строк (и, следовательно, обычно небольшой процент микроразделов) в таблице.

Запросы сортируют данные. (Например, запрос содержит предложение ORDER BY для таблицы.)

Один и тот же ключ (ключи) кластеризации может принести пользу большому проценту запросов. Другими словами, многие/большинство запросов выбирают или сортируют одни и те же несколько столбцов.

Если ваша цель состоит в первую очередь в снижении общих затрат, то каждая кластеризованная таблица должна иметь высокое соотношение запросов к операциям DML (INSERT/UPDATE/DELETE). Обычно это означает, что таблица часто запрашивается и редко обновляется. Если вы хотите кластеризовать таблицу, которая подвергается большому количеству DML, рассмотрите возможность группировки операторов DML в большие, нечастые пакеты.

Кроме того, перед кластеризацией таблицы Snowflake настоятельно рекомендует протестировать репрезентативный набор запросов к таблице, чтобы установить некоторые базовые показатели производительности.

Стратегии выбора ключей кластеризации¶

Один ключ кластеризации может содержать один или несколько столбцов или выражений. Для большинства таблиц Snowflake рекомендует максимум 3 или 4 столбца (или выражения) на ключ. Добавление более 3–4 столбцов увеличивает затраты больше, чем выгоды.

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

Snowflake рекомендует расставлять приоритеты клавиш в следующем порядке:

Сгруппируйте столбцы, наиболее активно используемые в выборочных фильтрах. Для многих таблиц фактов, участвующих в запросах на основе даты (например, «ГДЕ invoice_date > x AND столбцы data_input и application_id и user_status»), кластеризация по обоим столбцам может повысить производительность.

Количество различных значений (т. е. кардинальность) в столбце/выражении — это критический аспект при выборе его в качестве ключа кластеризации. Важно выбрать ключ кластеризации, который:

Достаточно большое количество различных значений, чтобы обеспечить эффективную обрезку в таблице.

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

Столбец с очень низкой кардинальностью (например, столбец, в котором указано только, является ли человек мужчиной или женщиной) может привести к минимальному сокращению. С другой стороны, столбец с очень высокой кардинальностью (например, столбец, содержащий значения UUID или отметки времени в наносекундах) также обычно не является хорошим кандидатом для непосредственного использования в качестве ключа кластеризации.

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

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

Если вы хотите использовать столбец с очень высокой кардинальностью в качестве ключа кластеризации, Snowflake рекомендует определить ключ как выражение в столбце, а не непосредственно в столбце, чтобы уменьшить количество различных значений. Выражение должно сохранить первоначальный порядок столбцов, чтобы минимальное и максимальное значения в каждом разделе по-прежнему допускали сокращение.

Например, если в таблице фактов есть столбец TIMESTAMP c_timestamp, содержащий много дискретных значений (намного больше, чем количество микроразделов в таблице), то для столбца можно определить ключ кластеризации путем приведения значений к датам. вместо меток времени (например, to_date(c_timestamp) ). Это уменьшит количество элементов до общего количества дней, что обычно дает гораздо лучшие результаты обрезки.

В качестве другого примера можно усечь число до меньшего количества значащих цифр, используя функции TRUNC и отрицательное значение для масштаба (например, TRUNC(123456789, -5) ).

Если вы определяете ключ кластеризации с несколькими столбцами для таблицы, важен порядок, в котором столбцы указываются в предложении CLUSTER BY. Как правило, Snowflake рекомендует упорядочивать столбцы от наименьшего количества элементов к наибольшему количеству элементов. Размещение столбца с более высокой кардинальностью перед столбцом с более низкой кардинальностью обычно снижает эффективность кластеризации в последнем столбце.

В некоторых случаях может быть полезна кластеризация столбцов, используемых в предложениях GROUP BY или ORDER BY. Однако кластеризация по этим столбцам обычно менее полезна, чем кластеризация по столбцам, которые активно используются в операциях фильтрации или JOIN. Если у вас есть столбцы, активно используемые в операциях фильтрации/объединения, и другие столбцы, которые используются в операциях ORDER BY или GROUP BY, отдайте предпочтение столбцам, используемым в операциях фильтрации и объединения.

Рекластеризация¶

Поскольку операции DML (INSERT, UPDATE, DELETE, MERGE, COPY) выполняются в кластеризованной таблице, данные в таблице могут стать менее кластеризованными. Для поддержания оптимальной кластеризации требуется периодическая/регулярная повторная кластеризация таблицы.

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

Рекластеризация в Snowflake выполняется автоматически; техническое обслуживание не требуется. Дополнительные сведения см. в разделе Автоматическая кластеризация .

Однако для некоторых аккаунтов ручная повторная кластеризация устарела, но по-прежнему разрешена. Дополнительные сведения см. в разделе Рекластеризация вручную .

Влияние рекластеризации на кредит и хранилище¶

Подобно всем операциям DML в Snowflake, рекластеризация требует кредитов. Количество израсходованных кредитов зависит от размера таблицы и объема данных, которые необходимо повторно кластеризовать.

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

Этот процесс может привести к значительному обмену данными, поскольку исходные микроразделы помечаются как удаленные, но сохраняются в системе для обеспечения возможности перемещения во времени и отказоустойчивости. Исходные микроразделы очищаются только после того, как и период хранения Time Travel, и последующий период отказоустойчивости прошли (т. е. минимум 8 дней и до 97 дней для расширенного Time Travel, если вы используете Snowflake Enterprise Edition (или более позднюю версию). )). Обычно это приводит к увеличению затрат на хранение. Дополнительную информацию см. в статье Путешествие во времени и отказоустойчивость Snowflake.

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

Пример повторной кластеризации¶

На этой диаграмме, основанной на схеме кластеризации из предыдущего раздела, показано, как повторная кластеризация таблицы может помочь уменьшить сканирование микроразделов для повышения производительности запросов:

Для начала таблица t1 естественным образом сгруппирована по дате в микроразделах 1–4.

Запрос (на диаграмме) требует сканирования микроразделов 1, 2 и 3.

дата и тип определяются как ключ кластеризации. При повторной кластеризации таблицы создаются новые микроразделы (5–8).

После повторной кластеризации тот же запрос сканирует только микрораздел 5.

Кроме того, после рекластеризации:

Микрораздел 5 достиг постоянного состояния (т. е. его нельзя улучшить с помощью повторной кластеризации) и поэтому исключается при вычислении глубины и перекрытия для дальнейшего обслуживания. В хорошо кластеризованной большой таблице большинство микроразделов попадает в эту категорию.

Исходные микроразделы (1-4) помечаются как удаленные, но не удаляются из системы; они сохраняются для путешествий во времени и отказоустойчивости .

Этот пример иллюстрирует влияние повторной кластеризации в очень небольшом масштабе. При экстраполяции на очень большую таблицу (т. е. состоящую из миллионов микроразделов и более) повторная кластеризация может существенно повлиять на сканирование и, следовательно, на производительность запросов.

Определение кластеризованных таблиц¶

Вычисление информации о кластеризации для таблицы¶

Используйте системную функцию SYSTEM$CLUSTERING_INFORMATION для расчета деталей кластеризации, включая глубину кластеризации, для данной таблицы. Эту функцию можно запускать для любых столбцов любой таблицы, независимо от того, имеет ли таблица явный ключ кластеризации:

Если таблица имеет явный ключ кластеризации, функция не требует каких-либо входных аргументов, кроме имени таблицы.

Если в таблице нет явного ключа кластеризации (или в таблице есть ключ кластеризации, но вы хотите вычислить соотношение для других столбцов в таблице), функция берет нужный столбец в качестве дополнительного входной аргумент.

Определение ключа кластеризации для таблицы¶

Ключ кластеризации можно определить при создании таблицы путем добавления предложения CLUSTER BY к CREATE TABLE :

Где каждый ключ кластеризации состоит из одного или нескольких столбцов/выражений таблицы, которые могут относиться к любому типу данных, кроме VARIANT, OBJECT или ARRAY. Ключ кластеризации может содержать любое из следующего:

Выражения для базовых столбцов.

Выражения путей в столбцах VARIANT.

Важные примечания по использованию¶

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

Существующий ключ кластеризации копируется при создании таблицы с помощью команды CREATE TABLE … CLONE.

Существующий ключ кластеризации не распространяется, когда таблица создается с помощью команды CREATE TABLE … LIKE.

Существующий ключ кластеризации не поддерживается, когда таблица создается с помощью CREATE TABLE … AS SELECT; однако вы можете определить ключ кластеризации после создания таблицы.

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

Изменение ключа кластеризации для таблицы¶

В любое время вы можете добавить ключ кластеризации к существующей таблице или изменить существующий ключ кластеризации для таблицы с помощью ALTER TABLE:

Читайте также: