תרגיל - השתמש ב-PolyBase כדי לשאול קובץ Parquet

הושלם

בתרגיל הזה אתה:

  • התקן והפעל את PolyBase.
  • צור מסד נתונים.
  • צור מפתח מאסטר למסד נתונים כדי לאבטח את האישור שמוגדר במסד הנתונים.
  • צור תעודת היקף במסד נתונים כדי לגשת למקור הנתונים.
  • צור את מקור הנתונים.
  • חיפוש ומניפולציה של נתונים המאוחסנים במקור הנתונים הציבורי.
  • צור פורמט קובץ חיצוני וטבלה חיצונית.

התקנת PolyBase

אתה יכול להתקין את PolyBase עם קובץ ההתקנה של SQL Server במהלך ההגדרה הראשונית, או להוסיף אותו כתכונה מאוחר יותר. בדף בחירת הפיצ'רים של SQL Serversetup.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 כדי ליצור את החיבור.

ערכי מיקום:

  • קידומת: abs
  • חשבון Azure Storage: pandemicdatalake
  • Azure Storage account full path: 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 Database.