Неверный синтаксис рядом с CLUSTERED в лазурном SQL - PullRequest
0 голосов
/ 29 августа 2018

привет, я новичок в концепции разделения

при создании таблицы с индексом хранилища столбцов в Azure SQL я получаю сообщение об ошибке типа

Сообщение 102, Уровень 15, Состояние 1, Строка 15 Неверный синтаксис рядом с CLUSTERED.

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

CREATE TABLE [dbo].[FactInternetSales]
(
    [ProductKey]            int          NOT NULL
  ,[OrderDateKey]          int          NOT NULL
,   [CustomerKey]           int          NOT NULL
,   [PromotionKey]          int          NOT NULL
,   [SalesOrderNumber]      nvarchar(20) NOT NULL
,   [OrderQuantity]         smallint     NOT NULL
,   [UnitPrice]             money        NOT NULL
,   [SalesAmount]           money        NOT NULL

)
WITH
(   CLUSTERED COLUMNSTORE INDEX
,   DISTRIBUTION = HASH([ProductKey])
,   PARTITION   (   [OrderDateKey] RANGE RIGHT FOR VALUES
                    (20000101,20010101,20020101
                    ,20030101,20040101,20050101
                    )
                )
)
;

Ответы [ 3 ]

0 голосов
/ 30 августа 2018

DDL в вашем вопросе - это синтаксис для хранилища данных SQL / хранилища параллельных данных SQL, а не для базы данных SQL Azure (или SQL Server на виртуальной машине Azure или локально). Нельзя использовать встроенный синтаксис для последнего, плюс условие DISTIBUTION в этих случаях неприменимо.

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

CREATE PARTITION FUNCTION PF_FactInternetSales_OrderDateKey(int)
AS RANGE RIGHT FOR VALUES(
      20000101
    , 20010101
    , 20020101
    , 20030101
    , 20040101
    , 20050101
);

CREATE PARTITION SCHEME PS_FactInternetSales_OrderDateKey
    AS PARTITION PF_FactInternetSales_OrderDateKey
    ALL TO ([PRIMARY]);

CREATE TABLE [dbo].[FactInternetSales]
(
      [ProductKey]            int          NOT NULL
    , [OrderDateKey]          int          NOT NULL
    , [CustomerKey]           int          NOT NULL
    , [PromotionKey]          int          NOT NULL
    , [SalesOrderNumber]      nvarchar(20) NOT NULL
    , [OrderQuantity]         smallint     NOT NULL
    , [UnitPrice]             money        NOT NULL
    , [SalesAmount]           money        NOT NULL
    , INDEX ccix CLUSTERED COLUMNSTORE ON PS_FactInternetSales_OrderDateKey(OrderDateKey)
) ON PS_FactInternetSales_OrderDateKey(OrderDateKey);

Обратите внимание, что для использования columnstore в базе данных SQL Azure необходим минимум Standard Edition и S3 Service Objective. Запрос ниже вернет вашу текущую конфигурацию.

SELECT
      DATABASEPROPERTYEX(N'YourDatabase', 'Edition') AS Edition
    , DATABASEPROPERTYEX(N'YourDatabase', 'ServiceObjective') AS ServiceObjective;

При необходимости вы переходите на более высокий уровень с помощью портала или в T-SQL с DDL ниже. Это может занять несколько минут, и вы можете запустить приведенный выше запрос, чтобы убедиться, что он выполнен.

ALTER DATABASE YourDatabase
    MODIFY (SERVICE_OBJECTIVE = 'S3');

Я вижу, вы также пометили свой вопрос SQL Server 2012. Кластерные индексы columnstore были введены в SQL Server 2014 Enterprise Edition и, начиная с SQL Server 2016 с пакетом обновления 2 (SP2), могут использоваться и в других выпусках SQL Server. В SQL Server 2012 поддерживаются только некластеризованные индексы хранилища столбцов только для чтения.

0 голосов
/ 23 марта 2019

Чтобы решить эту проблему, вам нужно выбрать Datawarehouse вместо конкретных баз данных. Если вы используете Azure Data Studio, рядом с «Изменить соединение» есть кнопка раскрывающегося списка. Убедитесь, что вы выбираете конкретное хранилище данных.

Примечание: CLUSTERED COLUMNSTORE INDEX - это параметр структуры таблицы, в котором таблица хранится в виде кластеризованного индекса columnstore, в котором все данные сжимаются и сохраняются по столбцам. Кластерный индекс columnstore является значением по умолчанию для хранилища данных SQL и применяется ко всем данным таблицы.

Для получения дополнительной информации проверьте: https://docs.microsoft.com/en-us/learn/modules/understand-the-sql-dw-connector-with-azure-databricks/5-create-tables-perform-queries

0 голосов
/ 29 августа 2018

Следующее сработало для меня только для уровня Standard S3 и более поздних. Я не смог установить распределение и раздел.

CREATE TABLE [dbo].[FactInternetSales]
(
    [ProductKey]            int          NOT NULL
  ,[OrderDateKey]          int          NOT NULL
,   [CustomerKey]           int          NOT NULL
,   [PromotionKey]          int          NOT NULL
,   [SalesOrderNumber]      nvarchar(20) NOT NULL
,   [OrderQuantity]         smallint     NOT NULL
,   [UnitPrice]             money        NOT NULL
,   [SalesAmount]           money        NOT NULL

)
GO
CREATE CLUSTERED COLUMNSTORE index ProductKey on FactInternetSales
...