تمرين - استخدام PolyBase للاستعلام عن ملف Parquet
في هذا التمرين، يمكنك:
- تثبيت PolyBase وتمكينه.
- إنشاء قاعدة بيانات.
- إنشاء مفتاح رئيسي لقاعدة البيانات لتأمين بيانات الاعتماد في نطاق قاعدة البيانات.
- إنشاء بيانات اعتماد محددة النطاق لقاعدة البيانات للوصول إلى مصدر البيانات.
- إنشاء مصدر البيانات.
- الاستعلام عن البيانات المخزنة على مصدر البيانات العام ومعالجتها.
- إنشاء تنسيق ملف خارجي وجدول خارجي.
تثبيت PolyBase
يمكنك تثبيت PolyBase مع تثبيت SQL Server القابل للتنفيذ أثناء الإعداد الأولي، أو إضافته كميزة لاحقا. في صفحة Feature Selection من SQL Server setup.exe، حدد PolyBase Query Service للبيانات الخارجية.
تتطلب خدمات 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 قمت بإنشائها لإنشاء الاتصال.
قيم LOCATION:
- البادئة:
abs - حساب تخزين Azure:
pandemicdatalake - المسار الكامل لحساب Azure Storage:
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]
);
- للحصول على قائمة كاملة بمصادر البيانات والبادئات المقابلة، راجع إنشاء مصدر بيانات خارجي.
- لمزيد من المعلومات حول مجموعة البيانات العامة، راجع 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 للتنفيذ المخصص واستكشاف البيانات. تعد الجداول الخارجية أكثر ملاءمة للوصول المتكرر، لأنها يمكنها أيضا استخدام الإحصائيات.
اكتشاف مخطط الجدول الخارجي
لإنشاء جدول خارجي، حدد أولا الأعمدة واكتب. يأتي المخطط من ملف خارجي، لذلك قد يستغرق الأمر وقتا طويلا لتحديد أنواع البيانات والنطاقات بدقة. لحسن الحظ، يمكنك استخدام الإجراء المخزن 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.