व्यायाम - लकड़ी की छत फ़ाइल को क्वेरी करने के लिए पॉलीबेस का उपयोग करें

Complete

इस अभ्यास में आप:

  • पॉलीबेस स्थापित करें और सक्षम करें।
  • एक डेटाबेस बनाएं।
  • डेटाबेस स्कोप किए गए क्रेडेंशियल को सुरक्षित करने के लिए एक डेटाबेस मास्टर कुंजी बनाएँ।
  • डेटा स्रोत तक पहुँचने के लिए एक डेटाबेस स्कोप्ड क्रेडेंशियल बनाएँ.
  • डेटा स्रोत बनाएँ.
  • सार्वजनिक डेटा स्रोत पर संग्रहीत डेटा को क्वेरी और हेरफेर करें।
  • कोई बाहरी फ़ाइल स्वरूप और बाह्य तालिका बनाएँ.

पॉलीबेस स्थापित करें

आप प्रारंभिक सेटअप के दौरान निष्पादन योग्य SQL सर्वर स्थापना के साथ PolyBase स्थापित कर सकते हैं, या बाद में इसे एक सुविधा के रूप में जोड़ सकते हैं। SQL Server setup.exeके सुविधा चयन पृष्ठ पर, बाह्य डेटा के लिए PolyBase क्वेरी सेवा का चयन करें.

SQL सर्वर के कार्यान्वयन योग्य सेटअप का आरेख पॉलीबेस विकल्प दिखा रहा है।

पॉलीबेस सेवाओं को बाहरी डेटा स्रोतों से कनेक्ट करने के लिए फ़ायरवॉल पोर्ट को सक्षम करने की आवश्यकता होती है। डिफ़ॉल्ट रूप से, PolyBase 16450 से 16460 तक के पोर्ट का उपयोग करता है।

SQL सर्वर के कार्यान्वयन योग्य सेटअप का आरेख पॉलीबेस पोर्ट रेंज कॉन्फ़िगरेशन दिखा रहा है।

PolyBase सेटअप दो PolyBase सेवाएँ, SQL Server PolyBase इंजिन और SQL Server PolyBase डेटा संचलनस्थापित करता है. पॉलीबेस स्थापना के लिए पूरी जानकारी और पूर्वापेक्षाओं के लिए, देखें:

पॉलीबेस सक्षम करें

एक बार जब आप सेवा स्थापित कर लेते हैं, तो SQL सर्वर प्रबंधन स्टूडियो (SSMS) में अपने SQL Server 2025 इंस्टेंस से कनेक्ट करें और पॉलीबेस को सक्षम करने के लिए निम्न कमांड चलाएँ।

EXEC SP_CONFIGURE @CONFIGNAME = N'POLYBASE ENABLED', @CONFIGVALUE = 1;
RECONFIGURE;

SQL सर्वर प्रबंधन स्टूडियो में T-SQL का उपयोग कर PolyBase को सक्षम करने का आरेख।

नोट

इस अभ्यास में, आप PolyBase REST API का उपयोग करके Apache Parquet फ़ाइलों को क्वेरी करते हैं, इसलिए आपको सक्षम या SQL Server PolyBase डेटा मूवमेंट या SQL Server PolyBase इंजन सेवाओं को कॉन्फ़िगर करने की आवश्यकता नहीं है।

डेटाबेस बनाना

इस अभ्यास Demo1के लिए एक डेटाबेस बनाने के लिए SSMS में निम्न आदेश चलाएँ। यदि डेटाबेस पहले से ही बनाया गया था, तो स्क्रिप्ट ड्रॉप हो जाती है और इसे फिर से बनाती है।

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

डेटा स्रोत बनाएं

यह उदाहरण Azure ब्लॉब संग्रहण में संग्रहीत सार्वजनिक रूप से उपलब्ध COVID लकड़ी की छत डेटासेट का उपयोग करता है। आप कनेक्शन स्थापित करने के लिए आपके द्वारा बनाए गए PublicCredential डेटाबेस का उपयोग करें।

स्थान मान:

  • पूर्वसर्ग: abs
  • Azure संग्रहण खाता: pandemicdatalake
  • Azure संग्रहण खाता पूर्ण पथ: 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 स्वचालित रूप से डेटा स्रोत जानकारी में जुड़ता है, इसलिए पूर्ण फ़ाइल स्थान है 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]

निम्न उदाहरण एक नियमित तालिका की तरह वास्तविक समय में Parquet फ़ाइल क्वेरी करने के लिए T-SQL लचीलेपन का उपयोग करता है। अवरोही क्रम में प्रति अमेरिकी राज्य पुष्टि किए गए मामलों की संख्या वापस करने के लिए, निम्न क्वेरी निष्पादित करें:

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;

SQL सर्वर प्रबंधन स्टूडियो में बाहरी Parquet डेटा स्रोत के स्कीमा परिणामों का आरेख।

आप देख सकते हैं कि कॉलम के नाम, प्रकार, लंबाई, सटीकता और यहां तक कि डेटा स्रोत का मिलान भी लौटाया गया sp_describe_first_result_set है।

बाहरी फ़ाइल स्वरूप बनाएँ

क्योंकि आपको Parquet फ़ाइल को बाहरी तालिका में संदर्भित करना होगा, इसलिए आपको पहले Parquet फ़ाइल स्वरूप जोड़ने के लिए चलाने CREATE EXTERNAL FILE FORMAT की आवश्यकता है। फ़ाइल स्वरूप परिभाषा बाहरी तालिकाओं के लिए महत्वपूर्ण है क्योंकि यह वास्तविक लेआउट और संपीड़न प्रकार निर्दिष्ट करती है।

निम्न आदेश चलाएँ:

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 सर्वर स्तंभों और लौटाएँ NULLकी पहचान नहीं कर सकता.

बाहरी तालिका ext_covid_dataबनाने के बाद, आप दक्षता के लिए अद्यतन कॉलम पर आँकड़े जोड़ सकते हैं। बाह्य तालिका पर आँकड़ों के बारे में अधिक जानकारी के लिए, सांख्यिकी बनाएँ (Transact-SQL) देखें.

इस इकाई में, आप किसी बाहरी डेटा स्रोत से कनेक्ट करने के लिए PolyBase का उपयोग किया और Parquet फ़ाइल को क्वेरी करने के लिए OPENROWSET या बाहरी तालिका का उपयोग किया। अगले अभ्यास में, आप कनेक्ट करने के लिए और Azure SQL डेटाबेस में किसी डेटाबेस से एक बाहरी तालिका बनाने के लिए PolyBase सेवाओं का उपयोग करें।