Azure SQL Database översikt över elastisk fråga (förhandsversion)
GÄLLER FÖR:
Azure SQL Database
Funktionen för elastisk fråga (i förhandsversion) gör att du kan köra en Transact-SQL-fråga 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 få åtkomst till fjärrtabeller och ansluta Microsoft-verktyg och verktyg från tredje part (Excel, Power BI, Tableau osv.) för att fråga över datanivåer med flera databaser. Med den här funktionen kan du skala ut frågor till omfattande datanivåer och visualisera resultaten i BI-rapporter (Business Intelligence).
Därför ska du 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 frågor för fjärrdatabaser och ger ett alternativ för aktuella SQL Server-kunder att migrera program med tre- och fyra delar eller en länkad server till SQL Database.
Tillgängligt på alla tjänstnivåer
Elastiska frågor stöds på alla tjänstnivåer i Azure SQL Database. Se avsnittet om begränsningar i förhandsversionen 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 körning.
Körning av lagrad procedur
Kör fjärranslutna lagrade procedur-anrop 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 bestå av användaren eller programmet direkt 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 elastic database-klientbiblioteket) bygger på en utskalad datanivå och en elastisk fråga används för rapportering mellan databaser.
Bild 1 Elastisk fråga som används på utskalad 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 ett antal databaser på en datanivå. Normalt finns olika uppsättningar tabeller i olika databaser. Det innebär att schemat skiljer sig åt på olika databaser. Till exempel finns alla tabeller för inventering på en databas medan alla redovisningsrelaterade tabeller finns på en andra databas. Vanliga användningsfall med den här topologin kräver en för att fråga i eller för att kompilera rapporter över tabeller i flera databaser.
- Horisontell partitionering – horisontell partitionering (topologi 2): Data partitioneras vågrätt 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 för "horisontell partitionering". Horisontell partitionering kan utföras och hanteras med (1) de elastiska databasverktygens bibliotek eller (2) självsharding. En elastisk fråga används för att fråga eller kompilera rapporter över många shards. Shards är vanligtvis databaser i en elastisk pool. Du kan tänka dig elastiska frågor som ett effektivt sätt att fråga alla databaser i en elastisk pool samtidigt, så länge databaser delar det gemensamma schemat.
Anteckning
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 också överväga att använda Azure Synapse Analytics.
Vertikal partitionering – frågor mellan databaser
Information om hur du börjar koda finns i Komma igång med frågor mellan databaser (vertikal partitionering).
En elastisk fråga kan användas för att göra data som finns i en databas i SQL Database tillgängliga för andra databaser i SQL Database. På så sätt kan frågor från en databas 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 databasen som du vill få åtkomst till tabeller i fjärrdatabasen från. Inga ändringar krävs på fjärrdatabasen. För vanliga scenarier med vertikal partitionering 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.
Viktigt
Du måste ha behörigheten ALTER ANY EXTERNAL DATA SOURCE. Den här behörigheten ingår i behörigheten ALTER DATABASE. ALTER ANY EXTERNAL DATA SOURCE permissions are needed to refer to the underlying data source .ALTER ANY EXTERNAL DATA SOURCE permissions are needed to refer to the underlying data source.
Referensdata: Topologin används för hantering av referensdata. I bilden nedan sparas två tabeller (T1 och T2) med referensdata på en dedikerad databas. Med hjälp av en elastisk fråga kan du nu komma åt tabellerna T1 och T2 via en fjärrdatabas, som du ser i bilden. Använd topologi 1 om referenstabellerna är små eller om fjärrfrågor i referenstabellen har selektiva predikat.
Bild 2 Vertikal partitionering – Använda elastisk fråga för att köra frågor mot referensdata

Frågor mellan databaser: Elastiska frågor möjliggör användningsfall som kräver frågor över flera databaser i SQL Database. 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 konfigurationen ä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 i olika databaser

Följande steg konfigurerar elastiska databasfrågor för lodräta partitioneringsscenarier som kräver åtkomst till en tabell som finns på fjärrdatabaser i SQL Database med samma schema:
- SKAPA HUVUDNYCKEL mymasterkey
- CREATE DATABASE SCOPED CREDENTIAL mycredential
- CREATE/DROP EXTERNAL DATA SOURCE mydatasource av typen RDBMS
- CREATE/DROP EXTERNAL TABLE mytable
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 automatiskt en anslutning till fjärrdatabasen, bearbetar din begäran på fjärrdatabasen och returnerar resultatet.
Horisontell partitionering – horisontell partitionering
Med elastisk fråga för att utföra rapporteringsuppgifter över en horisontellt partitionerad, det vill säga horisontellt partitionerad, kräver datanivån en elastisk databasshardkarta för att representera databaserna på datanivån. Vanligtvis används bara en enda fragmentkarta 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 elastic database-klientbiblioteket och hur du skapar fragmentkartor finns i Hantering av fragmentkartor.
Bild 4 Horisontell partitionering – Använda elastisk fråga för rapportering över shardade datanivåer

Anteckning
Elastic Query Database (huvudnoden) kan vara en separat databas eller 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 den förväntade mängden inloggnings-/frågebegäranden.
Följande steg konfigurerar elastiska databasfrågor för horisontell partitioneringsscenarier som kräver åtkomst till en uppsättning tabeller som finns på (vanligtvis) flera fjärrdatabaser i SQL Database:
- SKAPA HUVUDNYCKEL mymasterkey
- CREATE DATABASE SCOPED CREDENTIAL mycredential
- Skapa en fragmentkarta som representerar din datanivå med hjälp av Elastic Database-klientbiblioteket.
- CREATE/DROP EXTERNAL DATA SOURCE mydatasource av typen SHARD_MAP_MANAGER
- CREATE/DROP EXTERNAL TABLE mytable
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 automatiskt flera parallella anslutningar till fjärrdatabaserna där tabellerna lagras fysiskt, bearbetar begärandena 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.
Om du vill börja koda kan du läsa Komma igång med elastisk fråga för horisontell partitionering (horisontell partitionering).
Viktigt
Lyckad körning av elastiska frågor över en stor uppsättning databaser förlitar sig i hög grad på tillgängligheten för varje databas under frågekörningen. Om en av databaserna inte är tillgänglig misslyckas hela frågan. Om du planerar att fråga hundratals eller tusentals databaser samtidigt kontrollerar du att klientprogrammet har logik för omprövning inbäddad, eller överväg att använda elastisk databas-jobb (förhandsversion) och köra frågor mot mindre delmängder av databaser, vilket konsoliderar resultaten för varje fråga till ett enda mål.
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 databaserna där du definierade dina externa tabeller. Du kan sedan köra T-SQL-instruktioner över dina externa tabeller på anslutningen med de begränsningar som beskrivs nedan. Du hittar mer information och exempel på T-SQL-frågor i dokumentationsavsnitten för horisontell partitionering och vertikal partitionering.
Anslutning för verktyg
Du kan använda vanliga SQL Server för att ansluta dina program och BI- eller dataintegreringsverktyg till databaser som har externa tabeller. Kontrollera att SQL Server stöds som en datakälla för ditt verktyg. När du är ansluten kan du referera till den elastiska frågedatabasen och de externa tabellerna i databasen precis som med andra SQL Server som du ansluter till med ditt verktyg.
Viktigt
Autentisering med Azure Active Directory med elastiska frågor stöds inte för närvarande.
Cost
Elastisk fråga ingår i kostnaden för Azure SQL Database. Observera att 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.
Begränsningar för förhandsversion
- Det kan ta upp till några minuter att köra din första elastiska fråga på mindre resurser och standard- Generell användning på tjänstnivån. Den här tiden är nödvändig för att läsa in funktionen för elastiska frågor. prestandainläsningen förbättras med högre tjänstnivåer och beräkningsstorlekar.
- Skriptning av externa datakällor eller externa tabeller från SSMS eller SSDT stöds inte ännu.
- Import/Export för SQL Database har ännu inte stöd för 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 sedan igen efter importen.
- Elastisk fråga stöder för närvarande endast skrivskyddade åtkomst till externa tabeller. Du kan dock använda fullständiga T-SQL på databasen där den externa tabellen har definierats. Detta kan vara användbart för att t.ex. bevara tillfälliga resultat med exempelvis 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 definitioner för externa tabeller. Som en tillfällig lösning kan du skapa en vy på fjärrdatabasen som kastar LOB-typen till nvarchar(max), definiera den externa tabellen över vyn i stället för bastabellen och sedan skicka tillbaka den till den ursprungliga LOB-typen i dina frågor.
- Kolumner med nvarchar(max) datatyp i resultatuppsättningen inaktiverar avancerade batchteknikfunktioner som används i Elastic Query-implementeringen och kan påverka frågeprestanda i storlek 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 inte för närvarande. Tabellstatistik stöds, men måste skapas manuellt.
- Elastiska frågor fungerar med Azure SQL Database endast. Du kan inte använda den för att fråga SQL Server instans.
Dela din feedback
Dela feedback om din upplevelse med elastiska frågor med oss nedan, på MSDN-forumen eller på Stack Overflow. Vi är intresserade av all slags feedback om tjänsten (defekter, ungefärliga kanter, funktionsluckor).
Nästa steg
- En självstudiekurs om vertikal partitionering finns i Komma igång med frågor mellan databaser (vertikal partitionering).
- Syntax- och exempelfrågor för lodrätt partitionerade data finns i Fråga lodrätt partitionerade data)
- En självstudiekurs om horisontell partitionering (sharding) finns i Komma igång med elastisk fråga för horisontell partitionering (horisontell partitionering).
- Syntax- och exempelfrågor för vågrätt partitionerade data finns i Fråga vågrätt partitionerade data)
- Se sp _ execute _ remote för en lagrad procedur som kör en Transact-SQL-instruktion på en enda fjärr-Azure SQL Database eller uppsättning databaser som fungerar som shards i ett vågrätt partitioneringsschema.