الاستعلام عبر قواعد البيانات السحابية بمخططات مختلفة (إصدار أولي)

ينطبق على: قاعدة بيانات Azure SQL

Query across tables in different databases

تستخدم قواعد البيانات المقسمة عمودياً مجموعات مختلفة من الجداول في قواعد بيانات مختلفة. ويعني ذلك اختلاف المخطط باختلاف قواعد البيانات. على سبيل المثال، تكون جميع جداول المخزون موجودة في قاعدة بيانات واحدة بينما تكون جميع الجداول المتعلقة بالمحاسبة موجودة في قاعدة بيانات ثانية.

المتطلبات الأساسية

  • يجب أن يمتلك المستخدم إذن ALTER ANY EXTERNAL DATA SOURCE. تم إدراج هذا الإذن مع إذن «تغيير قاعدة بيانات».
  • يجب الحصول على أذونات «تغيير مصدر البيانات الخارجي» للإشارة إلى مصدر البيانات الأساسي.

نظرة عامة

ملاحظة

بخلاف التقسيم الأفقي، لا تعتمد عبارات DDL هذه على تحديد طبقة بيانات بتعيين جزء من خلال مكتبة عميل قاعدة البيانات المرنة.

  1. إنشاء مفتاح رئيسي
  2. إنشاء بيانات اعتماد على نطاق قاعدة البيانات
  3. إنشاء مصدر بيانات خارجي
  4. إنشاء جدول خارجي

إنشاء مفتاح رئيسي وبيانات اعتماد على نطاق قاعدة البيانات

يتم استخدام بيانات الاعتماد بواسطة الاستعلام المرن للاتصال بقواعد البيانات عن بُعد.

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'master_key_password';
CREATE DATABASE SCOPED CREDENTIAL [<credential_name>]  WITH IDENTITY = '<username>',  
SECRET = '<password>';

ملاحظة

تأكد من أن <username> لا يتضمن أي لاحقة "@servername".

إنشاء مصادر البيانات الخارجية

بناء الجملة:

<External_Data_Source> ::=
CREATE EXTERNAL DATA SOURCE <data_source_name> WITH
    (TYPE = RDBMS,
    LOCATION = ’<fully_qualified_server_name>’,
    DATABASE_NAME = ‘<remote_database_name>’,  
    CREDENTIAL = <credential_name>
    ) [;]

هام

يجب تعيين المعلمة TYPE إلى RDBMS.

مثال

يوضح المثال التالي استخدام عبارة CREATE لمصادر البيانات الخارجية.

CREATE EXTERNAL DATA SOURCE RemoteReferenceData
   WITH
      (
         TYPE=RDBMS,
         LOCATION='myserver.database.windows.net',
         DATABASE_NAME='ReferenceData',
         CREDENTIAL= SqlUser
      );

لاسترداد قائمة مصادر البيانات الخارجية الحالية:

select * from sys.external_data_sources;

الجداول الخارجية

بناء الجملة:

CREATE EXTERNAL TABLE [ database_name . [ schema_name ] . | schema_name . ] table_name  
    ( { <column_definition> } [ ,...n ])
    { WITH ( <rdbms_external_table_options> ) }
    )[;]

<rdbms_external_table_options> ::=
    DATA_SOURCE = <External_Data_Source>,
    [ SCHEMA_NAME = N'nonescaped_schema_name',]
    [ OBJECT_NAME = N'nonescaped_object_name',]

مثال

CREATE EXTERNAL TABLE [dbo].[customer]
   (
      [c_id] int NOT NULL,
      [c_firstname] nvarchar(256) NULL,
      [c_lastname] nvarchar(256) NOT NULL,
      [street] nvarchar(256) NOT NULL,
      [city] nvarchar(256) NOT NULL,
      [state] nvarchar(20) NULL,
      DATA_SOURCE = RemoteReferenceData
   );

يوضح المثال التالي كيفية استرداد قائمة الجداول الخارجية من قاعدة البيانات الحالية:

select * from sys.external_tables;

الملاحظات

يوسع الاستعلام المرن بناء جملة الجدول الخارجي الحالي لتعريف الجداول الخارجية التي تستخدم مصادر البيانات الخارجية من النوع RDBMS. ويغطي تعريف الجدول الخارجي للتقسيم العمودي الجوانب التالية:

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

باستخدام مصدر بيانات خارجي كما هو موضح في القسم السابق، يكون بناء الجملة لإنشاء جداول خارجية كما يلي:

تحدد جملة DATA_SOURCE مصدر البيانات الخارجية (أي قاعدة البيانات عن بُعد في التقسيم العمودي) المستخدمة للجدول الخارجي.

وتسمح جمل SCHEMA_NAME وOBJECT_NAME بتعيين تعريف الجدول الخارجي إلى جدول في مخطط مختلف في قاعدة البيانات عن بُعد، أو إلى جدول باسم مختلف، على التوالي. يكون هذا التعيين مفيداً إذا كنت تريد تحديد جدول خارجي لعرض الكتالوج أو DMV على قاعدة البيانات عن بُعد - أو أي موقف آخر يكون فيه اسم الجدول عن بُعد مأخوذاً بشكل محلي بالفعل.

وتُسقط عبارة DDL التالية تعريف جدول خارجي موجود من الكتالوج المحلي. ولا يؤثر ذلك على قاعدة البيانات عن بُعد.

DROP EXTERNAL TABLE [ [ schema_name ] . | schema_name. ] table_name[;]  

أذونات CREATE/DROP EXTERNAL TABLE: تلزم الأذونات ALTER ANY EXTERNAL DATA SOURCE للجدول الخارجي DDL، وهو أمر ضروري أيضاً للإشارة إلى مصدر البيانات الأساسي.

اعتبارات الأمان

يحصل المستخدمون الذين لديهم حق الوصول إلى الجدول الخارجي تلقائياً على حق الوصول إلى الجداول الأساسية عن بُعد بموجب بيانات الاعتماد الواردة في تعريف مصدر البيانات الخارجي. قم بإدارة الوصول إلى الجدول الخارجي بعناية، وذلك لتجنب رفع الامتيازات غير المرغوب فيه من خلال بيانات اعتماد مصدر البيانات الخارجي. يمكن استخدام أذونات SQL العادية لمنح أو إلغاء الوصول إلى جدول خارجي تماماً كما لو كان جدولاً عادياً.

مثال: الاستعلام عن قواعد البيانات المقسمة رأسياً

ينفذ الاستعلام التالي صلة ثلاثية بين الجدولين المحليين للأوامر وبنود الأمر وجدول العملاء عن بُعد. وفيما يلي مثال على حالة استخدام البيانات المرجعية للاستعلام المرن:

    SELECT
     c_id as customer,
     c_lastname as customer_name,
     count(*) as cnt_orderline,
     max(ol_quantity) as max_quantity,
     avg(ol_amount) as avg_amount,
     min(ol_delivery_d) as min_deliv_date
    FROM customer
    JOIN orders
    ON c_id = o_c_id
    JOIN  order_line
    ON o_id = ol_o_id and o_c_id = ol_c_id
    WHERE c_id = 100

الإجراء المخزَّن لتنفيذ T-SQL عن بُعد: sp_execute_remote

يقدم الاستعلام المرن أيضاً إجراء مخزن يوفر الوصول المباشر إلى قاعدة البيانات عن بُعد. يُطلق على الإجراء المخزن اسم sp_execute _remote ويمكن استخدامه لتنفيذ الإجراءات المخزنة عن بُعد أو التعليمة البرمجية Transact-SQL في قاعدة البيانات البعيدة. يتطلب إدخال المعلمات التالية:

  • اسم مصدر البيانات (nvarchar): اسم مصدر البيانات الخارجي من النوع RDBMS.
  • الاستعلام (nvarchar): الاستعلام T-SQL ليتم تنفيذه على قاعدة البيانات عن بُعد.
  • تصريح المعلمة (nvarchar) - اختياري: سلسلة مع تعريفات نوع البيانات للمعلمات المستخدمة في معلمة الاستعلام (مثل sp_executesql).
  • قائمة قيم المعلمات - اختياري: قائمة بقيم المعلمات مفصولة بفاصلة (مثل sp_executesql).

يستخدم sp_execute_remote مصدر البيانات الخارجي المقدم في معلمات الاستدعاء لتنفيذ عبارة T-SQL المقدمة في قاعدة البيانات البعيدة. ويستخدم بيانات اعتماد مصدر البيانات الخارجي للاتصال بقاعدة البيانات عن بُعد.

مثال:

    EXEC sp_execute_remote
        N'MyExtSrc',
        N'select count(w_id) as foo from warehouse'

الاتصال للأدوات

يمكنك استخدام سلاسل اتصال SQL Server العادية لتوصيل أدوات BI وتكامل البيانات بقواعد البيانات الموجودة على الخادم الذي مكّن الاستعلام المرن والجداول الخارجية المحددة. تأكد من أن SQL Server معتمد كمصدر بيانات للأداة. ثم ارجع إلى قاعدة بيانات الاستعلام المرن وجداولها الخارجية مثلما تفعل مع أي قاعدة بيانات SQL Server أخرى قد تتصل بها بأداتك.

أفضل الممارسات

  • تأكد من منح قاعدة بيانات نقطة نهاية الاستعلام المرن حق الوصول إلى قاعدة البيانات عن بُعد عن طريق تمكين الوصول لخدمات Azure في تكوين جدار حماية قاعدة بيانات Azure SQL. تأكد أيضاً من أن بيانات الاعتماد المقدمة في تعريف مصدر البيانات الخارجية يمكنها تسجيل الدخول بنجاح إلى قاعدة البيانات عن بُعد ولديها الأذونات للوصول إلى الجدول عن بُعد.
  • ويعمل الاستعلام المرن بشكل أفضل مع الاستعلامات حيث يمكن إجراء معظم العمليات الحسابية على قواعد البيانات عن بُعد. وعادةً ما تحصل على أفضل أداء للاستعلام باستخدام مسندات عامل التصفية الانتقائية التي يمكن تقييمها على قواعد البيانات عن بُعد أو الصلات التي يمكن إجراؤها بالكامل على قاعدة البيانات عن بُعد. وقد تحتاج أنماط الاستعلام الأخرى إلى تحميل كميات كبيرة من البيانات من قاعدة البيانات عن بُعد وقد يكون أداؤها ضعيفاً.

الخطوات التالية