تمرين - استخدام PolyBase للاستعلام عن ملف Parquet

مكتمل

في هذا التمرين، يمكنك:

  • تثبيت PolyBase وتمكينه.
  • إنشاء قاعدة بيانات.
  • إنشاء مفتاح رئيسي لقاعدة البيانات لتأمين بيانات الاعتماد في نطاق قاعدة البيانات.
  • إنشاء بيانات اعتماد محددة النطاق لقاعدة البيانات للوصول إلى مصدر البيانات.
  • إنشاء مصدر البيانات.
  • الاستعلام عن البيانات المخزنة على مصدر البيانات العام ومعالجتها.
  • إنشاء تنسيق ملف خارجي وجدول خارجي.

تثبيت PolyBase

يمكنك تثبيت PolyBase مع تثبيت SQL Server القابل للتنفيذ أثناء الإعداد الأولي، أو إضافته كميزة لاحقا. في صفحة Feature Selection من SQL Server setup.exe، حدد PolyBase Query Service للبيانات الخارجية.

صورة للإعداد القابل للتنفيذ ل SQL Server تظهر خيار PolyBase.

تتطلب خدمات PolyBase تمكين منافذ جدار الحماية من أجل الاتصال بمصادر البيانات الخارجية. بشكل افتراضي، يستخدم PolyBase منافذ تتراوح بين 16450 و16460.

صورة للإعداد القابل للتنفيذ ل SQL Server تظهر تكوين نطاق منفذ PolyBase.

يقوم إعداد 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;

صورة لتمكين PolyBase باستخدام T-SQL في SQL Server Management Studio.

ملاحظه

في هذا التمرين، يمكنك الاستعلام عن ملفات 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]
);

الاستعلام عن البيانات باستخدام 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;

صورة لنتائج المخطط لمصدر بيانات Parquet الخارجي في SQL Server Management Studio.

يمكنك أن ترى أن 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.