Вправа — використовуйте PolyBase для запиту до файлу Parquet
У цій вправі ви:
- Встановіть і увімкніть PolyBase.
- Створіть базу даних.
- Створіть головний ключ бази даних для захисту облікових даних у сфері бази даних.
- Створіть облікові дані з обмеженням бази даних для доступу до джерела даних.
- Створіть джерело даних.
- Запитувати та маніпулювати даними, збереженими на публічному джерелі даних.
- Створіть зовнішній формат файлу та зовнішню таблицю.
Встановити PolyBase
Ви можете встановити PolyBase разом із виконуваним виконуваним файлом SQL Server під час початкового налаштування або додати його як функцію пізніше. На сторінці вибору функцій SQL Serversetup.exeвиберіть PolyBase Query Service for External Data.
Сервіси PolyBase вимагають увімкнення портів міжмережевого екрану для підключення до зовнішніх джерел даних. За замовчуванням PolyBase використовує порти з діапазоном від 16450 до 16460.
Настроювання PolyBase інсталює дві служби PolyBase, sql Server PolyBase Engine і руху даних SQL Server PolyBase. Повну інформацію та передумови для встановлення PolyBase дивіться:
Увімкнути PolyBase
Після встановлення сервісу підключіться до вашої інстанції SQL Server 2025 у SQL Server Management Studio (SSMS) і виконайте наступну команду, щоб увімкнути PolyBase.
EXEC SP_CONFIGURE @CONFIGNAME = N'POLYBASE ENABLED', @CONFIGVALUE = 1;
RECONFIGURE;
Примітка
У цій вправі ви виконуєте запити до файлів Apache Parquet за допомогою PolyBase REST API, тому не потрібно вмикати чи налаштовувати сервіси SQL Server PolyBase Data Movement або SQL Server PolyBase Engine .
Створення бази даних
Виконайте наступну команду в SSMS, щоб створити базу даних для цієї вправи під назвою Demo1. Якщо база даних вже створена, скрипт відпадає і створює її заново.
USE MASTER;
IF EXISTS (SELECT * FROM sys.databases WHERE [name] = N'Demo1')
BEGIN
ALTER DATABASE Demo1 SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DROP DATABASE IF EXISTS Demo1
END;
CREATE DATABASE Demo1;
USE Demo1;
Створити головний ключ бази даних
Потрібно створити головний ключ бази даних, щоб забезпечити безпеку облікових даних у сфері облікових даних. Наступний приклад створює ключ із випадково згенерованим паролем, і потрібна резервна копія.
DECLARE @randomWord VARCHAR(64) = NEWID();
DECLARE @createMasterKey NVARCHAR(500) = N'
IF NOT EXISTS (SELECT * FROM sys.symmetric_keys WHERE name = ''##MS_DatabaseMasterKey##'')
CREATE MASTER KEY ENCRYPTION BY PASSWORD = ' + QUOTENAME(@randomWord, '''')
EXECUTE sp_executesql @createMasterKey;
SELECT * FROM sys.symmetric_keys;
Щоб краще зрозуміти та підтримувати ключі шифрування у виробничому середовищі, дивіться:
Створіть облікові дані з обмеженням бази даних
Обліковий обліковий дані, пов'язаний із базою даних, відповідає за зберігання облікових даних, які використовує джерело даних для підключення до кінцевої точки. У цьому прикладі використовується публічний кінцевий пристрій, тому обліковий запис не потребує секрету.
IF EXISTS (SELECT * FROM sys.database_scoped_credentials WHERE name = N'PublicCredential')
DROP DATABASE SCOPED CREDENTIAL PublicCredential;
CREATE DATABASE SCOPED CREDENTIAL PublicCredential
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '<KEY>'; -- This example doesn't need the SECRET because the data source is public
Створіть джерело даних
У цьому прикладі використовується публічно доступний набір даних COVID Parquet, збережений у Azure Blob Storage. Ви використовуєте створену вами базу PublicCredential даних для встановлення зв'язку.
ЗНАЧЕННЯ ЛОКАЦІЙ:
- Префікс:
abs - Azure Storage account:
pandemicdatalake - Azure Storage account повний шлях:
pandemicdatalake.blob.core.windows.net - Назва контейнера:
public - Повний шлях контейнера:
public/curated/covid-19/bing_covid-19_data/latest
IF EXISTS (SELECT * FROM sys.external_data_sources WHERE name = N'Public_Covid') DROP EXTERNAL DATA SOURCE Public_Covid;
CREATE EXTERNAL DATA SOURCE Public_Covid
WITH (
LOCATION = 'abs://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest',
CREDENTIAL = [PublicCredential]
);
- Повний перелік джерел даних та відповідних префіксів див. CREATE EXTERNAL DATA SOURCE.
- Для отримання додаткової інформації про публічний набір даних дивіться Bing COVID-19.
Запит до даних за допомогою OPENROWSET
Ви можете використовувати OPENROWSET для доступу та дослідження даних. OPENROWSET оптимізований для випадкових робочих навантажень і сценаріїв дослідження даних.
Значення OPENROWSET:
- BULK: Ім'я файлу та розширення. BULK автоматично додається до інформації про джерело даних, тому повне розташування файлу виглядає
abs://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet - ФОРМАТ:
PARQUET - DATA_SOURCE: Інформація про з'єднання, у цьому випадку ваше нове джерело даних
Public_Covid
SELECT TOP 1000 *
FROM OPENROWSET
(BULK 'bing_covid-19_data.parquet'
, FORMAT = 'PARQUET'
, DATA_SOURCE = 'Public_Covid')
AS [COVID_Dataset]
Наступний приклад використовує гнучкість T-SQL для запиту до файлу Parquet у реальному часі, як і до звичайної таблиці. Щоб повернути кількість підтверджених випадків на штат США у спадному порядку, виконайте наступний запит:
SELECT [COVID_Dataset].admin_region_1,
SUM(CAST([COVID_Dataset].confirmed AS BIGINT)) AS Confirmed
FROM OPENROWSET
(BULK 'bing_covid-19_data.parquet'
, FORMAT = 'PARQUET'
, DATA_SOURCE = 'Public_Covid')
AS [COVID_Dataset]
WHERE [COVID_Dataset].country_region = 'United States' AND
[COVID_Dataset].admin_region_1 IS NOT NULL
GROUP BY [COVID_Dataset].admin_region_1
ORDER BY confirmed DESC
Створення та запит до зовнішньої таблиці
OPENROWSET оптимізований для ad-hoc виконання та дослідження даних. Зовнішні таблиці краще підходять для повторюваного доступу, оскільки вони також можуть використовувати статистику.
Відкрийте схему зовнішньої таблиці
Щоб створити зовнішню таблицю, спочатку визначте стовпці та тип. Схема походить із зовнішнього файлу, тому точне визначення типів і діапазонів даних може зайняти багато часу. На щастя, ви можете використати збережену процедуру sp_describe_first_result_set (Transact-SQL), щоб прискорити цей процес.
DECLARE @tsql NVARCHAR(MAX) = 'SELECT TOP 1000 *
FROM OPENROWSET
(BULK ''bing_covid-19_data.parquet''
, FORMAT = ''PARQUET''
, DATA_SOURCE = ''Public_Covid'')
AS [COVID_Dataset]';
EXEC sys.sp_describe_first_result_set @tsql;
Ви можете побачити, що sp_describe_first_result_set вони повертали назви стовпців, типи, довжину, точність і навіть збірку джерела даних.
Створити зовнішній формат файлу
Оскільки потрібно посилатися на файл Parquet у зовнішню таблицю, спочатку потрібно запустити CREATE EXTERNAL FILE FORMAT додавання формату файлу Parquet. Визначення формату файлу важливе для зовнішніх таблиць, оскільки воно визначає фактичне розташування та тип стиснення.
Виконайте таку команду:
IF EXISTS (SELECT * FROM sys.external_file_formats WHERE name = N'ParquetFileFormat')
DROP EXTERNAL FILE FORMAT ParquetFileFormat;
CREATE EXTERNAL FILE FORMAT ParquetFileFormat WITH(FORMAT_TYPE = PARQUET);
Створіть зовнішню таблицю
Нарешті, маючи всю отриману інформацію та створений зовнішній формат файлу, ви можете створити зовнішню таблицю, використовуючи наступний скрипт:
IF EXISTS (SELECT * FROM sys.external_file_formats WHERE name = N'ParquetFileFormat')
DROP EXTERNAL FILE FORMAT ParquetFileFormat;
CREATE EXTERNAL FILE FORMAT ParquetFileFormat WITH(FORMAT_TYPE = PARQUET);
-- 8.3 CREATE EXTERNAL TABLE
IF OBJECT_ID(N'ext_covid_data', N'ET') IS NOT NULL
DROP EXTERNAL TABLE ext_covid_data;
CREATE EXTERNAL TABLE ext_covid_data
(
id int,
updated date,
confirmed int,
confirmed_change int,
deaths int,
deaths_change smallint,
recovered int,
recovered_change int,
latitude float,
longitude float,
iso2 varchar(8000),
iso3 varchar(8000),
country_region varchar(8000),
admin_region_1 varchar(8000),
iso_subdivision varchar(8000),
admin_region_2 varchar(8000),
load_time datetime2(7)
)
WITH
(
LOCATION = 'bing_covid-19_data.parquet'
, FILE_FORMAT = ParquetFileFormat
, DATA_SOURCE = Public_Covid
);
CREATE STATISTICS [Stats_ext_covid_data_updated] ON ext_covid_data([updated]);
SELECT TOP 1000 * FROM ext_covid_data;
Примітка
Імена стовпців мають відповідати стовпцям, що зберігаються у файлі Parquet, інакше SQL Server не може ідентифікувати ці стовпці і повертає NULL.
Після створення зовнішньої таблиці ext_covid_dataви можете додати статистику до оновлених стовпців для підвищення ефективності. Для отримання додаткової інформації про статистику у зовнішній таблиці див. CREATE STATISTICS (Transact-SQL).
У цьому пристрої ви використовували PolyBase для підключення до зовнішнього джерела даних і використовували OPENROWSET або зовнішню таблицю для запиту до файлу Parquet. У наступній вправі ви використовуєте сервіси PolyBase для підключення та створення зовнішньої таблиці з бази даних Azure SQL Database.