Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Tip
Microsoft Fabric Data Warehouse — это реляционное хранилище корпоративного масштаба на основе озера данных, с архитектурой, готовой к будущему, встроенной ИИ и новыми функциями. Если вы не знакомы с хранилищем данных, начните с Fabric Data Warehouse. Существующие рабочие нагрузки выделенного пула SQL могут обновляться до Fabric для доступа к новым возможностям в области науки о данных, аналитики в реальном времени и отчетности.
Из этой статьи вы узнаете, как написать запрос с помощью бессерверного пула SQL в Azure Synapse Analytics.
Бессерверный пул SQL поддерживает чтение нескольких файлов или папок с помощью подстановочных знаков, которые похожи на подстановочные знаки, используемые в Windows. Вместе с тем, есть большая гибкость, поскольку разрешено использование нескольких подстановочных знаков.
Предварительные условия
Первым шагом является создание базы данных , в которой можно выполнить запросы. Затем инициализируйте объекты, выполнив скрипт настройки в этой базе данных. Этот скрипт установки создает источники данных, учетные данные базы данных и форматы внешних файлов, которые используются в этих примерах.
Используйте папку csv/taxi для выполнения примеров запросов. Он содержит данные NYC Taxi - Yellow Taxi Trip Records с июля 2016 по июнь 2018 года. Файлы в csv/такси называются по году и месяцу, используя следующий шаблон:
yellow_tripdata_<year>-<month>.csv*
Прочитайте все файлы в папке
В следующем примере считываются все файлы данных о желтых такси Нью-Йорка из папки csv/taxi, а затем возвращается общее количество пассажиров и поездок в год. В нем также показано использование агрегатных функций.
SELECT
YEAR(pickup_datetime) as [year],
SUM(passenger_count) AS passengers_total,
COUNT(*) AS [rides_total]
FROM OPENROWSET(
BULK 'csv/taxi/*.csv',
DATA_SOURCE = 'sqlondemanddemo',
FORMAT = 'CSV', PARSER_VERSION = '2.0',
FIRSTROW = 2
)
WITH (
pickup_datetime DATETIME2 2,
passenger_count INT 4
) AS nyc
GROUP BY
YEAR(pickup_datetime)
ORDER BY
YEAR(pickup_datetime);
Примечание.
Все файлы, к которым осуществляется доступ с одиночным OPENROWSET, должны иметь одинаковую структуру (количество столбцов и их типы данных).
Чтение подмножества файлов в папке
В следующем примере считываются файлы данных NYC Yellow Taxi за 2017 год из папки csv/taxi с помощью подстановочного знака и возвращается общая сумма тарифа для каждого типа оплаты.
SELECT
payment_type,
SUM(fare_amount) AS fare_total
FROM OPENROWSET(
BULK 'csv/taxi/yellow_tripdata_2017-*.csv',
DATA_SOURCE = 'sqlondemanddemo',
FORMAT = 'CSV', PARSER_VERSION = '2.0',
FIRSTROW = 2
)
WITH (
payment_type INT 10,
fare_amount FLOAT 11
) AS nyc
GROUP BY payment_type
ORDER BY payment_type;
Примечание.
Все файлы, к которым осуществляется доступ с одиночным OPENROWSET, должны иметь одинаковую структуру (количество столбцов и их типы данных).
Чтение подмножества файлов в папке с использованием нескольких путей к файлам
В следующем примере считываются файлы данных желтого такси Нью-Йорка 2017 года из папки csv/taxi с использованием двух путей к файлам. Первый использует полный путь к файлу, содержащему данные за январь, а второй использует подстановочный знак для чтения месяцев октября, ноября и декабря. Для каждого пути возвращается общая сумма тарифа для каждого типа оплаты.
SELECT
payment_type,
SUM(fare_amount) AS fare_total
FROM OPENROWSET(
BULK (
'csv/taxi/yellow_tripdata_2017-01.csv',
'csv/taxi/yellow_tripdata_2017-1*.csv'
),
DATA_SOURCE = 'sqlondemanddemo',
FORMAT = 'CSV', PARSER_VERSION = '2.0',
FIRSTROW = 2
)
WITH (
payment_type INT 10,
fare_amount FLOAT 11
) AS nyc
GROUP BY payment_type
ORDER BY payment_type;
Примечание.
Все файлы, к которым осуществляется доступ с одиночным OPENROWSET, должны иметь одинаковую структуру (количество столбцов и их типы данных).
Чтение папок
Путь, который вы указываете для OPENROWSET, также может быть путем к папке. Эти типы запросов приводятся в следующих разделах.
Чтение всех файлов в конкретной папке
Вы можете считывать все файлы в папке с помощью подстановочного знака уровня файла, как показано в разделе "Чтение всех файлов в папке". Но есть способ выполнения запроса к папке и использования всех содержащихся в ней файлов.
Если путь, указанный в OPENROWSET папке, указывает на папку, все файлы в этой папке используются в качестве источника запроса. Следующий запрос считывает все файлы в папке csv/taxi .
Примечание.
Обратите внимание на наличие / в конце пути запроса. Он обозначает папку. Если опущено / , запрос предназначен для файла с именем такси .
SELECT
YEAR(pickup_datetime) as [year],
SUM(passenger_count) AS passengers_total,
COUNT(*) AS [rides_total]
FROM OPENROWSET(
BULK 'csv/taxi/',
DATA_SOURCE = 'sqlondemanddemo',
FORMAT = 'CSV', PARSER_VERSION = '2.0',
FIRSTROW = 2
)
WITH (
vendor_id VARCHAR(100) COLLATE Latin1_General_BIN2,
pickup_datetime DATETIME2,
dropoff_datetime DATETIME2,
passenger_count INT,
trip_distance FLOAT,
rate_code INT,
store_and_fwd_flag VARCHAR(100) COLLATE Latin1_General_BIN2,
pickup_location_id INT,
dropoff_location_id INT,
payment_type INT,
fare_amount FLOAT,
extra FLOAT,
mta_tax FLOAT,
tip_amount FLOAT,
tolls_amount FLOAT,
improvement_surcharge FLOAT,
total_amount FLOAT
) AS nyc
GROUP BY
YEAR(pickup_datetime)
ORDER BY
YEAR(pickup_datetime);
Примечание.
Все файлы, к которым осуществляется доступ с одиночным OPENROWSET, должны иметь одинаковую структуру (количество столбцов и их типы данных).
Чтение всех файлов из нескольких папок
С помощью подстановочного знака можно читать файлы из нескольких папок. Следующий запрос считывает все файлы из всех папок, расположенных в csv-папке с именами, начиная с t и заканчивая i.
Примечание.
Обратите внимание на наличие / в конце пути запроса. Он обозначает папку. Если опущено / , запрос предназначен для файлов с именем t*i .
SELECT
YEAR(pickup_datetime) as [year],
SUM(passenger_count) AS passengers_total,
COUNT(*) AS [rides_total]
FROM OPENROWSET(
BULK 'csv/t*i/',
DATA_SOURCE = 'sqlondemanddemo',
FORMAT = 'CSV', PARSER_VERSION = '2.0',
FIRSTROW = 2
)
WITH (
vendor_id VARCHAR(100) COLLATE Latin1_General_BIN2,
pickup_datetime DATETIME2,
dropoff_datetime DATETIME2,
passenger_count INT,
trip_distance FLOAT,
rate_code INT,
store_and_fwd_flag VARCHAR(100) COLLATE Latin1_General_BIN2,
pickup_location_id INT,
dropoff_location_id INT,
payment_type INT,
fare_amount FLOAT,
extra FLOAT,
mta_tax FLOAT,
tip_amount FLOAT,
tolls_amount FLOAT,
improvement_surcharge FLOAT,
total_amount FLOAT
) AS nyc
GROUP BY
YEAR(pickup_datetime)
ORDER BY
YEAR(pickup_datetime);
Примечание.
Все файлы, к которым осуществляется доступ с одиночным OPENROWSET, должны иметь одинаковую структуру (количество столбцов и их типы данных).
Так как условиям соответствует только одна папка, результат запроса будет таким же, как в разделе Чтение всех файлов в папке.
Рекурсивный просмотр папок
Бессерверный пул SQL может рекурсивно проходить по папкам, если указать /** в конце пути. Следующий запрос считывает все файлы из всех папок и вложенных папок, расположенных в папке csv/taxi .
SELECT
YEAR(pickup_datetime) as [year],
SUM(passenger_count) AS passengers_total,
COUNT(*) AS [rides_total]
FROM OPENROWSET(
BULK 'csv/taxi/**',
DATA_SOURCE = 'sqlondemanddemo',
FORMAT = 'CSV', PARSER_VERSION = '2.0',
FIRSTROW = 2
)
WITH (
vendor_id VARCHAR(100) COLLATE Latin1_General_BIN2,
pickup_datetime DATETIME2,
dropoff_datetime DATETIME2,
passenger_count INT,
trip_distance FLOAT,
rate_code INT,
store_and_fwd_flag VARCHAR(100) COLLATE Latin1_General_BIN2,
pickup_location_id INT,
dropoff_location_id INT,
payment_type INT,
fare_amount FLOAT,
extra FLOAT,
mta_tax FLOAT,
tip_amount FLOAT,
tolls_amount FLOAT,
improvement_surcharge FLOAT,
total_amount FLOAT
) AS nyc
GROUP BY
YEAR(pickup_datetime)
ORDER BY
YEAR(pickup_datetime);
Примечание.
Все файлы, к которым осуществляется доступ с одиночным OPENROWSET, должны иметь одинаковую структуру (количество столбцов и их типы данных).
Используйте несколько подстановочных знаков
Можно использовать несколько подстановочных знаков на разных уровнях пути. Например, вы можете усовершенствовать предыдущий запрос, чтобы читать файлы только с данными 2017 года из всех папок, где имена начинаются с t и заканчиваются на i.
Примечание.
Обратите внимание на наличие / в конце пути запроса. Он обозначает папку. Если опущено / , запрос предназначен для файлов с именем t*i .
Максимальное количество подстановочных знаков на запрос — 10.
SELECT
YEAR(pickup_datetime) as [year],
SUM(passenger_count) AS passengers_total,
COUNT(*) AS [rides_total]
FROM OPENROWSET(
BULK 'csv/t*i/yellow_tripdata_2017-*.csv',
DATA_SOURCE = 'sqlondemanddemo',
FORMAT = 'CSV', PARSER_VERSION = '2.0',
FIRSTROW = 2
)
WITH (
vendor_id VARCHAR(100) COLLATE Latin1_General_BIN2,
pickup_datetime DATETIME2,
dropoff_datetime DATETIME2,
passenger_count INT,
trip_distance FLOAT,
rate_code INT,
store_and_fwd_flag VARCHAR(100) COLLATE Latin1_General_BIN2,
pickup_location_id INT,
dropoff_location_id INT,
payment_type INT,
fare_amount FLOAT,
extra FLOAT,
mta_tax FLOAT,
tip_amount FLOAT,
tolls_amount FLOAT,
improvement_surcharge FLOAT,
total_amount FLOAT
) AS nyc
GROUP BY
YEAR(pickup_datetime)
ORDER BY
YEAR(pickup_datetime);
Примечание.
Все файлы, к которым осуществляется доступ с одиночным OPENROWSET, должны иметь одинаковую структуру (количество столбцов и их типы данных).
Так как условиям соответствует только одна папка, результат запроса будет таким же, как в разделах Чтение подмножества файлов в папке и Чтение всех файлов в конкретной папке. Более сложные сценарии использования подстановочных знаков см. в разделе "Запрос файлов Parquet".