Справочник по PolyBase Transact-SQL
Область применения: SQL Server
В этой статье рассматриваются варианты использования PolyBase для запроса внешних данных на месте, называемого виртуализацией данных для различных внешних источников данных.
Синтаксис T-SQL, используемый в PolyBase
Чтобы использовать PolyBase, необходимо создать внешние таблицы для ссылок на внешние данные. Перейдите к
- CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)
- CREATE EXTERNAL DATA SOURCE (Transact-SQL)
- CREATE EXTERNAL FILE FORMAT (Transact-SQL)
- CREATE EXTERNAL TABLE (Transact-SQL)
- CREATE STATISTICS (Transact-SQL)
Примечание.
Чтобы использовать PolyBase, необходимо иметь роль системного администратора или разрешения на управление сервером базы данных.
Учебники
Примеры запросов см. в разделе Запросы PolyBase.
Дополнительные руководства по различным внешним источникам данных см. в следующем разделе:
- Hadoop
- Хранилище BLOB-объектов Azure
- SQL Server
- Oracle
- Teradata
- MongoDB
- Универсальные типы ODBC
- S3-совместимое хранилище объектов
- CSV
- Таблица Delta
Функции метаданных файлов
Иногда может потребоваться знать, какой файл или источник папок коррелирует с определенной строкой в результирующем наборе.
Вы можете использовать функции filepath
и filename
возвращать имена файлов и (или) путь в результирующем наборе. Также вы можете применить их для фильтрации данных по именам файлов и (или) путям к папкам. В следующих разделах содержатся краткие описания и примеры.
Функция filename
Эта функция возвращает имя файла, из которого получена строка.
Тип возвращаемых данных — nvarchar(1024). Для оптимальной производительности всегда приводите результат функции filename к соответствующему типу данных. Если используется символьный тип данных, убедитесь, что используется соответствующая длина.
Следующий пример считывает файлы данных из набора NYC Yellow Taxi (данные о поездках в такси за три последних месяца 2017 года) и возвращает число поездок, внесенных в каждый файл. Часть OPENROWSET
запроса указывает, какие файлы будут считываться.
SELECT
nyc.filename() AS [filename]
,COUNT_BIG(*) AS [rows]
FROM
OPENROWSET(
BULK 'parquet/taxi/year=2017/month=9/*.parquet',
DATA_SOURCE = 'SqlOnDemandDemo',
FORMAT='PARQUET'
) nyc
GROUP BY nyc.filename();
В следующем примере показано, как filename()
можно использовать в WHERE
предложении для фильтрации файлов для чтения. Он обращается ко всей папке в OPENROWSET
части запроса и фильтрует файлы в предложении WHERE
.
Результаты будут такими же, как в предыдущем примере.
SELECT
r.filename() AS [filename]
,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
BULK 'csv/taxi/yellow_tripdata_2017-*.csv',
DATA_SOURCE = 'SqlOnDemandDemo',
FORMAT = 'CSV',
PARSER_VERSION = '2.0',
FIRSTROW = 2)
WITH (C1 varchar(200) ) AS [r]
WHERE
r.filename() IN ('yellow_tripdata_2017-10.csv', 'yellow_tripdata_2017-11.csv', 'yellow_tripdata_2017-12.csv')
GROUP BY
r.filename()
ORDER BY
[filename];
Функция filepath
Эта функция возвращает полный путь или часть пути:
- При вызове без параметра она возвращает полный путь, из которого была получена строка.
- При вызове с параметром возвращает часть пути, которая соответствует подстановочным знакам по позиции, указанной в параметре. Например, при значении параметра 1 возвращается часть пути, соответствующая первому подстановочному знаку.
Тип возвращаемых данных — nvarchar(1024). Для оптимальной filepath
производительности всегда приводит результат функции к соответствующему типу данных. Если используется символьный тип данных, убедитесь, что используется соответствующая длина.
Следующий пример считывает файлы данных из набора NYC Yellow Taxi (данные о поездках в такси за три последних месяца 2017 года). Он возвращает число поездок, сохраненных в каждом пути. Часть OPENROWSET
запроса указывает, какие файлы будут считываться.
SELECT
r.filepath() AS filepath
,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
BULK 'csv/taxi/yellow_tripdata_2017-1*.csv',
DATA_SOURCE = 'SqlOnDemandDemo',
FORMAT = 'CSV',
PARSER_VERSION = '2.0',
FIRSTROW = 2
)
WITH (
vendor_id INT
) AS [r]
GROUP BY
r.filepath()
ORDER BY
filepath;
В следующем примере показано, как filepath()
можно использовать в WHERE
предложении для фильтрации файлов для чтения.
Вы можете использовать подстановочные знаки в OPENROWSET
части запроса и отфильтровать файлы в предложении WHERE
. Результаты будут такими же, как в предыдущем примере.
SELECT
r.filepath() AS filepath
,r.filepath(1) AS [year]
,r.filepath(2) AS [month]
,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
BULK 'csv/taxi/yellow_tripdata_*-*.csv',
DATA_SOURCE = 'SqlOnDemandDemo',
FORMAT = 'CSV',
PARSER_VERSION = '2.0',
FIRSTROW = 2
)
WITH (
vendor_id 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;