Översikt över elastiska frågor i Azure SQL Database (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. Med den funktionen kan du utföra frågor över flera databaser för att få åtkomst till fjärrtabeller, och ansluta Microsofts verktyg och verktyg från tredje part (Excel, Power BI, Tableau och så vidare) för att fråga på flera 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).
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 skrivskyddad frågekörning av fjärrdatabaser och ger ett alternativ för aktuella SQL Server-kunder att migrera program med tre- och fyradelade namn eller länkad server till SQL Database.
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 körning.
Körning av lagrad procedur
Kör fjärrstyrda proceduranrop 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 klientbiblioteket för elastisk databas) 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å 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 ett antal 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 – horisontell partitionering (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älvsharding. 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.
Kommentar
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
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 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.
Viktigt!
Du måste ha behörigheten ALTER ANY EXTERNAL DATA SOURCE. Den här behörigheten ingår i alter database-behörigheten. ÄNDRA EVENTUELLA BEHÖRIGHETER FÖR EXTERN DATAKÄLLA krävs för att referera till den underliggande datakällan.
Referensdata: Topologin används för referensdatahantering. I bilden nedan 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 Lodrät partitionering – Använda elastisk fråga för att fråga referensdata
Frågor mellan databaser: Elastiska frågor möjliggör användningsfall som kräver frågor i 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 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 Lodrät 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:
- SKAPA HUVUDNYCKEL mymasterkey
- CREATE DATABASE SCOPED CREDENTIAL mycredential
- SKAPA/SLÄPP EXTERN DATAKÄLLA mydatakälla av typen RDBMS
- SKAPA/SLÄPP MYTABLE FÖR EXTERN TABELL
När du har kört DDL-uttrycken kan du komma åt fjärrtabellen "mytable" som om det 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 – horisontell partitionering
Om du använder elastisk fråga för att utföra rapporteringsuppgifter över en horisontellt 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 (Shard map management).
Bild 4 Vågrät partitionering – Använda elastisk fråga för rapportering över horisontella datanivåer
Kommentar
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 den förväntade mängden 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:
- SKAPA HUVUDNYCKEL mymasterkey
- CREATE DATABASE SCOPED CREDENTIAL mycredential
- Skapa en fragmentkarta som representerar datanivån med hjälp av klientbiblioteket för elastisk databas.
- SKAPA/SLÄPP EXTERN DATAKÄLLA mydatakälla av typen SHARD_MAP_MANAGER
- SKAPA/SLÄPP MYTABLE FÖR EXTERN TABELL
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.
Information om hur du börjar koda finns i Komma igång med elastisk fråga för horisontell partitionering (horisontell partitionering).
Viktigt!
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 logik för omprövning, eller överväg att använda elastic database-jobb (förhandsversion) och köra frågor mot mindre delmängder av databaser, konsolidera resultatet av 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 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 nedan. Mer information och exempel på T-SQL-frågor finns i dokumentationsavsnitten 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.
Viktigt!
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. Observera att topologier där dina fjärrdatabaser finns i ett annat datacenter än den elastiska frågeslutpunkten stöds, men datautgående data från fjärrdatabaser debiteras regelbundet Azure-priser.
Begränsningar i förhandsversionen
- Det kan ta upp till några minuter att köra din första elastiska fråga på mindre resurser och tjänstnivån Standard och Generell användning. Den här gången är det nödvändigt att läsa in funktionen för elastiska frågor. inläsningsprestanda 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 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 igen efter importen.
- Elastisk fråga stöder för närvarande endast skrivskyddad åtkomst till externa tabeller. Du kan dock använda fullständiga Transact-SQL-funktioner i databasen där den externa tabellen har definierats. Detta kan vara användbart för att t.ex. 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 till den ursprungliga LOB-typen i dina frågor.
- Kolumner av datatypen nvarchar(max) 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.
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 alla typer av feedback om tjänsten (defekter, grova kanter, funktionsluckor).
Nästa steg
- En självstudie om vertikal partitionering finns i Komma igång med frågor mellan databaser (vertikal partitionering).
- Syntax- och exempelfrågor för vertikalt partitionerade data finns i Köra frågor mot vertikalt partitionerade data)
- En horisontell partitioneringsguide (horisontell partitionering) finns i Komma igång med elastisk fråga för horisontell partitionering (horisontell partitionering).
- Syntax- och exempelfrågor för horisontellt 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ärransluten Azure SQL Database eller uppsättning databaser som fungerar som shards i ett horisontellt partitioneringsschema.