Проблемы с синтаксисом Openrowset в Azure Synapse

#azure #tsql #azure-blob-storage #azure-sql-data-warehouse #azure-synapse

#azure #tsql #azure-blob-хранилище #azure-sql-хранилище данных #azure-synapse

Вопрос:

Я использую редактор запросов Azure synapse для выполнения приведенного ниже запроса, это также пример, приведенный в документации Azure

 SELECT
    nyc.filename() AS [filename]
    ,COUNT_BIG(*) AS [rows]
FROM  
    OPENROWSET(
        BULK '../userdata1.parquet',
    DATA_SOURCE = AzureStorage,
    FORMAT_TYPE = PARQUET
    ) nyc
GROUP BY nyc.filename();
  

Но он всегда выдает

Ошибка синтаксического анализа в строке: 5, столбец: 5: неправильный синтаксис рядом с ‘OPENROWSET’.

Но мне удалось успешно запустить инструкцию Create с полной схемой и выполнить запросы select во внешней таблице

 CREATE EXTERNAL TABLE dbo.userdata1 (
    [registration_dttm] nvarchar(100) NULL,
    [id]                decimal(38,0) NULL,
    [first_name]        nvarchar(100) NULL,
    [last_name]         nvarchar(100) NULL,
      |
      |
      |
)
WITH (
    LOCATION='../userdata1.parquet',
    DATA_SOURCE = AzureStorage,
    FILE_FORMAT=parquet_file_format
);
  

Выберите @@Version —

Хранилище данных Microsoft Azure SQL — 10.0.15225.0 8 сентября 2020 20:17:38 Авторское право (c) Корпорация Microsoft

Пожалуйста, поправьте меня, если что-то не так…

Ответ №1:

При назначении nyc для набора строк вам не хватает «AS»:

ВЫБЕРИТЕ … ИЗ
OPENROWSET( … ) В КАЧЕСТВЕ ГРУППЫ nyc ПО nyc.filename();

Комментарии:

1. Спасибо за ответ @joel-cochran , также я просмотрел документы и понял, что этот запрос работает только в Azure Synapse SQL On-Demand, я прав??

2. Да, этот синтаксис предназначен для SQL On-demand (SOD). В пуле SQL вы должны использовать Polybase (внешние таблицы), которыми вы поделились в своем сообщении. Если этот ответ решил вашу проблему, пожалуйста, примите его как ответ.