Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Область применения: Управляемый экземпляр SQL Azure
- База данных SQL Azure
- Управляемый экземпляр Azure SQL
В этой статье описывается функция виртуализации данных Управляемого экземпляра SQL Azure. Виртуализация данных позволяет выполнять запросы Transact-SQL (T-SQL) к файлам, которые хранят данные в общих форматах данных в Azure Data Lake Storage 2-го поколения или хранилище BLOB-объектов Azure. Эти данные можно объединить с локально хранимыми реляционными данными с помощью соединений. С помощью виртуализации данных можно прозрачно получать доступ к внешним данным в режиме только для чтения, сохраняя его в исходном формате и расположении.
Обзор
Виртуализация данных предоставляет два способа запроса файлов, предназначенных для различных наборов сценариев:
- Синтаксис OPENROWSET: оптимизирован для нерегламентированного запроса файлов. Обычно используется для быстрого изучения содержимого и структуры нового набора файлов.
- Синтаксис CREATE EXTERNAL TABLE: оптимизирован для повторяющихся запросов к файлам с использованием идентичного синтаксиса, как если бы данные хранились локально в базе данных. Для внешних таблиц нужно выполнить некоторые действия по подготовке (по сравнению с синтаксисом OPENROWSET), но это позволяет более точно управлять доступом к данным. Используйте внешние таблицы для аналитических рабочих нагрузок и отчетов.
В любом случае создайте внешний источник данных с помощью синтаксиса CREATE EXTERNAL DATA SOURCE T-SQL, как показано в этой статье.
Синтаксис CREATE EXTERNAL TABLE AS SELECT также доступен для Управляемого экземпляра SQL Azure. Это позволяет экспортировать результаты инструкции T-SQL SELECT в файлы Parquet или CSV в хранилище BLOB-объектов Azure или Azure Data Lake Storage (ADLS) 2-го поколения и создать внешнюю таблицу на вершине этих файлов.
Форматы файлов
Форматы файлов Parquet и разделенного текста (CSV) поддерживаются напрямую. Формат файлов JSON поддерживается косвенно путем указания формата файлов CSV, в котором запросы возвращают каждый документ в виде отдельной записи. Кроме того, можно проанализировать строки с помощью JSON_VALUE и OPENJSON.
Типы хранилищ
Храните файлы в Azure Data Lake Storage Gen2 или Azure Blob Storage. Чтобы запросить файлы, укажите расположение в определенном формате и используйте префикс типа расположения, соответствующий типу внешнего источника и конечной точки или протокола, например в следующих примерах:
--Blob Storage endpoint
abs://<container>@<storage_account>.blob.core.windows.net/<path>/<file_name>.parquet
--Data Lake endpoint
adls://<container>@<storage_account>.dfs.core.windows.net/<path>/<file_name>.parquet
Внимание
Указанный префикс типа расположения используется для выбора оптимального протокола для обмена данными и использования любых расширенных возможностей, предлагаемых определенным типом хранилища.
Использование универсального https:// префикса отключено. Всегда используйте префиксы, относящиеся к конечной точке.
Начало работы
Если вы не знакомы с виртуализацией данных и хотите быстро протестировать функциональные возможности, начните с запроса общедоступных наборов данных, доступных в Открытых наборах данных Azure, таких как набор данных Bing COVID-19 , который разрешает анонимный доступ.
Используйте следующие конечные точки для отправки запросов к наборам данных Bing COVID-19:
- Паркет:
abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet - CSV:
abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv
Чтобы получить первую информацию о наборе данных, выполните запрос T-SQL. Этот запрос использует OPENROWSET для запроса файла, хранящегося в общедоступной учетной записи хранения:
--Quick query on a file stored in a publicly available storage account:
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet',
FORMAT = 'parquet'
) AS filerows
Вы можете продолжить анализ набора данных, добавив WHERE, GROUP BY и другие условия на основе результата первого запроса.
Если первый запрос завершается сбоем в управляемом экземпляре SQL, этот экземпляр, скорее всего, имеет ограниченный доступ к учетным записям хранения Azure. Обратитесь к специалисту по работе с сетями, чтобы включить доступ, прежде чем продолжить выполнение запросов.
Когда вы знакомы с запросами общедоступных наборов данных, рассмотрите возможность переключения на неопубликованные наборы данных, требующие предоставления учетных данных, предоставления прав доступа и настройки правил брандмауэра. Во многих реальных сценариях вы работаете в основном с частными наборами данных.
Доступ к неопубликованным учетным записям хранения
Пользователь, который входит в SQL управляемый экземпляр, должен получить разрешение на доступ и выполнение запросов к файлам, хранящимся в непубличной учетной записи хранения. Действия авторизации зависят от того, как управляемый экземпляр SQL проходит проверку подлинности в учетной записи хранения. Тип проверки подлинности и все связанные параметры не предоставляются напрямую с каждым запросом. Объект учетных данных, связанный с базой данных, хранящийся в пользовательской базе данных, инкапсулирует эти сведения. База данных использует учетные данные для доступа к учетной записи хранения при выполнении запроса.
Управляемый экземпляр SQL Azure поддерживает следующие типы проверки подлинности:
- Манажируемая идентичность
- Подпись для совместного доступа (SAS)
Управляемое удостоверение — это функция идентификатора Microsoft Entra (ранее Azure Active Directory), предоставляющего службы Azure, такие как Управляемый экземпляр SQL Azure, с удостоверением, управляемым в идентификаторе Microsoft Entra. Это удостоверение можно использовать для авторизации запросов на доступ к данным в неопубликованных учетных записях хранения. Такие службы, как Управляемый экземпляр SQL Azure имеют управляемое удостоверение, назначаемое системой, а также могут иметь одно или несколько управляемых удостоверений, назначаемых пользователем. Управляемые удостоверения, назначаемые системой, или управляемые удостоверения, назначаемые пользователем, можно использовать для виртуализации данных с Управляемый экземпляр SQL Azure.
Администратор службы хранилища Azure должен сначала предоставить разрешения управляемому удостоверению для доступа к данным. Предоставьте разрешения на управляемое удостоверение, назначаемое системой управляемому экземпляру SQL, таким же образом, как и любому другому пользователю Microsoft Entra. Например:
- На портал Azure на странице контроль доступа (IAM) учетной записи хранения выберите "Добавить назначение ролей".
- Выберите встроенную роль средства чтения данных BLOB-объектов хранилища Azure RBAC. Эта роль предоставляет доступ на чтение к управляемому удостоверению для необходимых контейнеров хранилища BLOB-объектов Azure.
- Вместо предоставления управляемого удостоверения роли средства чтения данных BLOB-объектов хранилища Azure RBAC можно также предоставить более детализированные разрешения на подмножество файлов. Все пользователи, которым требуется доступ к отдельным файлам в этих данных, также должны иметь разрешение на выполнение всех родительских папок до корневого каталога (контейнера). Дополнительные сведения см. в разделе "Настройка списков управления доступом" в Azure Data Lake Storage 2-го поколения.
- На следующей странице выберите "Назначить доступ к управляемомуудостоверению". Выберите + Добавить участников, и в раскрывающемся списке Управляемое удостоверение, выберите необходимое управляемое удостоверение. Дополнительные сведения см. в разделе Назначение ролей Azure с помощью портала Azure.
- Затем создайте учетные данные, ограниченные областью базы данных, для аутентификации управляемого удостоверения. Обратите внимание, что в следующем примере
'Managed Identity'используется жестко закодированная строка.
-- Optional: Create MASTER KEY if it doesn't exist in the database:
-- CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Some Very Strong Password Here>'
GO
CREATE DATABASE SCOPED CREDENTIAL MyCredential
WITH IDENTITY = 'Managed Identity'
Внешний источник данных
Внешний источник данных — это абстракция, которая обеспечивает простую ссылку на расположение файла в нескольких запросах. Чтобы запросить общедоступные расположения, укажите расположение файла при создании внешнего источника данных:
CREATE EXTERNAL DATA SOURCE MyExternalDataSource
WITH (
LOCATION = 'abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest'
)
Чтобы получить доступ к неопубликованным учетным записям хранения, укажите расположение и наведите ссылку на учетные данные базы данных с инкапсулированными параметрами проверки подлинности. Следующий скрипт создает внешний источник данных, указывающий на путь к файлу и ссылающийся на учетные данные, на которые распространяется область базы данных:
-- Create external data source that points to the file path, and that references a database scoped credential:
CREATE EXTERNAL DATA SOURCE MyPrivateExternalDataSource
WITH (
LOCATION = 'abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest'
CREDENTIAL = [MyCredential];
)
Обращение к источникам данных с помощью OPENROWSET
Синтаксис OPENROWSET позволяет мгновенно запрашивать нерегламентированные запросы, создавая только минимальное количество необходимых объектов базы данных.
OPENROWSET требуется только создание внешнего источника данных (и, возможно, учетных данных) в отличие от подхода внешней таблицы, для которого требуется внешний формат файла и сама внешняя таблица .
Значение параметра DATA_SOURCE автоматически добавляется в начало параметра BULK для формирования полного пути к файлу.
При использовании OPENROWSETукажите формат файла, например следующий пример, который запрашивает один файл:
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'bing_covid-19_data.parquet',
DATA_SOURCE = 'MyExternalDataSource',
FORMAT = 'parquet'
) AS filerows;
Запрос нескольких файлов и папок
Команда OPENROWSET также позволяет отправлять запросы к нескольким файлам или папкам с использованием подстановочных знаков в пути BULK.
В следующем примере используется желтый набор данных для поездки в нью-йорке.
Сначала создайте внешний источник данных:
--Create the data source first:
CREATE EXTERNAL DATA SOURCE NYCTaxiExternalDataSource
WITH (LOCATION = 'abs://nyctlc@azureopendatastorage.blob.core.windows.net');
Теперь вы можете запросить все файлы с расширением .parquet в папках. Например, следующий запрос предназначен только для этих файлов, соответствующих шаблону имени:
--Query all files with .parquet extension in folders matching name pattern:
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'yellow/puYear=*/puMonth=*/*.parquet',
DATA_SOURCE = 'NYCTaxiExternalDataSource',
FORMAT = 'parquet'
) AS filerows;
При отправке запросов к нескольким файлам или папкам все файлы, доступ к которым осуществляется с помощью одной функции OPENROWSET, должны иметь одинаковую структуру (например, одинаковое число столбцов и типов данных). Рекурсивный переход по папкам выполнить нельзя.
Вывод схемы
Автоматический вывод схемы помогает быстро создавать запросы и исследовать данные, если вы не знаете схемы файлов. Вывод схемы работает только с файлами parquet.
Хотя это удобно, выводимые типы данных могут быть больше фактических типов данных, так как в исходных файлах может быть недостаточно сведений, чтобы обеспечить использование соответствующего типа данных. Иногда это приводит к снижению производительности запросов. Например, файлы parquet не содержат метаданные о максимальной длине столбца символов, поэтому экземпляр определяет его как varchar(8000).
Используйте хранимую процедуру sp_describe_first_results_set, чтобы проверить результирующие типы данных запроса, например как в следующем примере:
EXEC sp_describe_first_result_set N'
SELECT
vendorID, tpepPickupDateTime, passengerCount
FROM
OPENROWSET(
BULK ''yellow/*/*/*.parquet'',
DATA_SOURCE = ''NYCTaxiExternalDataSource'',
FORMAT=''parquet''
) AS nyc';
После того как вы знаете типы данных, укажите их с помощью WITH предложения для повышения производительности:
SELECT TOP 100
vendorID, tpepPickupDateTime, passengerCount
FROM
OPENROWSET(
BULK 'yellow/*/*/*.parquet',
DATA_SOURCE = 'NYCTaxiExternalDataSource',
FORMAT='PARQUET'
)
WITH (
vendorID varchar(4), -- we're using length of 4 instead of the inferred 8000
tpepPickupDateTime datetime2,
passengerCount int
) AS nyc;
Так как схема CSV-файлов не может быть автоматически определена, всегда указывайте столбцы с помощью WITH предложения:
SELECT TOP 10 id, updated, confirmed, confirmed_change
FROM OPENROWSET(
BULK 'bing_covid-19_data.csv',
DATA_SOURCE = 'MyExternalDataSource',
FORMAT = 'CSV',
FIRSTROW = 2
)
WITH (
id int,
updated date,
confirmed int,
confirmed_change int
) AS filerows;
Функции метаданных файлов
При отправке запросов к нескольким файлам или папкам вы можете использовать функции filepath() и filename(), чтобы считать метаданные файлов и получить часть пути или полный путь, а также имя файла, из которого получена запись в результирующем наборе:
--Query all files and project file path and file name information for each row:
SELECT TOP 10 filerows.filepath(1) as [Year_Folder], filerows.filepath(2) as [Month_Folder],
filerows.filename() as [File_name], filerows.filepath() as [Full_Path], *
FROM OPENROWSET(
BULK 'yellow/puYear=*/puMonth=*/*.parquet',
DATA_SOURCE = 'NYCTaxiExternalDataSource',
FORMAT = 'parquet') AS filerows;
--List all paths:
SELECT DISTINCT filerows.filepath(1) as [Year_Folder], filerows.filepath(2) as [Month_Folder]
FROM OPENROWSET(
BULK 'yellow/puYear=*/puMonth=*/*.parquet',
DATA_SOURCE = 'NYCTaxiExternalDataSource',
FORMAT = 'parquet') AS filerows;
При вызове без параметров функция filepath() возвращает путь к файлу, из которого была получена запись. Если DATA_SOURCE используется в OPENROWSET, возвращается путь относительно DATA_SOURCE. В противном случае возвращается полный путь.
При вызове с параметром она возвращает ту часть пути, которая соответствует подстановочному знаку в той позиции, которую определяет этот параметр. Например, значение параметра 1 возвращает часть пути, соответствующую первому подстановочному знаку.
Функцию filepath() также можно использовать для фильтрации и агрегирования столбцов:
SELECT
r.filepath() AS filepath
,r.filepath(1) AS [year]
,r.filepath(2) AS [month]
,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
BULK 'yellow/puYear=*/puMonth=*/*.parquet',
DATA_SOURCE = 'NYCTaxiExternalDataSource',
FORMAT = 'parquet'
) AS r
WHERE
r.filepath(1) IN ('2017')
AND r.filepath(2) IN ('10', '11', '12')
GROUP BY
r.filepath()
,r.filepath(1)
,r.filepath(2)
ORDER BY
filepath;
Создание представления поверх OPENROWSET
Вы можете создавать и использовать представления для заключения запросов OPENROWSET в оболочку, чтобы упростить повторное использование базового запроса:
CREATE VIEW TaxiRides AS
SELECT *
FROM OPENROWSET(
BULK 'yellow/puYear=*/puMonth=*/*.parquet',
DATA_SOURCE = 'NYCTaxiExternalDataSource',
FORMAT = 'parquet'
) AS filerows
Также может быть удобно добавить в представление столбцы с данными расположения файлов с помощью функции filepath() для более простой и производительной фильтрации. Использование представлений может уменьшить количество файлов и объем данных, запрос на вершине представления должен считывать и обрабатывать при фильтрации по любому из этих столбцов:
CREATE VIEW TaxiRides AS
SELECT *
, filerows.filepath(1) AS [year]
, filerows.filepath(2) AS [month]
FROM OPENROWSET(
BULK 'yellow/puYear=*/puMonth=*/*.parquet',
DATA_SOURCE = 'NYCTaxiExternalDataSource',
FORMAT = 'parquet'
) AS filerows
Представления также позволяют средствам создания отчетов и аналитики (например, Power BI) использовать результаты OPENROWSET.
Внешние таблицы
Внешние таблицы инкапсулируют доступ к файлам, поэтому запросы к ним практически совпадают с запросом локальных реляционных данных, хранящихся в пользовательских таблицах. Чтобы создать внешнюю таблицу, необходимо иметь объекты внешнего источника данных и внешнего формата файлов:
--Create external file format
CREATE EXTERNAL FILE FORMAT DemoFileFormat
WITH (
FORMAT_TYPE=PARQUET
)
GO
--Create external table:
CREATE EXTERNAL TABLE tbl_TaxiRides(
vendorID VARCHAR(100) COLLATE Latin1_General_BIN2,
tpepPickupDateTime DATETIME2,
tpepDropoffDateTime DATETIME2,
passengerCount INT,
tripDistance FLOAT,
puLocationId VARCHAR(8000),
doLocationId VARCHAR(8000),
startLon FLOAT,
startLat FLOAT,
endLon FLOAT,
endLat FLOAT,
rateCodeId SMALLINT,
storeAndFwdFlag VARCHAR(8000),
paymentType VARCHAR(8000),
fareAmount FLOAT,
extra FLOAT,
mtaTax FLOAT,
improvementSurcharge VARCHAR(8000),
tipAmount FLOAT,
tollsAmount FLOAT,
totalAmount FLOAT
)
WITH (
LOCATION = 'yellow/puYear=*/puMonth=*/*.parquet',
DATA_SOURCE = NYCTaxiExternalDataSource,
FILE_FORMAT = DemoFileFormat
);
GO
После создания внешней таблицы вы можете запросить ее так же, как и любую другую таблицу:
SELECT TOP 10 *
FROM tbl_TaxiRides;
Например OPENROWSET, внешние таблицы поддерживают запросы к нескольким файлам и папкам с подстановочными знаками. Однако внешние таблицы не поддерживают вывод схемы.
Замечания, связанные с быстродействием
Нет жесткого ограничения на количество файлов или объем данных, которые можно запрашивать, но производительность запросов зависит от объема данных, формата данных, способа упорядочения данных и сложности запросов и соединений.
Запрос по секционированным данным
Данные часто упорядочиваются в вложенных папках, которые также называются разделами. Управляемый экземпляр SQL позволяет запрашивать только определенные папки и файлы. Это сокращает количество файлов и объем данных, необходимых для чтения и обработки запроса, что приводит к повышению производительности. Этот тип оптимизации запросов называется очисткой секций или ликвидацией секций. Вы можете исключить секции из выполнения запроса с помощью функции filepath() метаданных в WHERE предложении запроса.
Следующий пример запроса считывает файлы данных NYC Yellow Taxi только за последние три месяца 2017 года:
SELECT
r.filepath() AS filepath
,r.filepath(1) AS [year]
,r.filepath(2) AS [month]
,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
BULK 'yellow/puYear=*/puMonth=*/*.parquet',
DATA_SOURCE = 'NYCTaxiExternalDataSource',
FORMAT = 'parquet'
)
WITH (
vendorID INT
) AS [r]
WHERE
r.filepath(1) IN ('2017')
AND r.filepath(2) IN ('10', '11', '12')
GROUP BY
r.filepath()
,r.filepath(1)
,r.filepath(2)
ORDER BY
filepath;
Если сохраненные данные не секционированы, рассмотрите возможность секционирования для повышения производительности запросов.
Если вы используете внешние таблицы, функции filepath() и filename() поддерживаются, но не в предложении WHERE. Вы по-прежнему можете фильтровать по filename или filepath, если используете их в вычисляемых столбцах, как показано в следующем примере:
CREATE EXTERNAL TABLE tbl_TaxiRides (
vendorID VARCHAR(100) COLLATE Latin1_General_BIN2,
tpepPickupDateTime DATETIME2,
tpepDropoffDateTime DATETIME2,
passengerCount INT,
tripDistance FLOAT,
puLocationId VARCHAR(8000),
doLocationId VARCHAR(8000),
startLon FLOAT,
startLat FLOAT,
endLon FLOAT,
endLat FLOAT,
rateCodeId SMALLINT,
storeAndFwdFlag VARCHAR(8000),
paymentType VARCHAR(8000),
fareAmount FLOAT,
extra FLOAT,
mtaTax FLOAT,
improvementSurcharge VARCHAR(8000),
tipAmount FLOAT,
tollsAmount FLOAT,
totalAmount FLOAT,
[Year] AS CAST(filepath(1) AS INT), --use filepath() for partitioning
[Month] AS CAST(filepath(2) AS INT) --use filepath() for partitioning
)
WITH (
LOCATION = 'yellow/puYear=*/puMonth=*/*.parquet',
DATA_SOURCE = NYCTaxiExternalDataSource,
FILE_FORMAT = DemoFileFormat
);
GO
SELECT *
FROM tbl_TaxiRides
WHERE
[year]=2017
AND [month] in (10,11,12);
Если сохраненные данные не секционированы, рассмотрите возможность секционирования для повышения производительности запросов.
Статистика
Сбор статистики по внешним данным является одной из наиболее важных задач, которые можно выполнить для оптимизации запросов. Чем больше экземпляру известно о данных, тем быстрее он выполняет запросы. Оптимизатор запросов подсистемы SQL работает по принципу оценки нагрузки на ресурсы. Он сравнивает стоимость разных планов запроса, а затем выбирает план с наименьшей стоимостью. В большинстве случаев он выбирает план, который выполняется быстрее.
Автоматическое создание статистики
Управляемый экземпляр SQL Azure анализирует входящие запросы пользователей для отсутствующих статистических данных. Если статистика отсутствует, оптимизатор запросов автоматически создает статистику по отдельным столбцам в условии предиката запроса или соединения, чтобы улучшить оценки кратности для плана запроса. Автоматическое создание статистики выполняется синхронно, поэтому вы можете немного снизить производительность запросов, если столбцы отсутствуют в статистике. Время создания статистики для одного столбца зависит от размера выбранных файлов.
Получаемая вручную статистика OPENROWSET
Статистику по одному столбцу для OPENROWSET пути можно создать с помощью хранимой процедуры sys.sp_create_openrowset_statistics , передав запрос выбора с одним столбцом в качестве параметра:
EXEC sys.sp_create_openrowset_statistics N'
SELECT pickup_datetime
FROM OPENROWSET(
BULK ''abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest/*.parquet'',
FORMAT = ''parquet'') AS filerows
';
По умолчанию экземпляр использует все данные, предоставляемые в наборе данных, для создания статистики. При необходимости вы можете указать размер выборки (в процентах) с помощью параметров TABLESAMPLE. Чтобы создать статистику с одним столбцом для нескольких столбцов, выполните для sys.sp_create_openrowset_statistics каждого столбца. Нельзя создать статистику по нескольким столбцам для пути OPENROWSET.
Чтобы обновить существующую статистику, сначала удалите ее с помощью хранимой процедуры sys.sp_drop_openrowset_statistics и повторно создайте ее с помощью sys.sp_create_openrowset_statistics:
EXEC sys.sp_drop_openrowset_statistics N'
SELECT pickup_datetime
FROM OPENROWSET(
BULK ''abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest/*.parquet'',
FORMAT = ''parquet'') AS filerows
';
Создаваемая вручную статистика по внешней таблице
Синтаксис для создания статистики по внешним таблицам похож на синтаксис для создания статистики по отдельной пользовательской таблице. Чтобы создать статистику по столбцу, укажите имя объекта статистики и имя столбца:
CREATE STATISTICS sVendor
ON tbl_TaxiRides (vendorID)
WITH FULLSCAN, NORECOMPUTE;
Параметры WITH обязательны, а для размера выборки разрешены параметры FULLSCAN и SAMPLE n (в процентах).
- Чтобы создать статистику с одним столбцом для нескольких столбцов, выполните для
CREATE STATISTICSкаждого столбца. - Статистика с несколькими столбцами не поддерживается.
Устранение неполадок
Проблемы с выполнением запросов обычно возникают, когда управляемый экземпляр SQL не может получить доступ к расположению файла. Связанные сообщения об ошибках могут указывать на недостаточные права доступа, расположение, которого не существует, файл, используемый другим процессом, или на то, что каталог не может быть отображен. В большинстве случаев эти ошибки указывают на то, что политики управления сетевым трафиком блокируют доступ к файлам или пользователю не хватает прав доступа. Проверьте следующие элементы:
- Неверный или неправильно введенный путь к расположению.
- Допустимость ключа SAS. Срок действия может быть истек, содержит опечатку или начинается с вопросительного знака.
- Разрешены разрешения доступа к ключу SAS. Чтение по крайней мере, и перечисление, если используются подстановочные знаки.
- Заблокирован входящий трафик для учетной записи хранения. Проверьте сведения об управлении правилами виртуальной сети службы хранилища Azure и убедитесь, что доступ из виртуальной сети управляемого экземпляра SQL разрешен.
- Заблокирован исходящий трафик в управляемом экземпляре SQL с помощью политики конечной точки хранилища. Разрешите исходящий трафик для учетной записи хранения.
- Права доступа для управляемой идентификации. Убедитесь, что управляемая идентификация экземпляра имеет доступ к учетной записи хранения.
- Уровень совместимости базы данных должен иметь значение 130 или выше, чтобы запросы виртуализации данных работали.
СОЗДАТЬ ВНЕШНЮЮ ТАБЛИЦУ КАК ВЫБОР (CETAS)
CREATE EXTERNAL TABLE AS SELECT (CETAS) позволяет экспортировать данные из управляемого экземпляра SQL в внешнюю учетную запись хранения. С помощью CETAS можно создать внешнюю таблицу на основе файлов Parquet или CSV в хранилище BLOB-объектов Azure или Azure Data Lake Storage (ADLS) 2-го поколения. CETAS также может экспортировать результаты инструкции T-SQL SELECT параллельно в созданную внешнюю таблицу. Существует вероятность кражи данных с этими возможностями, поэтому Управляемый экземпляр SQL Azure отключает CETAS по умолчанию. Сведения о включении см. в разделе CREATE EXTERNAL TABLE AS SELECT (CETAS).
Ограничения
- Функция безопасности на уровне строк не поддерживается внешними таблицами.
- Правило динамического маскирования данных не может быть определено для столбца во внешней таблице.
Известные проблемы
- Если параметризация для Always Encrypted включена в SQL Server Management Studio (SSMS), запросы виртуализации данных завершаются ошибкой с
Incorrect syntax near 'PUSHDOWN'сообщением об ошибке.
Связанный контент
- OPENROWSET T-SQL
- СОЗДАТЬ ВНЕШНЮЮ ТАБЛИЦУ
- СОЗДАТЬ ВНЕШНИЙ ФОРМАТ ФАЙЛА
- СОЗДАТЬ ВНЕШНИЙ ИСТОЧНИК ДАННЫХ
- CREATE EXTERNAL TABLE AS SELECT (Создать внешнюю таблицу как SELECT)