Бөлісу құралы:


СОЗДАТЬ ТАБЛИЦУ

Область применения: Azure Synapse Analytics Analytics Platform System (PDW)

Создает новую таблицу в Azure Synapse Analytics или Analytics Platform System (PDW).

Сведения о таблицах и их использовании см. в статье "Таблицы" в Azure Synapse Analytics.

Обсуждение Azure Synapse Analytics в этой статье относится как к Azure Synapse Analytics, так и к системе платформы аналитики (PDW), если иное не указано.

Примечание.

Для платформ SQL Server и Azure SQL перейдите на страницу CREATE TABLE и выберите нужную версию продукта. Дополнительные сведения о хранилище в Microsoft Fabric см. в статье CREATE TABLE (Fabric).

Примечание.

Бессерверный пул SQL в Azure Synapse Analytics поддерживает только внешние и временные таблицы.

Соглашения о синтаксисе Transact-SQL

Синтаксис

-- Create a new table.
CREATE TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
    ( 
      { column_name <data_type>  [ <column_options> ] } [ ,...n ]
    )  
    [ WITH ( <table_option> [ ,...n ] ) ]  
[;]  

<column_options> ::=
    [ COLLATE Windows_collation_name ]
    [ NULL | NOT NULL ] -- default is NULL
    [ IDENTITY [ ( seed, increment ) ]
    [ <column_constraint> ]

<column_constraint>::=
    {
        DEFAULT constant_expression
        | PRIMARY KEY NONCLUSTERED NOT ENFORCED -- Applies to Azure Synapse Analytics only
        | UNIQUE NOT ENFORCED -- Applies to Azure Synapse Analytics only
    }

<table_option> ::=
    {
       CLUSTERED COLUMNSTORE INDEX -- default for Azure Synapse Analytics 
      | CLUSTERED COLUMNSTORE INDEX ORDER (column [,...n])  
      | HEAP --default for Parallel Data Warehouse
      | CLUSTERED INDEX ( { index_column_name [ ASC | DESC ] } [ ,...n ] ) -- default is ASC
    }  
    {
        DISTRIBUTION = HASH ( distribution_column_name )
      | DISTRIBUTION = HASH ( [distribution_column_name [, ...n]] ) 
      | DISTRIBUTION = ROUND_ROBIN -- default for Azure Synapse Analytics
      | DISTRIBUTION = REPLICATE -- default for Parallel Data Warehouse
    }
    | PARTITION ( partition_column_name RANGE [ LEFT | RIGHT ] -- default is LEFT  
        FOR VALUES ( [ boundary_value [,...n] ] ) )

<data type> ::=
      datetimeoffset [ ( n ) ]  
    | datetime2 [ ( n ) ]  
    | datetime  
    | smalldatetime  
    | date  
    | time [ ( n ) ]  
    | float [ ( n ) ]  
    | real [ ( n ) ]  
    | decimal [ ( precision [ , scale ] ) ]   
    | numeric [ ( precision [ , scale ] ) ]   
    | money  
    | smallmoney  
    | bigint  
    | int   
    | smallint  
    | tinyint  
    | bit  
    | nvarchar [ ( n | max ) ]  -- max applies only to Azure Synapse Analytics 
    | nchar [ ( n ) ]  
    | varchar [ ( n | max )  ] -- max applies only to Azure Synapse Analytics 
    | char [ ( n ) ]  
    | varbinary [ ( n | max ) ] -- max applies only to Azure Synapse Analytics 
    | binary [ ( n ) ]  
    | uniqueidentifier  

Аргументы

database_name

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

schema_name

Схема таблицы. Схема является необязательной. Если пусто, используется схема по умолчанию.

table_name

Имя новой таблицы. Чтобы создать локальную временную таблицу, укажите # перед именем таблицы. Пояснения и рекомендации для временных таблиц см. в разделе Временные таблицы в выделенном пуле SQL в Azure Synapse Analytics.

column_name

Имя столбца таблицы.

Параметры столбца

COLLATE параметры_сортировки_Windows
Задает параметры сортировки для выражения. Параметры сортировки должны быть одним из параметров сортировки Windows, поддерживаемых SQL Server. Список параметров сортировки Windows, поддерживаемых SQL Server, см. в разделе "Имя сортировки Windows" (Transact-SQL)).

NULL | NOT NULL
Указывает, допустимы ли для столбца значения NULL. Значение по умолчанию — NULL.

[ CONSTRAINT имя_ограничения ] DEFAULT выражение_ограничения
Указывает значение столбца по умолчанию.

Аргумент Описание
constraint_name Необязательное имя ограничения. Имя ограничения уникально в пределах базы данных. Имя можно использовать повторно в других базах данных.
constant_expression Значение по умолчанию для столбца. Выражение должно быть литералом или константой. Например, могут использоваться следующие константные выражения: 'CA', 4. Следующие константные выражения не могут использоваться: 2+3, CURRENT_TIMESTAMP.

Параметры структуры таблиц

Рекомендации по выбору типа таблицы см. в разделе "Индексирование таблиц" в Azure Synapse Analytics.

CLUSTERED COLUMNSTORE INDEX

Сохраняет таблицу как кластеризованный индекс columnstore. Кластеризованный индекс columnstore применяется ко всем данным таблицы. Это поведение по умолчанию для Azure Synapse Analytics.

HEAP Сохраняет таблицу в виде кучи. Это поведение по умолчанию для системы платформы аналитики (PDW).

CLUSTERED INDEX ( index_column_name [ ,...n ] )
Сохраняет таблицу в виде кластеризованного индекса с одним или несколькими ключевыми столбцами. Данные сохраняются по записям. Используйте имя_индексного_столбца для указания имен одного или нескольких ключевых столбцов в индексе. Дополнительные сведения см. в таблицах Rowstore.

LOCATION = USER_DB Этот параметр не рекомендуется использовать. Он является допустимым с точки зрения синтаксиса, но больше не требуется и не влияет на поведение.

Параметры распространения таблицы

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

Рекомендации по оптимальной стратегии распространения на основе рабочих нагрузок см. в помощнике по распространению Synapse SQL (предварительная версия).

DISTRIBUTION = HASH ( имя_столбца_распределения ) Назначает каждую строку одному распределению путем хэширования значения, которое хранится в столбце распределения с указанным именем_столбца_распределения. Этот алгоритм является детерминированным, то есть при хэшировании он всегда соотносит конкретное значение с конкретным распределением. Столбец распределения должен быть определен как NOT NULL, так как все записи, имеющие значение NULL, назначены одному и тому же распределению.

DISTRIBUTION = HASH ( [distribution_column_name [, ...n]] ) Распределяет строки на основе хэш-значений до восьми столбцов, что позволяет более равномерно распределять данные базовой таблицы, уменьшая количество данных с течением времени и повышая производительность запросов.

Примечание.

  • Чтобы включить функцию распределения с несколькими столбцами (MCD), измените уровень совместимости базы данных на 50 с помощью этой команды. Дополнительные сведения о настройке уровня совместимости базы данных см. в разделе ALTER DATABASE SCOPED CONFIGURATION. Например: ALTER DATABASE SCOPED CONFIGURATION SET DW_COMPATIBILITY_LEVEL = 50;
  • Чтобы отключить функцию распределения с несколькими столбцами (MCD), выполните следующую команду, чтобы изменить уровень совместимости базы данных на AUTO. Например: ALTER DATABASE SCOPED CONFIGURATION SET DW_COMPATIBILITY_LEVEL = AUTO; существующие таблицы MCD останутся нечитаемыми. Запросы к таблицам MCD будут возвращать эту ошибку: Related table/view is not readable because it distributes data on multiple columns and multi-column distribution is not supported by this product version or this feature is disabled.
    • Чтобы восстановить доступ к таблицам MCD, снова включите эту функцию.
    • Чтобы загрузить данные в таблицу MCD, используйте инструкцию CTAS, а источник данных должен представлять собой таблицы Synapse SQL.
  • Создание скриптов для создания таблиц MCD в настоящее время поддерживает SSMS версии 19 и более поздних версий.

DISTRIBUTION = ROUND_ROBIN Равномерно распределяет строки между всеми распределениями циклическим способом. Это поведение по умолчанию для Azure Synapse Analytics.

DISTRIBUTION = REPLICATE Сохраняет по одной копии таблицы на каждом вычислительном узле. Для Azure Synapse Analytics таблица хранится в базе данных распространителя на каждом вычислительном узле. Для системы платформы аналитики (PDW) таблица хранится в файловой группе SQL Server, которая охватывает вычислительный узел. Это поведение по умолчанию для системы платформы аналитики (PDW).

Параметры секционирования таблицы

Рекомендации по использованию секций таблицы см. в разделе Секционирование таблиц в выделенном пуле SQL.

PARTITION ( имя_столбца_секции RANGE [ LEFT | RIGHT ] FOR VALUES ( [ граничное_значение [,...n] ] ))
Создает одну или несколько секций таблицы. Эти секции представляют собой горизонтальные срезы таблицы, которые позволяют применять операции к подмножествам записей независимо от того, хранится ли таблица в виде кучи, кластеризованного индекса или кластерного индекса columnstore. В отличие от столбца распределения секции таблицы не определяют распределений, в которых хранятся записи. Вместо этого секции таблицы определяют группирование и хранение строк в каждом распределении.

Аргумент Описание
имя_столбца_секции Указывает столбец, используемый Azure Synapse Analytics для секционирования строк. Столбец может иметь любой тип данных. Azure Synapse Analytics сортирует значения столбца секции в порядке возрастания. Порядок от низкого к высокому следует от LEFT до RIGHT в спецификации RANGE.
RANGE LEFT Указывает граничное значение, принадлежащее секции слева (меньшие значения). Значение по умолчанию — LEFT.
RANGE RIGHT Указывает граничное значение, принадлежащее секции справа (большие значения).
FOR VALUES ( boundary_value [,...n] ) Указывает граничные значения для секции. граничное_значение является константным выражением. Оно не может быть NULL. Оно должно иметь тип данных столбца_секции или неявно преобразовываться в этот тип. Это значение не может быть усечено во время неявного преобразования, так чтобы размер и масштаб значения не соответствовали типу данных столбца_секции



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



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

Пример см. в разделе "Создание секционированных таблиц".

Параметр упорядоченного кластеризованного индекса columnstore

Кластеризованный индекс columnstore (CCI) — это значение по умолчанию для создания таблиц в Azure Synapse Analytics. Данные в CCI не сортируются перед сжатием в сегменты columnstore. При создании индекса с ORDER данные сортируются до добавления в сегменты индекса, и производительность запросов можно улучшить. Дополнительные сведения о упорядоченных кластеризованных индексах columnstore в Azure Synapse Analytics см. в разделе "Настройка производительности с помощью упорядоченного кластеризованного индекса columnstore".

Упорядоченная CCI может быть создана для столбцов любых типов данных, поддерживаемых в Azure Synapse Analytics, за исключением строковых столбцов.

Пользователи могут запрашивать column_store_order_ordinal столбец для столбца sys.index_columns или столбцов, в который упорядочена таблица, и последовательность в порядке.

Дополнительные сведения см. в разделе Настройка производительности с упорядоченным кластеризованным индексом columnstore.

Тип данных

Azure Synapse Analytics поддерживает наиболее часто используемые типы данных. Дополнительные сведения о типах данных и их использовании см. в статье "Типы данных" для таблиц в Azure Synapse Analytics.

Примечание.

Аналогично SQL Server существует ограничение в 8060 байт на строку. Это может стать блокировкой для таблиц с большим количеством столбцов или столбцов с большими типами данных, такими как nvarchar(max) или varbinary(max). Вставки или обновления, нарушающие ограничение на 8060 байт, приводят к ошибкам с кодами 511 или 611. Дополнительные сведения см. в разделе Руководство по архитектуре страниц и экстентов.

Таблица преобразований типов данных см. в разделе "Неявные преобразования" cast и CONVERT (Transact-SQL). Дополнительные сведения см. в разделе "Типы и функции данных даты и времени" (Transact-SQL).

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

datetimeoffset [ ( n ) ]
Значение по умолчанию для n равно 7.

datetime2 [ ( n ) ]
То же, что datetime, за исключением того, что можно указать количество долей секунды. Значение по умолчанию для n равно 7.

Значение n Точность Масштабировать
0 19 0
1 21 1
2 22 2
3 23 3
4 24 4
5 25 5
6 26 6
7 27 7

datetime
Сохраняет дату и время дня длиной от 19 до 23 символов по Григорианскому календарю. Дата может содержать год, месяц и день. Время содержит часы, минуты и секунды. При необходимости можно отобразить три знака для долей секунды. Размер при хранении составляет 8 байт.

smalldatetime
Сохраняет дату и время. Размер при хранении составляет 4 байта.

date
Сохраняет дату длиной до 10 символов по григорианскому календарю. Размер при хранении составляет 3 байта. Дата сохраняется в виде целого числа.

time [ ( n ) ]
Значение по умолчанию для n равно 7.

float [ ( n ) ]
Типы приблизительных числовых данных, используемые для числовых данных с плавающей запятой. Данные с плавающей запятой являются приблизительными, поэтому не все значения из диапазона могут быть отображены точно. n указывает количество битов, используемых для хранения мантиссы float в экспоненциальном представлении. n определяет точность и размер хранения данных. Если указан параметр n, он должен находиться в диапазоне от 1 до 53. Значение n по умолчанию — 53.

Значение n Точность Объем памяти
1–24 7 цифр 4 байта
25–53 15 знаков 8 байт

Azure Synapse Analytics обрабатывает n как одно из двух возможных значений. Если 1<= n<= 24, n принимает значение 24. Если 25<= n<= 53, n принимает значение 53.

Тип данных с плавающей запятой Azure Synapse Analytics соответствует стандарту ISO для всех значений n от 1 нуля53. Синоним двойной точности — float(53).

real [ ( n ) ]
Определение типа real соответствует определение типа float. Синонимом по стандарту ISO для типа real является float(24).

decimal [ ( точность [ , масштаб ] ) ] | numeric [ ( точность [ , масштаб ] ) ]
Хранит числа с фиксированной точностью и масштабом.

precision
Максимальное общее количество десятичных цифр, которые могут храниться в любой части десятичной запятой. Точность должна находиться в диапазоне от 1 до 38. Точность по умолчанию — 18.

scale
Максимальное количество десятичных разрядов числа справа от десятичной запятой. Масштаб должен иметь значение от 0 до точности. Масштаб можно указать только в том случае, если указана точность. Масштаб по умолчанию — 0, поэтому 0<= масштаб<= точность. Максимальный размер хранилища зависит от точности.

Точность Байты хранилища
1–9 5
10–19 9
20–28 13
29–38 17

money | smallmoney
Типы данных, представляющие денежные значения.

Тип данных Байты хранилища
money 8
smallmoney 4

bigint | int | smallint | tinyint
Типы точных числовых данных, использующие целые значения. Размер данных хранения приведен в следующей таблице.

Тип данных Байты хранилища
bigint 8
int 4
smallint 2
tinyint 1

bit
Целочисленный тип данных, который может принимать значения 1, 0 или NULL. Azure Synapse Analytics оптимизирует хранение битовых столбцов. Если в таблице имеется 8 или менее столбцов типа bit, они хранятся как 1 байт. Если имеется от 9 до 16 столбцов типа bit, они хранятся как 2 байта и т.д.

nvarchar [ ( n | max ) ] Данные символов Юникода переменной длины. n может иметь значение от 1 до 4000. Значение max указывает, что максимальный размер при хранении составляет 2^31-1 байт (2 ГБ). Размер для хранения в байтах равен удвоенному числу введенных символов + 2 байта. Введенные данные могут иметь длину в ноль символов. Длина max применяется только к Azure Synapse Analytics.

nchar [ ( n ) ]
Символьные данные фиксированной длины в формате Юникод. Длина составляет n символов. n должно иметь значение от 1 до 4000. Размер хранилища — дважды n байт.

varchar [ ( n | max ) ] Переменная длина, символьные данные, отличные от Юникода, длиной n байтов. n может иметь значение от 1 до 8000. Значение max указывает, что максимальный размер при хранении составляет 2^31-1 байт (2 ГБ). Размер хранения равен фактической длине данных плюс два байта. Длина max применяется только к Azure Synapse Analytics.

char [ ( n ) ]
Символьные данные фиксированной длины не в формате Юникод. Длина составляет n байт. n может иметь значение от 1 до 8000. Размер при хранении составляет n байт. Значение n по умолчанию — 1.

varbinary [ ( n | max ) ] Двоичные данные переменной длины. n может иметь значение от 1 до 8000. Значение max указывает, что максимальный размер при хранении составляет 2^31-1 байт (2 ГБ). Размер хранения равен фактической длине данных плюс два байта. Значение по умолчанию для n равно 7. Длина max применяется только к Azure Synapse Analytics.

binary [ ( n ) ]
Двоичные данные фиксированной длины n байт. n может иметь значение от 1 до 8000. Размер при хранении составляет n байт. Значение по умолчанию для n равно 7.

uniqueidentifier
16-байтовый идентификатор GUID.

Разрешения

Для создания таблицы требуется разрешение в предопределенной роли базы данных db_ddladmin или:

  • разрешение CREATE TABLE в базе данных
  • ALTER SCHEMA разрешение на схему таблицы

Для создания секционированной таблицы требуется разрешение в предопределенной роли базы данных db_ddladmin или

  • разрешение ALTER ANY DATASPACE

Имя входа, от имени которого создается локальная временная таблица, получает разрешения CONTROL, INSERT, SELECT и UPDATE для этой таблицы.

Замечания

Минимальные и максимальные ограничения в Azure Synapse Analytics см. в разделе об ограничениях емкости Azure Synapse Analytics.

Определение количества секций таблиц

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

Каждое распределение содержит все секции таблицы. Например, для 60 распределений, четырех секций таблицы и одной пустой секции мы получим 300 секций (5 x 60= 300). Если таблица является кластеризованным индексом columnstore, на секцию будет один индекс columnstore, то есть у вас будет 300 индексов columnstore.

Рекомендуется использовать меньшее число секций таблицы, чтобы в каждом индексе columnstore было достаточное количество строк для использования всех преимуществ индексов columnstore. Дополнительные сведения в Azure Synapse Analytics см. в разделе "Секционирование таблиц в выделенном пуле SQL" и "Индексы" для выделенных таблиц пула SQL в Azure Synapse Analytics.

Таблица rowstore (куча или кластеризованный индекс)

Таблица rowstore — это таблица, которая хранится в порядке по строкам. Это куча или кластеризованный индекс. Azure Synapse Analytics создает все таблицы rowstore с сжатием страниц; Это поведение не настраивается пользователем.

Таблица columnstore (индекс columnstore)

Таблица columnstore — это таблица, которая хранится в порядке по столбцам. Индекс columnstore — это технология, которая управляет данными, хранящимися в таблице columnstore. Кластеризованный индекс columnstore не влияет на распределение данных. Скорее, это влияет на то, как данные хранятся в каждом распределении.

Чтобы преобразовать таблицу rowstore в таблицу columnstore, удалите все существующие индексы таблицы и создайте кластеризованный индекс columnstore. Пример см. в разделе CREATE COLUMNSTORE INDEX (Transact-SQL).

Дополнительные сведения см. в следующих статьях:

Ограничения

  • Вы не можете определить ограничение DEFAULT для столбца распределения.
  • Имя таблицы не может быть больше 128 символов.
  • Имя столбца не может превышать 128 символов.

Секции

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

CREATE TABLE t1 ( c1 varchar(20) COLLATE Divehi_90_CI_AS_KS_WS) WITH (PARTITION (c1 RANGE FOR VALUES (N'')))

Если boundary_value является литеральным значением, которое должно быть неявно преобразовано в тип данных в partition_column_name, возникает несоответствие. Литеральное значение отображается с помощью системных представлений Azure Synapse Analytics, но преобразованное значение используется для операций Transact-SQL.

Временные таблицы

Глобальные временные таблицы, начинающиеся с ## , не поддерживаются.

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

  • Они видимы только в текущем сеансе. Azure Synapse Analytics автоматически удаляет их в конце сеанса. Для явного удаления этих таблиц используйте инструкцию DROP TABLE.
  • Их нельзя переименовать.
  • Они не могут иметь секции или представления.
  • Изменить их разрешения невозможно. Инструкции GRANT, DENY и REVOKE не могут использоваться с локальными временными таблицами.
  • Консольные команды базы данных для временных таблиц блокируются.
  • Если в пакете используется несколько локальных временных таблиц, они должны иметь уникальные имена. Если несколько сеансов выполняют один пакет и создают одну и ту же локальную временную таблицу, Azure Synapse Analytics внутренне добавляет числовой суффикс к имени локальной временной таблицы, чтобы сохранить уникальное имя для каждой локальной временной таблицы.

Режим блокировки

Применяет монопольную блокировку к таблице. Применяет совмещаемую блокировку к объектам DATABASE, SCHEMA и SCHEMARESOLUTION.

Примеры для столбцов

А. Указание параметров сортировки столбца

В следующем примере создается таблица MyTable с двумя различными параметрами сортировки столбцов. По умолчанию столбец mycolumn1 имеет параметры сортировки по умолчанию Latin1_General_100_CI_AS_KS_WS. Столбец mycolumn2 имеет параметры сортировки Frisian_100_CS_AS.

CREATE TABLE MyTable   
  (  
    mycolumnnn1 nvarchar,  
    mycolumn2 nvarchar COLLATE Frisian_100_CS_AS )  
WITH ( CLUSTERED COLUMNSTORE INDEX )  
;  

B. Указания ограничения DEFAULT для столбца

В следующем примере показан синтаксис для указания значения по умолчанию для столбца. Столбец colA имеет ограничение по умолчанию constraint_colA и значение по умолчанию 0.

CREATE TABLE MyTable
  (  
    colA int CONSTRAINT constraint_colA DEFAULT 0,  
    colB nvarchar COLLATE Frisian_100_CS_AS
  )  
WITH ( CLUSTERED COLUMNSTORE INDEX )  
;  

Примеры для временных таблиц

C. Создание локальной временной таблицы

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

CREATE TABLE AdventureWorks.dbo.#myTable
  (  
   id int NOT NULL,  
   lastName varchar(20),  
   zipCode varchar(6)  
  )  
WITH  
  (   
    DISTRIBUTION = HASH (id),  
    CLUSTERED COLUMNSTORE INDEX
  )  
;  

Примеры структуры таблиц

D. Создание таблицы с кластеризованным индексом columnstore

В следующем примере создается таблица распределения с кластеризованным индексом columnstore. Каждое распределение хранится в виде columnstore.

Кластеризованный индекс columnstore не влияет на способ распределения данных; данные всегда распределены по строкам. Кластеризованный индекс влияет на способ хранения данных в пределах каждого распределения.

  CREATE TABLE MyTable
  (  
    colA int CONSTRAINT constraint_colA DEFAULT 0,  
    colB nvarchar COLLATE Frisian_100_CS_AS
  )  
WITH   
  (   
    DISTRIBUTION = HASH ( colB ),  
    CLUSTERED COLUMNSTORE INDEX
  )  
;  

Е. Создание упорядоченного кластеризованного индекса columnstore

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

CREATE TABLE Lineitem  
WITH (DISTRIBUTION = ROUND_ROBIN, CLUSTERED COLUMNSTORE INDEX ORDER(SHIPDATE))  
AS  
SELECT * FROM ext_Lineitem

Примеры распределения таблиц

F. Создание таблицы ROUND_ROBIN

В следующем примере создается таблица ROUND_ROBIN с тремя столбцами и без секций. Данные распространяются между всеми распределениями. Создается таблица с кластеризованным индексом columnstore, который обладает лучшей производительностью и характеристиками сжатия данных по сравнению с кучей или кластеризованным индексом rowstore.

CREATE TABLE myTable
  (  
    id int NOT NULL,  
    lastName varchar(20),  
    zipCode varchar(6)  
  )  
WITH ( CLUSTERED COLUMNSTORE INDEX );  

G. Создание таблицы с распределенным хэшем по нескольким столбцам (предварительная версия)

В следующем примере создается точно такая же таблица, как в предыдущем примере. Однако для этой таблицы строки распределяются (по столбцам id и zipCode). Создается таблица с кластеризованным индексом columnstore, который обладает лучшей производительностью и характеристиками сжатия данных по сравнению с кучей или кластеризованным индексом rowstore.

CREATE TABLE myTable
  (  
    id int NOT NULL,  
    lastName varchar(20),  
    zipCode varchar(6)  
  )  
WITH  
  (   
    DISTRIBUTION = HASH (id, zipCode), 
    CLUSTERED COLUMNSTORE INDEX  
  );  

H. Создание реплицированной таблицы

В следующем примере создается реплицированная таблица, как и в предыдущем примере. Реплицированные таблицы копируются в полном объеме на каждый вычислительный узел. Благодаря наличию копии на каждом вычислительном узле уменьшается объем перемещаемых данных для запросов. В этом примере таблица создается с использованием кластеризованного индекса, который обеспечивает лучшее сжатие данных, чем куча. Куча может не содержать достаточно строк для достижения хорошего сжатия CLUSTERED COLUMNSTORE INDEX.

CREATE TABLE myTable
  (  
    id int NOT NULL,  
    lastName varchar(20),  
    zipCode varchar(6)  
  )  
WITH  
  (   
    DISTRIBUTION = REPLICATE,
    CLUSTERED INDEX (lastName)  
  );  

Примеры секций таблиц

I. Создание секционированной таблицы

В следующем примере создается та же таблица, что и в примере A, с добавлением RANGE LEFT секционирования в столбце id . В нем указаны четыре граничных значения секций, таким образом, общее количество секций равно пяти.

CREATE TABLE myTable
  (  
    id int NOT NULL,  
    lastName varchar(20),  
    zipCode int)  
WITH
  (

    PARTITION ( id RANGE LEFT FOR VALUES (10, 20, 30, 40 )),  
    CLUSTERED COLUMNSTORE INDEX
  );  

В этом примере данные будут отсортированы в следующих секциях:

  • Секция 1: столбцы до 10-го
  • Секция 2: столбцы с 11-го по 20-й
  • Секция 3: столбцы с 21-го по 30-й
  • Секция 4: столбцы с 31-го по 40-й
  • Секция 5: столбцы с 41-го и далее

Если эта же таблица была секционирована с использованием RANGE RIGHT вместо RANGE LEFT (по умолчанию), данные будут отсортированы в следующих секциях:

  • Секция 1: столбцы до 9-го
  • Секция 2: столбцы с 10-го по 19-й
  • Секция 3: столбцы с 20-го по 29-й
  • Секция 4: столбцы с 30-го по 39-й
  • Секция 5: столбцы с 40-го и далее

J. Создание секционированной таблицы с одной секцией

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

CREATE TABLE myTable (  
    id int NOT NULL,  
    lastName varchar(20),  
    zipCode int)  
WITH
    (
      PARTITION ( id RANGE LEFT FOR VALUES ( )),  
      CLUSTERED COLUMNSTORE INDEX  
    )  
;  

K. Создание таблицы с секционированием даты

В следующем примере создается новая таблица с именем myTable с секционированием по столбцу date. При использовании RANGE RIGHT и дат в качестве граничных значений в каждой секции будут находиться данные для одного месяца.

CREATE TABLE myTable (  
    l_orderkey      bigint,
    l_partkey       bigint,
    l_suppkey       bigint,
    l_linenumber    bigint,
    l_quantity      decimal(15,2),  
    l_extendedprice decimal(15,2),  
    l_discount      decimal(15,2),  
    l_tax           decimal(15,2),  
    l_returnflag    char(1),  
    l_linestatus    char(1),  
    l_shipdate      date,  
    l_commitdate    date,  
    l_receiptdate   date,  
    l_shipinstruct  char(25),  
    l_shipmode      char(10),  
    l_comment       varchar(44))  
WITH
  (
    DISTRIBUTION = HASH (l_orderkey),  
    CLUSTERED COLUMNSTORE INDEX,  
    PARTITION ( l_shipdate  RANGE RIGHT FOR VALUES
      (  
        '1992-01-01','1992-02-01','1992-03-01','1992-04-01','1992-05-01',
        '1992-06-01','1992-07-01','1992-08-01','1992-09-01','1992-10-01',
        '1992-11-01','1992-12-01','1993-01-01','1993-02-01','1993-03-01',
        '1993-04-01','1993-05-01','1993-06-01','1993-07-01','1993-08-01',
        '1993-09-01','1993-10-01','1993-11-01','1993-12-01','1994-01-01',
        '1994-02-01','1994-03-01','1994-04-01','1994-05-01','1994-06-01',
        '1994-07-01','1994-08-01','1994-09-01','1994-10-01','1994-11-01',
        '1994-12-01'  
      ))
  );  

Область применения: хранилище в Microsoft Fabric

Создает новую таблицу в хранилище в Microsoft Fabric.

Дополнительные сведения см. в статье "Создание таблиц в хранилище в Microsoft Fabric".

Примечание.

Дополнительные сведения об Azure Synapse Analytics и analytics Platform System (PDW) см. в статье CREATE TABLE (Azure Synapse Analytics). Для платформ SQL Server и Azure SQL перейдите в раздел CREATE TABLE и выберите нужную версию продукта из раскрывающегося списка версий.

Соглашения о синтаксисе Transact-SQL

Синтаксис

-- Create a new table.
CREATE TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
    ( 
      { column_name <data_type>  [ <column_options> ] } [ ,...n ]
    )  
[;]  

<column_options> ::=
    [ NULL | NOT NULL ] -- default is NULL

<data type> ::=
      datetime2 ( n )   
    | date  
    | time ( n )   
    | float [ ( n ) ]  
    | real [ ( n ) ]  
    | decimal [ ( precision [ , scale ] ) ]   
    | numeric [ ( precision [ , scale ] ) ]   
    | bigint  
    | int   
    | smallint  
    | bit  
    | varchar [ ( n | MAX ) ] 
    | char [ ( n ) ]  
    | varbinary [ ( n | MAX ) ] 
    | uniqueidentifier  

Аргументы

database_name

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

schema_name

Схема таблицы. Схема является необязательной. Если пусто, используется схема по умолчанию.

table_name

Имя новой таблицы.

column_name

Имя столбца таблицы.

Параметры столбца

NULL | NOT NULL
Указывает, допустимы ли для столбца значения NULL. Значение по умолчанию — NULL.

Тип данных

Microsoft Fabric поддерживает наиболее часто используемые типы данных. Дополнительные сведения см. в разделе "Типы данных" в Microsoft Fabric.

Примечание.

Аналогично SQL Server существует ограничение в 8060 байт на строку. Это может стать блокировкой для таблиц с большим количеством столбцов или столбцов с большими типами данных, например varchar(8000) или varbinary(8000). Вставки или обновления, нарушающие ограничение на 8060 байт, приводят к ошибкам с кодами 511 или 611. Дополнительные сведения см. в разделе Руководство по архитектуре страниц и экстентов.

Таблица преобразований типов данных см. в разделе "Неявные преобразования" cast и CONVERT (Transact-SQL). Дополнительные сведения см. в разделе "Типы и функции данных даты и времени" (Transact-SQL).

В следующем списке поддерживаемых типов данных содержатся сведения и байты хранилища.

datetime2 ( n )
Хранит дату и время дня с 19 до 26 символов в соответствии с григорианским календарем. Дата может содержать год, месяц и день. Время содержит часы, минуты и секунды. В качестве параметра можно хранить и отображать ноль до шести цифр для дробных секунд на основе параметра n . Размер при хранении составляет 8 байт. n может иметь значение от 0 до 6.

Примечание.

Точность по умолчанию, как и другие платформы SQL, отсутствует. Необходимо указать значение точности от 0 до 6.

Значение n Точность Масштабировать
0 19 0
1 21 1
2 22 2
3 23 3
4 24 4
5 25 5
6 26 6

date
Сохраняет дату длиной до 10 символов по григорианскому календарю. Размер при хранении составляет 3 байта. Дата сохраняется в виде целого числа.

time ( n )
n может иметь значение от 0 до 6.

float [ ( n ) ]
Типы приблизительных числовых данных, используемые для числовых данных с плавающей запятой. Данные с плавающей запятой являются приблизительными, поэтому не все значения из диапазона могут быть отображены точно. n указывает количество битов, используемых для хранения мантисса плавающей запятой в научной нотации. n определяет точность и размер хранения данных. Если указан параметр n, он должен находиться в диапазоне от 1 до 53. Значение n по умолчанию — 53.

Примечание.

Точность по умолчанию, как и другие платформы SQL, отсутствует. Необходимо указать значение точности от 0 до 6.

Значение n Точность Объем памяти
1–24 7 цифр 4 байта
25–53 15 знаков 8 байт

Azure Synapse Analytics обрабатывает n как одно из двух возможных значений. Если 1<= n<= 24, n принимает значение 24. Если 25<= n<= 53, n принимает значение 53.

Тип данных с плавающей запятой Azure Synapse Analytics соответствует стандарту ISO для всех значений n от 1 нуля53. Синоним двойной точности — float(53).

real [ ( n ) ]
Определение типа real соответствует определение типа float. Синонимом по стандарту ISO для типа real является float(24).

decimal [ ( точность [ , масштаб ] ) ] | numeric [ ( точность [ , масштаб ] ) ]
Хранит числа с фиксированной точностью и масштабом.

precision
Максимальное общее количество десятичных цифр, которые могут храниться в любой части десятичной запятой. Точность должна находиться в диапазоне от 1 до 38. Точность по умолчанию — 18.

scale
Максимальное количество десятичных разрядов числа справа от десятичной запятой. Масштаб должен иметь значение от 0 до точности. Масштаб можно указать только в том случае, если указана точность. Масштаб по умолчанию — 0, поэтому 0<= масштаб<= точность. Максимальный размер хранилища зависит от точности.

Точность Байты хранилища
1–9 5
10–19 9
20–28 13
29–38 17

bigint | int | smallint
Типы точных числовых данных, использующие целые значения. Размер данных хранения приведен в следующей таблице.

Тип данных Байты хранилища
bigint 8
int 4
smallint 2

bit
Целочисленный тип данных, который может принимать значения 1, 0 или NULL. Azure Synapse Analytics оптимизирует хранение битовых столбцов. Если в таблице имеется 8 или менее столбцов типа bit, они хранятся как 1 байт. Если имеется от 9 до 16 столбцов типа bit, они хранятся как 2 байта и т.д.

varchar [ ( n | MAX ) ] Переменная длина, символьные данные Юникода с длиной n байтов. n может иметь значение от 1 до 8000. Размер хранения равен фактической длине данных плюс два байта. Значение n по умолчанию — 1. Столбец varchar(MAX) может хранить до 1 МБ текста в хранилище.

Примечание.

varchar(MAX) находится в предварительной версии в хранилище. Дополнительные сведения см. в разделе "Типы данных" в Microsoft Fabric.

char [ ( n ) ]
Фиксированной длины, символьные данные Юникода с длиной n байтов. n может иметь значение от 1 до 8000. Размер при хранении составляет n байт. Значение n по умолчанию — 1.

varbinary [ ( n | MAX ) ] Двоичные данные переменной длины. n может иметь значение от 1 до 8000. Размер хранения равен фактической длине данных плюс два байта. Значение по умолчанию для n равно 7.
Столбец varbinary(MAX) может хранить до 1 МБ данных в хранилище.

Примечание.

varbinary(MAX) находится в предварительной версии в хранилище. Дополнительные сведения см. в разделе "Типы данных" в Microsoft Fabric.

uniqueidentifier
16-байтовый идентификатор GUID.

Разрешения

Разрешения в Microsoft Fabric отличаются от разрешений Azure Synapse Analytics.

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

Ограничения

Замечания

В хранилище существует ограниченная функциональность Transact-SQL. Дополнительные сведения см. в статье "Область поверхности TSQL" в Microsoft Fabric.

Режим блокировки

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