Dela via


Översikt över elastiska frågor i Azure SQL Database (förhandsversion)

gäller för:Azure SQL Database

Med funktionen för elastiska frågor (i förhandsversion) kan du köra en Transact-SQL fråga (T-SQL) som sträcker sig över flera databaser i Azure SQL Database. Det gör att du kan köra frågor mellan databaser för att komma åt fjärrtabeller och ansluta Microsoft- och tredjepartsverktyg (Excel, Power BI, Tableau osv.) för att köra frågor mellan datanivåer med flera databaser. Med den här funktionen kan du skala ut frågor till stora datanivåer och visualisera resultaten i BI-rapporter (Business Intelligence).

Varför använda elastiska frågor

Azure SQL Database

Fråga mellan databaser i Azure SQL Database helt i T-SQL. Detta möjliggör skrivskyddade sökfrågor i fjärrdatabaser och erbjuder ett alternativ för nuvarande SQL Server-kunder att migrera applikationer som använder namn med tre och fyra delar eller en länkad server till SQL-databasen.

Tillgänglig på alla tjänstnivåer

Elastisk fråga stöds på alla tjänstnivåer i Azure SQL Database. Se avsnittet om förhandsversionsbegränsningar nedan om prestandabegränsningar för lägre tjänstnivåer.

Skicka parametrar till fjärrdatabaser

Elastiska frågor kan nu skicka SQL-parametrar till fjärrdatabaserna för att köras.

Körning av lagrad procedur

Exekvera fjärrförfarandeanrop eller fjärrfunktioner med hjälp av sp_execute _remote.

Flexibilitet

Externa tabeller med elastisk fråga kan referera till fjärrtabeller med ett annat schema- eller tabellnamn.

Elastiska frågescenarier

Målet är att underlätta frågescenarier där flera databaser bidrar med rader till ett enda övergripande resultat. Frågan kan antingen utformas direkt av användaren eller programmet, eller indirekt via verktyg som är anslutna till databasen. Detta är särskilt användbart när du skapar rapporter, använder kommersiella BI- eller dataintegreringsverktyg eller program som inte kan ändras. Med en elastisk fråga kan du köra frågor mot flera databaser med hjälp av den välbekanta SQL Server-anslutningsupplevelsen i verktyg som Excel, Power BI, Tableau eller Cognos. En elastisk fråga ger enkel åtkomst till en hel samling databaser via frågor som utfärdats av SQL Server Management Studio eller Visual Studio, och underlättar frågor mellan databaser från Entity Framework eller andra ORM-miljöer. Bild 1 visar ett scenario där ett befintligt molnprogram (som använder elastiska databasklientbiblioteket) bygger på en utskalad datanivå och en elastisk fråga används för rapportering mellan databaser.

Bild 1 elastisk sökfråga som används på skalerad datanivå

Skärmbild av elastisk fråga som används på skalad datanivå.

Kundscenarier för elastiska frågor kännetecknas av följande topologier:

  • vertikal partitionering – Frågor mellan databaser (topologi 1): Data partitioneras lodrätt mellan flera databaser på en datanivå. Vanligtvis finns olika uppsättningar med tabeller i olika databaser. Det innebär att schemat skiljer sig från olika databaser. Till exempel finns alla tabeller för inventering på en databas medan alla redovisningsrelaterade tabeller finns i en andra databas. Vanliga användningsfall med den här topologin kräver att man frågar över eller kompilerar rapporter mellan tabeller i flera databaser.

  • Horisontell partitionering - Sharding (topologi 2): Data partitioneras horisontellt för att distribuera rader över en utskalad datanivå. Med den här metoden är schemat identiskt för alla deltagande databaser. Den här metoden kallas även sharding. Horisontell partitionering kan utföras och hanteras med hjälp av (1) biblioteken för elastiska databasverktyg eller (2) självhanterad partitionering. En elastisk fråga används för att fråga efter eller kompilera rapporter över många shards. Shards är vanligtvis databaser i en elastisk pool. Du kan se elastiska frågor som ett effektivt sätt att köra frågor mot alla databaser med elastisk pool samtidigt, så länge databaser delar det gemensamma schemat.

Obs

Elastisk fråga fungerar bäst för rapporteringsscenarier där merparten av bearbetningen (filtrering, aggregering) kan utföras på den externa källsidan. Det är inte lämpligt för ETL-åtgärder där stora mängder data överförs från fjärrdatabaser. För tunga rapporteringsarbetsbelastningar eller datalagerscenarier med mer komplexa frågor bör du även överväga att använda Azure Synapse Analytics-.

Vertikal partitionering – frågor mellan databaser

Börja koda genom att läsa Komma igång med frågor mellan databaser (vertikal partitionering).

En elastisk fråga kan användas för att göra data i en databas i SQL Database tillgängliga för andra databaser i SQL Database. Detta gör att frågor från en databas kan referera till tabeller i andra fjärrdatabaser i SQL Database. Det första steget är att definiera en extern datakälla för varje fjärrdatabas. Den externa datakällan definieras i den lokala databas som du vill få åtkomst till tabeller som finns i fjärrdatabasen från. Inga ändringar krävs på fjärrdatabasen. För typiska vertikala partitioneringsscenarier där olika databaser har olika scheman kan elastiska frågor användas för att implementera vanliga användningsfall, till exempel åtkomst till referensdata och frågor mellan databaser.

Viktig

Du måste ha ALTER ANY EXTERNAL DATA SOURCE behörighet. Den här behörigheten ingår i behörigheten ALTER DATABASE. ALTER ANY EXTERNAL DATA SOURCE behörigheter krävs för att referera till den underliggande datakällan.

Referensdata: Topologin används för referensdatahantering. I följande bild sparas två tabeller (T1 och T2) med referensdata i en dedikerad databas. Med hjälp av en elastisk fråga kan du nu fjärransluta tabellerna T1 och T2 från andra databaser, enligt bilden. Använd topologi 1 om referenstabeller är små eller fjärrfrågor i referenstabellen har selektiva predikat.

bild 2 vertikal partitionering – Använda elastisk fråga för att fråga referensdata

Skärmbild av vertikal partitionering – Använda elastisk fråga för att fråga referensdata.

Frågor över databaser: Elastiska frågeställningar möjliggör användningsscenarier som kräver att ställa frågor över flera databaser i SQL-databasen. Bild 3 visar fyra olika databaser: CRM, Inventory, HR och Products. Frågor som utförs i en av databaserna behöver också åtkomst till en eller alla andra databaser. Med hjälp av en elastisk fråga kan du konfigurera databasen för det här fallet genom att köra några enkla DDL-instruktioner på var och en av de fyra databaserna. Efter den här engångskonfigurationen är åtkomsten till en fjärrtabell lika enkel som att referera till en lokal tabell från dina T-SQL-frågor eller från dina BI-verktyg. Den här metoden rekommenderas om fjärrfrågorna inte returnerar stora resultat.

bild 3 vertikal partitionering – Använda elastisk fråga för att fråga mellan olika databaser

Skärmbild av vertikal partitionering – Använda elastisk fråga för att fråga mellan olika databaser.

Följande steg konfigurerar elastiska databasfrågor för vertikal partitioneringsscenarier som kräver åtkomst till en tabell som finns på fjärrdatabaser i SQL Database med samma schema:

När du har kört DDL-uttrycken kan du komma åt fjärrtabellen mytable som om den vore en lokal tabell. Azure SQL Database öppnar automatiskt en anslutning till fjärrdatabasen, bearbetar din begäran på fjärrdatabasen och returnerar resultatet.

Horisontell partitionering – shardning

Med elastisk fråga för att utföra rapporteringsuppgifter över en horisontell partitionerad datanivå krävs en elastisk databasshardkarta för att representera databaserna på datanivån. Vanligtvis används endast en enskild shardkarta i det här scenariot och en dedikerad databas med elastiska frågefunktioner (huvudnod) fungerar som startpunkt för rapporteringsfrågor. Endast den här dedikerade databasen behöver åtkomst till fragmentkartan. Bild 4 illustrerar den här topologin och dess konfiguration med den elastiska frågedatabasen och fragmentkartan. Mer information om klientbiblioteket för elastiska databaser och hur du skapar shardkartor finns i Shard Map Management.

bild 4 horisontell partitionering – Använda elastisk fråga för rapportering över horisontella datanivåer

Skärmbild av horisontell partitionering – Använda elastisk fråga för rapportering över horisontella datanivåer.

Obs

Elastic Query Database (huvudnod) kan vara en separat databas, eller så kan det vara samma databas som är värd för fragmentkartan. Oavsett vilken konfiguration du väljer kontrollerar du att tjänstnivån och beräkningsstorleken för databasen är tillräckligt hög för att hantera det förväntade antalet inloggnings-/frågebegäranden.

Följande steg konfigurerar elastiska databasfrågor för horisontella partitioneringsscenarier som kräver åtkomst till en uppsättning tabeller som finns på (vanligtvis) flera fjärrdatabaser i SQL Database:

När du har utfört de här stegen kan du komma åt den vågrätt partitionerade tabellen mytable som om den vore en lokal tabell. Azure SQL Database öppnar automatiskt flera parallella anslutningar till de fjärrdatabaser där tabellerna lagras fysiskt, bearbetar begäranden på fjärrdatabaserna och returnerar resultatet. Mer information om de steg som krävs för scenariot med horisontell partitionering finns i elastisk fråga för horisontell partitionering.

För att börja koda, läs Introduktion till elastiska frågor för horisontell partitionering.

Viktig

En lyckad körning av elastisk fråga över en stor uppsättning databaser är starkt beroende av tillgängligheten för var och en av databaserna under frågekörningen. Om en av databaserna inte är tillgänglig misslyckas hela frågan. Om du planerar att köra frågor mot hundratals eller tusentals databaser samtidigt, kontrollerar du att klientprogrammet har inbäddad återförsökslogik, eller överväg att använda elastiska jobb och köra frågor mot mindre delmängder av databaser och konsolidera resultaten av varje fråga till en enda destination.

T-SQL-frågor

När du har definierat dina externa datakällor och dina externa tabeller kan du använda vanliga SQL Server-anslutningssträngar för att ansluta till de databaser där du definierade dina externa tabeller. Du kan sedan köra T-SQL-instruktioner över dina externa tabeller på den anslutningen med de begränsningar som beskrivs senare i den här artikeln. Du hittar mer information och exempel på T-SQL-frågor i dokumentationsartiklarna för horisontell partitionering och vertikal partitionering.

Anslutning för verktyg

Du kan använda vanliga SQL Server-anslutningssträngar för att ansluta dina program och BI- eller dataintegreringsverktyg till databaser som har externa tabeller. Kontrollera att SQL Server stöds som datakälla för verktyget. När du är ansluten läser du den elastiska frågedatabasen och de externa tabellerna i databasen precis som du gör med andra SQL Server-databaser som du ansluter till med verktyget.

Viktig

Elastiska frågor stöds endast vid anslutning med SQL Server-autentisering.

Kostnad

Elastisk fråga ingår i kostnaden för Azure SQL Database. Topologier där dina fjärrdatabaser finns i ett annat datacenter än den elastiska frågeslutpunkten stöds, men utgående data från fjärrdatabaser debiteras regelbundet Azure-priser.

Förhandsversionsbegränsningar

  • Det kan ta upp till några minuter att köra din första elastiska fråga på mindre resurser och tjänstenivåerna Standard och Generellt syfte. Denna tid är nödvändig för att ladda in elastic query-funktionen; laddningsprestanda förbättras med högre tjänstnivåer och beräkningsstorlekar.

  • Skript för externa datakällor eller externa tabeller från SSMS eller SSDT stöds ännu inte.

  • Import/export för SQL Database stöder ännu inte externa datakällor och externa tabeller. Om du behöver använda Import/Export släpper du dessa objekt innan du exporterar och skapar dem igen efter importen.

  • Elastisk fråga stöder för närvarande endast skrivskyddad åtkomst till externa tabeller. Du kan dock använda fullständig Transact-SQL funktioner i databasen där den externa tabellen har definierats. Detta kan vara användbart för att till exempel bevara tillfälliga resultat med hjälp av till exempel SELECT <column_list> INTO <local_table>, eller för att definiera lagrade procedurer i den elastiska frågedatabasen som refererar till externa tabeller.

  • Förutom nvarchar(max)stöds inte LOB-typer (inklusive rumsliga typer) i externa tabelldefinitioner. Som en lösning kan du skapa en vy på fjärrdatabasen som omvandlar LOB-typen till nvarchar(max), definiera den externa tabellen över vyn i stället för bastabellen och sedan omvandla den tillbaka till den ursprungliga LOB-typen i dina frågor.

  • Kolumner med nvarchar(max) datatyp i resultatuppsättningen inaktiverar avancerade batchbearbetningstekniker som används i Elastic Query-implementering och kan påverka frågeprestanda för en storleksordning, eller till och med två storleksordningar i icke-kanoniska användningsfall där stora mängder icke-aggregerade data överförs som ett resultat av frågan.

  • Kolumnstatistik över externa tabeller stöds för närvarande inte. Tabellstatistik stöds, men måste skapas manuellt.

  • Markörer stöds inte för externa tabeller i Azure SQL Database.

  • Elastisk fråga fungerar endast med Azure SQL Database. Du kan inte använda den för att fråga en SQL Server-instans.

  • Privata länkar stöds för närvarande inte med elastiska frågor för de databaser som är mål för externa datakällor.