Dela via


Rapportering mellan klientorganisationer med hjälp av distribuerade frågor

Gäller för:Azure SQL Database

I den här självstudien kör du distribuerade frågor över hela uppsättningen klientdatabaser för rapportering. Dessa frågor kan extrahera insikter som är begravda i de dagliga driftdata för Wingtip Tickets SaaS-klientorganisationer. För att göra detta distribuerar du ytterligare en rapportdatabas till katalogservern och använder Elastic Query för att aktivera distribuerade frågor.

I den här guiden lär du dig:

  • Så här distribuerar du en rapportdatabas
  • Så här kör du distribuerade frågor i alla klientdatabaser
  • Hur globala vyer i varje databas kan möjliggöra effektiv frågekörning mellan klientorganisationer

Se till att följande förhandskrav är slutförda för att kunna slutföra den här guiden:

Rapporteringsmönster mellan klientorganisationer

cross-tenant distributed query pattern

En möjlighet med SaaS-program är att använda den stora mängden klientdata som lagras i molnet för att få insikter om hur ditt program fungerar och används. Dessa insikter kan vägleda funktionsutveckling, användbarhetsförbättringar och andra investeringar i dina appar och tjänster.

Det är lätt att komma åt en enkel databas med flera klienter, men inte så enkelt när du har distribuerat tusentals databaser. En metod är att använda Elastic Query, som gör det möjligt att köra frågor mot en distribuerad uppsättning databaser med ett gemensamt schema. Dessa databaser kan distribueras mellan olika resursgrupper och prenumerationer, men måste dela en gemensam inloggning. Elastic Query använder en enkel huvuddatabas där externa tabeller definieras som speglingstabeller eller vyer i de distribuerade databaserna (klientorganisationen). Frågorna som skickas till huvuddatabasen kompileras för att skapa en distribuerad frågeplan, och delar av frågan skickas ned till klientdatabaserna efter behov. Elastic Query använder shardkartan i katalogdatabasen för att fastställa platsen för alla klientdatabaser. Det är enkelt att konfigurera och fråga efter huvuddatabasen med standard-Transact-SQL och stöd för frågor från verktyg som Power BI och Excel.

Genom att distribuera frågor mellan klientdatabaserna ger Elastic Query omedelbar insikt i produktionsdata i realtid. Eftersom Elastic Query hämtar data från potentiellt många databaser kan frågefördröjningen vara högre än motsvarande frågor som skickas till en enda databas med flera klientorganisationer. Utforma frågor för att minimera de data som returneras till huvuddatabasen. Elastic Query passar ofta bäst för att köra frågor mot små mängder realtidsdata, i stället för att skapa ofta använda eller komplexa analysfrågor eller rapporter. Om frågorna inte fungerar bra kan du titta på körningsplanen för att se vilken del av frågan som skickas ned till fjärrdatabasen och hur mycket data som returneras. Frågor som kräver komplex aggregering eller analytisk bearbetning kan vara bättre handtag genom att extrahera klientdata till en databas eller ett informationslager som är optimerat för analysfrågor. Det här mönstret förklaras i självstudiekursen för klientanalys.

Hämta Wingtip Tickets SaaS Database Per Tenant-programskript

Wingtip Tickets SaaS Multi-tenant Database-skript och programkällkod är tillgängliga i WingtipTicketsSaaS-DbPerTenant GitHub-lagringsplatsen. Se den allmänna vägledningen för steg för att ladda ned och avblockera Wingtip Tickets SaaS-skript.

Skapa biljettförsäljningsdata

Om du vill köra frågor mot en mer intressant datamängd skapar du biljettförsäljningsdata genom att köra biljettgeneratorn.

  1. I PowerShell ISE öppnar du skriptet ...\Learning Modules\Operational Analytics\Adhoc Reporting\Demo-AdhocReporting.ps1 och anger följande värde:
    • $DemoScenario = 1, Köp biljetter till evenemang på alla platser.
  2. Tryck på F5 för att köra skriptet och generera biljettförsäljning. Fortsätt stegen i den här självstudien medan skriptet körs. Biljettdata efterfrågas i avsnittet Kör ad hoc-distribuerade frågor , så vänta tills biljettgeneratorn har slutförts.

Utforska de globala vyerna

I programmet Wingtip Tickets SaaS Database Per Tenant får varje klient en databas. Därför är data som finns i databastabellerna begränsade till perspektivet för en enda klientorganisation. Men när du frågar över alla databaser är det viktigt att Elastic Query kan behandla data som om de vore en del av en enda logisk databas som partitionerats av klientorganisationen.

För att simulera det här mönstret läggs en uppsättning "globala" vyer till i klientdatabasen som projicerar ett klient-ID i var och en av de tabeller som efterfrågas globalt. Vyn VenueEvents lägger till exempel till ett beräknat VenueId till kolumnerna som projiceras från tabellen Händelser. På samma sätt lägger vyerna VenueTicketPurchases och VenueTickets till en beräknad VenueId-kolumn som projiceras från respektive tabell. Dessa vyer används av Elastic Query för att parallellisera frågor och push-överföra dem till lämplig fjärrklientdatabas när en VenueId-kolumn finns. Detta minskar avsevärt mängden data som returneras och resulterar i en betydande ökning av prestanda för många frågor. Dessa globala vyer har skapats i förväg i alla klientdatabaser.

  1. Öppna SSMS och anslut till klientorganisationen1-USER-servern<>.

  2. Expandera Databaser, högerklicka på contosoconcerthall och välj Ny fråga.

  3. Kör följande frågor för att utforska skillnaden mellan tabellerna med en klientorganisation och de globala vyerna:

    -- The base Venue table, that has no VenueId associated.
    SELECT * FROM Venue
    
    -- Notice the plural name 'Venues'. This view projects a VenueId column.
    SELECT * FROM Venues
    
    -- The base Events table, which has no VenueId column.
    SELECT * FROM Events
    
    -- This view projects the VenueId retrieved from the Venues table.
    SELECT * FROM VenueEvents
    

I de här vyerna beräknas VenueId som en hash för namnet På plats, men vilken metod som helst kan användas för att introducera ett unikt värde. Den här metoden liknar hur klientnyckeln beräknas för användning i katalogen.

Så här undersöker du definitionen av vyn Arenor :

  1. I Object Explorer expanderar du contosoconcerthall>Views:

    Screenshot shows the contents of the Views node, including four types of Venue d b o.

  2. Högerklicka på dbo. Lokaler.

  3. Välj Skriptvy som>SKAPA till>nytt Power Query-redigeraren fönster

Skripta någon av de andra venuevyerna för att se hur de lägger till VenueId.

Distribuera databasen som används för distribuerade frågor

Den här övningen distribuerar adhocreporting-databasen. Det här är huvuddatabasen som innehåller det schema som används för att köra frågor mot alla klientdatabaser. Databasen distribueras till den befintliga katalogservern, som är den server som används för alla hanteringsrelaterade databaser i exempelappen.

  1. i PowerShell ISE öppnar du ...\Learning Modules\Operational Analytics\Adhoc Reporting\Demo-AdhocReporting.ps1.

  2. Ange $DemoScenario = 2, Distribuera ad hoc-rapporteringsdatabas.

  3. Tryck på F5 för att köra skriptet och skapa adhocreporting-databasen.

I nästa avsnitt lägger du till schema i databasen så att den kan användas för att köra distribuerade frågor.

Konfigurera huvuddatabasen för att köra distribuerade frågor

Den här övningen lägger till schema (den externa datakällan och definitionerna för den externa tabellen) i adhocreporting-databasen för att aktivera frågor i alla klientdatabaser.

  1. Öppna SQL Server Management Studio och anslut till den Adhoc Reporting-databas som du skapade i föregående steg. Namnet på databasen är adhocreporting.

  2. Öppna ...\Learning Modules\Operational Analytics\Adhoc Reporting\ Initialize-AdhocReportingDB.sql i SSMS.

  3. Granska SQL-skriptet och anteckna:

    Elastic Query använder en databasomfattande autentiseringsuppgift för att få åtkomst till var och en av klientdatabaserna. Den här autentiseringsuppgiften måste vara tillgänglig i alla databaser och bör normalt beviljas de minsta rättigheter som krävs för att aktivera dessa frågor.

    create credential

    Med katalogdatabasen som extern datakälla distribueras frågor till alla databaser som är registrerade i katalogen när frågan körs. Eftersom servernamnen skiljer sig åt för varje distribution hämtar det här skriptet platsen för katalogdatabasen från den aktuella servern (@@servername) där skriptet körs.

    create external data source

    De externa tabeller som refererar till de globala vyer som beskrivs i föregående avsnitt och som definieras med DISTRIBUTION = SHARDED(VenueId). Eftersom varje VenueId mappar till en enskild databas förbättrar detta prestanda för många scenarier, vilket visas i nästa avsnitt.

    create external tables

    Den lokala tabellen VenueTypes som skapas och fylls i. Den här referensdatatabellen är vanlig i alla klientdatabaser, så den kan representeras här som en lokal tabell och fyllas med vanliga data. För vissa frågor kan den här tabellen definieras i huvuddatabasen minska mängden data som behöver flyttas till huvuddatabasen.

    create table

    Om du inkluderar referenstabeller på det här sättet bör du uppdatera tabellschemat och data när du uppdaterar klientdatabaserna.

  4. Tryck på F5 för att köra skriptet och initiera adhocreporting-databasen.

Nu kan du köra distribuerade frågor och samla in insikter för alla klienter!

Köra distribuerade frågor

Nu när adhocreporting-databasen har konfigurerats kör du några distribuerade frågor. Inkludera körningsplanen för en bättre förståelse av var frågebearbetningen sker.

När du inspekterar körningsplanen hovrar du över planikonerna för mer information.

Viktigt att notera är att inställningen DISTRIBUTION = SHARDED(VenueId) när den externa datakällan definieras förbättrar prestandan för många scenarier. När varje VenueId mappar till en enskild databas görs filtrering enkelt via fjärranslutning och returnerar endast de data som behövs.

  1. Öppna ...\Learning Modules\Operational Analytics\Adhoc Reporting\Demo-AdhocReportingQueries.sql i SSMS.

  2. Kontrollera att du är ansluten till adhocreporting-databasen.

  3. Välj menyn Fråga och klicka på Inkludera faktisk körningsplan

  4. Markera frågan Vilka platser är registrerade för närvarande? och tryck på F5.

    Frågan returnerar hela platslistan, vilket illustrerar hur snabbt och enkelt det är att fråga över alla klienter och returnera data från varje klientorganisation.

    Granska planen och se att hela kostnaden finns i fjärrfrågan. Varje klientdatabas kör frågan via fjärranslutning och returnerar platsinformationen till huvuddatabasen.

    SELECT * FROM dbo.Venues

  5. Välj nästa fråga och tryck på F5.

    Den här frågan kopplar data från klientdatabaserna och den lokala VenueTypes-tabellen (lokal eftersom det är en tabell i adhocreporting-databasen).

    Granska planen och se att den största delen av kostnaden är fjärrfrågan. Varje klientdatabas returnerar sin platsinformation och utför en lokal koppling med den lokala VenueTypes-tabellen för att visa det egna namnet.

    Join on remote and local data

  6. Välj nu frågan På vilken dag såldes flest biljetter? och tryck på F5.

    Den här frågan gör lite mer komplex anslutning och aggregering. Merparten av bearbetningen sker via fjärranslutning. Endast enskilda rader, som innehåller varje lokals antal dagliga biljettförsäljningar per dag, returneras till huvuddatabasen.

    query

Nästa steg

I den här guiden lärde du dig hur man:

  • Köra distribuerade frågor över alla klientdatabaser
  • Distribuera en rapportdatabas och definiera det schema som krävs för att köra distribuerade frågor.

Prova nu självstudien Klientanalys för att utforska hur du extraherar data till en separat analysdatabas för mer komplex analysbearbetning.

Ytterligare resurser