Megosztás a következőn keresztül:


Jelentéskészítés vertikálisan felskálázott felhőalapú adatbázisokban (előzetes verzió)

A következőre vonatkozik: Azure SQL Database

Query across shards

A horizontálisan elosztott adatbázisok sorokat osztanak el egy horizontálisan felskálázott adatszinten. A séma minden résztvevő adatbázisban azonos, más néven horizontális particionálás. Rugalmas lekérdezéssel olyan jelentéseket hozhat létre, amelyek egy szegmenses adatbázis összes adatbázisára kiterjednek.

Rövid útmutató : Jelentéskészítés vertikálisan felskálázott felhőbeli adatbázisokban.

Nem horizontális adatbázisok esetén lásd a különböző sémákkal rendelkező felhőbeli adatbázisok lekérdezését.

Előfeltételek

Áttekintés

Ezek az utasítások a rugalmas lekérdezési adatbázisban hozzák létre a horizontális adatréteg metaadat-ábrázolását.

  1. MESTERKULCS LÉTREHOZÁSA
  2. CREATE DATABASE SCOPED CREDENTIAL
  3. CREATE EXTERNAL DATA SOURCE
  4. KÜLSŐ TÁBLA LÉTREHOZÁSA

1.1 Adatbázis-hatókörű főkulcs és hitelesítő adatok létrehozása

A hitelesítő adatokat a rugalmas lekérdezés használja a távoli adatbázisokhoz való csatlakozáshoz.

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

Megjegyzés:

Győződjön meg arról, hogy a "<felhasználónév>" nem tartalmaz "@servername" utótagot.

1.2 Külső adatforrások létrehozása

Szintaxis:

<External_Data_Source> ::=
    CREATE EXTERNAL DATA SOURCE <data_source_name> WITH
        (TYPE = SHARD_MAP_MANAGER,
                   LOCATION = '<fully_qualified_server_name>',
        DATABASE_NAME = '<shardmap_database_name>',
        CREDENTIAL = <credential_name>,
        SHARD_MAP_NAME = '<shardmapname>'
               ) [;]

Példa

CREATE EXTERNAL DATA SOURCE MyExtSrc
WITH
(
    TYPE=SHARD_MAP_MANAGER,
    LOCATION='myserver.database.windows.net',
    DATABASE_NAME='ShardMapDatabase',
    CREDENTIAL= SMMUser,
    SHARD_MAP_NAME='ShardMap'
);

Az aktuális külső adatforrások listájának lekérése:

select * from sys.external_data_sources;

A külső adatforrás a szegmenstérképre hivatkozik. Egy rugalmas lekérdezés ezután a külső adatforrást és a mögöttes szegmenstérképet használja az adatrétegben részt vevő adatbázisok számbavételéhez. A rendszer ugyanazokat a hitelesítő adatokat használja a szegmenstérkép olvasásához és a szegmensek adatainak eléréséhez egy rugalmas lekérdezés feldolgozása során.

1.3 Külső táblák létrehozása

Szintaxis:

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

<sharded_external_table_options> ::=
  DATA_SOURCE = <External_Data_Source>,
  [ SCHEMA_NAME = N'nonescaped_schema_name',]
  [ OBJECT_NAME = N'nonescaped_object_name',]
  DISTRIBUTION = SHARDED(<sharding_column_name>) | REPLICATED |ROUND_ROBIN

Példa

CREATE EXTERNAL TABLE [dbo].[order_line](
     [ol_o_id] int NOT NULL,
     [ol_d_id] tinyint NOT NULL,
     [ol_w_id] int NOT NULL,
     [ol_number] tinyint NOT NULL,
     [ol_i_id] int NOT NULL,
     [ol_delivery_d] datetime NOT NULL,
     [ol_amount] smallmoney NOT NULL,
     [ol_supply_w_id] int NOT NULL,
     [ol_quantity] smallint NOT NULL,
      [ol_dist_info] char(24) NOT NULL
)

WITH
(
    DATA_SOURCE = MyExtSrc,
     SCHEMA_NAME = 'orders',
     OBJECT_NAME = 'order_details',
    DISTRIBUTION=SHARDED(ol_w_id)
);

A külső táblák listájának lekérése az aktuális adatbázisból:

SELECT * from sys.external_tables;

Külső táblák elvetése:

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

Megjegyzések

A DATA_SOURCE záradék a külső táblához használt külső adatforrást (szegmenstérképet) határozza meg.

A SCHEMA_NAME és OBJECT_NAME záradékok a külső tábladefiníciót egy másik sémában lévő táblára képezik le. Ha nincs megadva, a távoli objektum sémája feltételezve van dbo , és a rendszer feltételezi, hogy a neve megegyezik a definiált külső tábla nevével. Ez akkor hasznos, ha a távoli tábla neve már szerepel abban az adatbázisban, ahol létre szeretné hozni a külső táblát. Például egy külső táblát szeretne definiálni a katalógusnézetek vagy DMV-k összesített nézetének lekéréséhez a kibővített adatszinten. Mivel a katalógusnézetek és a DMV-k már léteznek helyileg, nem használhatja a nevüket a külső tábladefinícióhoz. Ehelyett használjon másik nevet, és használja a katalógusnézet vagy a DMV nevét a SCHEMA_NAME és/vagy OBJECT_NAME záradékokban. (Lásd az alábbi példát.)

A ELOSZLÁS záradék a tábla adateloszlását határozza meg. A lekérdezésfeldolgozó a DISTRIBUTION záradékban megadott információkat használja a leghatékonyabb lekérdezési tervek létrehozásához.

  1. A szegmenses skálázás azt jelenti, hogy az adatok horizontálisan particionálva lesznek az adatbázisok között. Az adatterjesztés particionálási kulcsa a <sharding_column_name> paraméter.
  2. A REPLIKÁLT érték azt jelenti, hogy a tábla azonos példányai minden adatbázisban megtalálhatók. Az Ön felelőssége, hogy a replikák azonosak legyenek az adatbázisokban.
  3. ROUND_ROBIN azt jelenti, hogy a tábla horizontálisan particionálása alkalmazásfüggő terjesztési módszerrel történik.

Adatréteg-referencia: A külső tábla DDL-jének külső adatforrásra kell hivatkoznia. A külső adatforrás egy szegmenstérképet ad meg, amely biztosítja a külső táblának az adatrétegben lévő összes adatbázis megkereséséhez szükséges információkat.

Biztonsági szempontok

A külső táblához hozzáféréssel rendelkező felhasználók automatikusan hozzáférnek az alapul szolgáló távoli táblákhoz a külső adatforrás definíciójában megadott hitelesítő adatok alapján. Kerülje a jogosultságok nem kívánt megemelését a külső adatforrás hitelesítő adataival. Külső tábla esetén használja a GRANT vagy a REVOKE parancsot, mintha normál tábla lenne.

Miután definiálta a külső adatforrást és a külső táblákat, mostantól teljes T-SQL-t használhat a külső táblákon.

Példa: horizontális particionált adatbázisok lekérdezése

Az alábbi lekérdezés háromirányú illesztéseket hajt végre a raktárak, rendelések és rendeléssorok között, és több összesítést és szelektív szűrőt használ. Feltételezi, hogy (1) horizontális particionálás (horizontális particionálás) és (2) a raktárak, rendelések és rendeléssorok skálázva vannak a raktárazonosító oszlopban, és hogy a rugalmas lekérdezés együtt tudja megtalálni a szegmenseken lévő illesztéseket, és párhuzamosan feldolgozhatja a lekérdezés drága részét a szegmenseken.

    select  
         w_id as warehouse,
         o_c_id as customer,
         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 warehouse
    join orders
    on w_id = o_w_id
    join order_line
    on o_id = ol_o_id and o_w_id = ol_w_id
    where w_id > 100 and w_id < 200
    group by w_id, o_c_id

Tárolt eljárás távoli T-SQL-végrehajtáshoz: sp_execute_remote

A rugalmas lekérdezés egy tárolt eljárást is bevezet, amely közvetlen hozzáférést biztosít a szegmensekhez. A tárolt eljárás neve sp_execute _remote , és távoli tárolt eljárások vagy T-SQL-kód távoli adatbázisokon való végrehajtására használható. A következő paramétereket veszi igénybe:

  • Adatforrás neve (nvarchar): Az RDBMS típusú külső adatforrás neve.
  • Lekérdezés (nvarchar): Az egyes szegmenseken végrehajtandó T-SQL-lekérdezés.
  • Paraméterdeklaráció (nvarchar) – nem kötelező: A Lekérdezés paraméterben (például sp_executesql) használt paraméterek adattípus-definícióival rendelkező sztring.
  • Paraméterértékek listája – nem kötelező: Paraméterértékek vesszővel tagolt listája (például sp_executesql).

A sp_execute_remote a meghívási paraméterekben megadott külső adatforrást használja a megadott T-SQL-utasítás távoli adatbázisokon való végrehajtásához. A külső adatforrás hitelesítő adatait használja a shardmap manager-adatbázishoz és a távoli adatbázisokhoz való csatlakozáshoz.

Példa:

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

Eszközök csatlakoztatása

Az alkalmazás, a BI és az adatintegrációs eszközök az adatbázishoz való csatlakoztatásához használjon rendszeres SQL Server-kapcsolati sztringeket a külső tábladefiníciókkal. Győződjön meg arról, hogy az SQL Server támogatott az eszköz adatforrásaként. Ezután hivatkozzon a rugalmas lekérdezési adatbázisra, mint bármely más, az eszközhöz csatlakoztatott SQL Server-adatbázisra, és használjon külső táblákat az eszközről vagy alkalmazásból, mintha helyi táblák lennének.

Ajánlott eljárások

  • Győződjön meg arról, hogy a rugalmas lekérdezési végpont adatbázisa hozzáférést kapott a szegmenstérkép-adatbázishoz és az összes szegmenshez az SQL Database tűzfalain keresztül.
  • Ellenőrizze vagy érvényesítse a külső tábla által meghatározott adatelosztást. Ha a tényleges adateloszlás eltér a tábladefinícióban megadott eloszlástól, a lekérdezések váratlan eredményeket eredményezhetnek.
  • A rugalmas lekérdezés jelenleg nem hajtja végre a szegmensek eltávolítását, ha a szegmenskulcsra vonatkozó predikátumok lehetővé teszik bizonyos szegmensek biztonságos kizárását a feldolgozásból.
  • A rugalmas lekérdezés olyan lekérdezésekhez működik a legjobban, ahol a számítások nagy része elvégezhető a szegmenseken. Általában a legjobb lekérdezési teljesítményt kapja szelektív szűrő predikátumokkal, amelyek kiértékelhetők a szegmenseken, vagy összekapcsolhatók a particionálási kulcsokkal, amelyek partícióhoz igazított módon végezhetők el az összes szegmensen. Más lekérdezési mintáknak nagy mennyiségű adatot kell betöltenie a szegmensekből a fő csomópontba, és rosszul teljesíthetnek

További lépések