Panoramica delle query elastiche del database SQL di Azure (anteprima)
Si applica a: Database SQL di Azure
La funzionalità delle query elastiche, in anteprima, consente di eseguire una query Transact-SQL che si estende su più database nel database SQL di Azure. Consente di eseguire query tra database per accedere a tabelle remote e di connettere strumenti Microsoft e di terze parti (Excel, Power BI, Tableau e così via) per eseguire query tra livelli di dati con più database. Usando questa funzionalità, è possibile aumentare il numero di istanze per le query a livelli dati di grandi dimensioni e visualizzare i risultati nei report di business intelligence.
Vantaggi dell'uso di query elastiche
Database SQL di Azure
È possibile eseguire query su più database SQL di Azure completamente in T-SQL. Questo permette di eseguire query di sola lettura dei database remoti e consente agli utenti di SQL Server di eseguire la migrazione delle applicazioni usando nomi in tre e quattro parti o un server collegato nel database SQL.
Disponibile a tutti i livelli di servizio
La query elastica è supportata in tutti i livelli di servizio del database SQL di Azure. Per informazioni sulle limitazioni delle prestazioni per i livelli di servizio inferiori, vedere più avanti la sezione Limiti di anteprima.
Eseguire il push dei parametri ai database remoti
Le query elastiche possono ora eseguire il push dei parametri SQL nei database remoti per l'esecuzione.
Esecuzione di stored procedure
Eseguire chiamate di stored procedure remote o funzioni remote mediante sp_execute _remote.
Flessibilità
Le tabelle esterne con una query elastica possono fare riferimento a tabelle remote con un nome di schema o di tabella diverso.
Scenari di query elastiche
L'obiettivo consiste nel semplificare gli scenari di query in cui più database forniscono righe in un singolo risultato complessivo. La query può essere composta direttamente dall'utente o dall'applicazione oppure indirettamente tramite gli strumenti connessi al database. Ciò è particolarmente utile quando si creano report, si usano strumenti commerciali di Business Intelligence o di integrazione dei dati o una qualsiasi applicazione che non può essere modificata. La query elastica consente di eseguire query in diversi database usando l'esperienza di connettività nota di SQL Server in strumenti quali Excel, Power BI, Tableau o Cognos. Una query elastica semplifica l'accesso a un'intera raccolta di database tramite query emesse da SQL Server Management Studio o Visual Studio e semplifica le query tra database da Entity Framework o altri ambienti ORM. La Figura 1 visualizza uno scenario in cui un'applicazione cloud esistente che usa la libreria client dei database elasticisi basa su un livello di dati con scalabilità orizzontale e viene usata una query elastica per la creazione di report tra database.
Figura 1 Query elastica usata su un livello di dati con scalabilità orizzontale
Gli scenari relativi ai clienti per la query elastica sono caratterizzati dalle topologie seguenti:
- Partizionamento verticale - Query tra database (Topologia 1): i dati vengono partizionati verticalmente tra alcuni database in un livello di dati. In genere, diversi set di tabelle si trovano in diversi database. Lo schema risulta quindi diverso nei diversi database. Ad esempio, tutte le tabelle per l'inventario si trovano in un database, mentre le tabelle correlate alla contabilità si trovano in un altro database. I casi di utilizzo comuni con questa topologia richiedono l'esecuzione di query o la compilazione di report tra tabelle in diversi database.
- Partizionamento orizzontale - Partizionamento orizzontale (Topologia 2): i dati vengono partizionati orizzontalmente per distribuire le righe in un livello dati con scalabilità orizzontale. Con questo approccio lo schema risulta identico in tutti i database partecipanti. Questo approccio viene definito anche "partizionamento orizzontale". Il partizionamento orizzontale può essere eseguito e gestito mediante (1) le librerie di strumenti dei database elastici o (2) il partizionamento orizzontale automatico. Una query elastica viene usata per eseguire query o compilare report in molte partizioni. Le partizioni sono in genere database all'interno di un pool elastico. Una query elastica è un modo efficiente per eseguire query su tutti i database di un pool elastico in una sola volta, purché i database condividano lo schema comune.
Nota
La query elastica è adatta a scenari di creazione di report dove è possibile eseguire la maggior parte dell'elaborazione (filtri e aggregazione) sul lato del database di origine esterno. Non è adatto per le operazioni ETL, dove i grandi quantità di dati vengono trasferite da database remoti. Per carichi di lavoro di creazione intensiva di report o per scenari di data warehouse con query più complesse è possibile usare anche Azure Synapse Analytics.
Partizionamento verticale - Query tra database
Per iniziare a scrivere codice, vedere Introduzione alle query tra database (partizionamento verticale).
È possibile usare una query elastica per rendere i dati contenuti in un database di Database SQL disponibili ad altri database in Database SQL. Questo consente alle query di un database di fare riferimento alle tabelle di qualsiasi altro database remoto in Database SQL. Il primo passaggio consiste nel definire un'origine dati esterna per ogni database remoto. L'origine dati esterna viene definita nel database locale da cui si vuole ottenere l'accesso alle tabelle situate nel database remoto. Non è necessaria alcuna modifica al database remoto. Per scenari tipici di partizionamento verticale in cui i diversi database hanno schemi diversi, è possibile usare le query elastiche per implementare casi di utilizzo comuni, ad esempio l'accesso a dati di riferimento e l'esecuzione di query tra database.
Importante
L'utente deve disporre dell'autorizzazione ALTER ANY EXTERNAL DATA SOURCE. Questa autorizzazione è inclusa nell'autorizzazione ALTER DATABASE. Per il riferimento all'origine dati sottostante sono necessarie autorizzazioni ALTER ANY EXTERNAL DATA SOURCE.
Dati di riferimento: la topologia viene usata per la gestione dei dati di riferimento. Nella figura seguente due tabelle (T1 e T2) con dati di riferimento vengono mantenute in un database dedicato. Usando una query elastica è ora possibile accedere alle tabelle T1 e T2 in modalità remota da altri database, come illustrato nella figura. Usare la topologia 1 se le tabelle di riferimento hanno dimensioni ridotte o se le query nella tabella di riferimento hanno predicati selettivi.
Figura 2 Partizionamento verticale - Uso della query elastica per eseguire query nei dati di riferimento
Query tra database: le query elastiche consentono casi d’uso che richiedono l'esecuzione di query tra diversi database nel database SQL. La Figura 3 mostra quattro database diversi, ovvero CRM, Inventario, Risorse umane e Prodotti. Le query eseguite in uno dei database devono accedere anche a uno o a tutti gli altri database. Usando una query elastica, è possibile configurare il database per questa situazione eseguendo alcune semplici istruzioni DDL in ogni database. Dopo avere eseguito una volta questa configurazione, l'accesso a una tabella remota sarà semplice quando fare riferimento a una tabella locale dalle query T-SQL o dagli strumenti di Business Intelligence. Questo approccio è consigliato se le query remote non restituiscono risultati di grandi dimensioni.
Figura 3 Partizionamento verticale - Uso delle query elastiche per eseguire query in diversi database
I passaggi seguenti configurano le query su database elastiche per scenari di partizionamento verticale che richiedono l'accesso a una tabella situata in database remoti di Database SQL con lo stesso schema:
- CREATE MASTER KEY mymasterkey
- CREATE DATABASE SCOPED CREDENTIAL mycredential
- CREATE/DROP EXTERNAL DATA SOURCE mydatasource of type RDBMS
- CREATE/DROP EXTERNAL TABLE mytable
Dopo l'esecuzione delle istruzioni DDL, è possibile accedere alla tabella remota "mytable" come se fosse una tabella locale. Il database SQL di Azure apre automaticamente una connessione al database remoto, elabora la richiesta nel database remoto e restituisce i risultati.
Partizionamento orizzontale - Partizionamento orizzontale
L'uso delle query elastiche per eseguire attività di creazione report su un livello dati con partizionamento orizzontale richiede una mappa delle partizioni dei database elastici per rappresentare i database del livello di dati. In genere in questo scenario viene usata solo una mappa partizioni, e un database dedicato con capacità di query elastiche (nodo head) viene usato come punto di ingresso per le query di creazione di report. L'accesso alla mappa partizioni è necessario solo per questo database dedicato. La Figura 4 illustra questa topologia e la relativa configurazione, con il database sottoposto a query elastiche e la mappa partizioni. Per altre informazioni sulla libreria client dei database elastici e sulla creazione di mappe partizioni, vedere Gestione delle mappe partizioni.
Figura 4 Partizionamento orizzontale - Uso delle query elastiche per la creazione di report relativi ai livelli dati con partizionamento orizzontale
Nota
Il database per query elastiche (nodo head) può essere un database separato o lo stesso database che ospita la mappa partizioni. Indipendentemente dalla configurazione scelta, assicurarsi che il livello di servizio e le dimensioni di calcolo del database siano sufficientemente elevati per gestire il volume previsto di richieste di accesso o di query.
I passaggi seguenti configurano le query su database elastiche per scenari di partizionamento orizzontale che richiedono l'accesso a un set di tabelle situate, in genere, in diversi database remoti di Database SQL:
- CREATE MASTER KEY mymasterkey
- CREATE DATABASE SCOPED CREDENTIAL mycredential
- Creare una mappa partizioni che rappresenta il livello dati usando la libreria client dei database elastici.
- CREATE/DROP EXTERNAL DATA SOURCE mydatasource di tipo SHARD_MAP_MANAGER
- CREATE/DROP EXTERNAL TABLE mytable
Dopo aver eseguito questi passaggi, è possibile accedere alla tabella con partizionamento orizzontale "mytable" come se fosse una tabella locale. Il database SQL di Azure apre automaticamente più connessioni parallele ai database remoti in cui vengono archiviate fisicamente le tabelle, elabora le richieste nei database remoti e restituisce i risultati. Per altre informazioni sui passaggi necessari per gli scenari di partizionamento orizzontale, vedere Query elastiche per il partizionamento orizzontale.
Per iniziare a scrivere codice, vedere la guida introduttiva alle query elastiche per il partizionamento orizzontale.
Importante
La corretta esecuzione di una query elastica su un set di database di grandi dimensioni dipende in gran parte dalla disponibilità di ogni database durante l'esecuzione della query. Se uno dei database non è disponibile, l'intera query non riesce. Se si prevede di eseguire query su centinaia o migliaia di database contemporaneamente, assicurarsi che nell'applicazione client sia incorporata una logica di ripetizione dei tentativi oppure usare i processi elastici ed eseguire query su subset di database più piccoli, consolidando i risultati di ogni query in un'unica destinazione.
Query T-SQL
Dopo avere definito le origini dati esterne e le tabelle esterne, è possibile usare le normali stringhe di connessione di SQL Server per connettersi ai database in cui sono state definite le tabelle esterne. È quindi possibile eseguire le istruzioni T-SQL sulle tabelle esterne in tale connessioni con le limitazioni illustrate di seguito. Per altre informazioni ed esempi di query T-SQL, vedere gli argomenti della documentazione relativi al partizionamento orizzontale e al partizionamento verticale.
Connettività per gli strumenti
È possibile usare le normali stringhe di connessione di SQL Server per connettere le applicazioni e gli strumenti di Business Intelligence o di integrazione dei dati ai database con tabelle esterne. Assicurarsi che SQL Server sia supportato come origine dati per lo strumento. Dopo la connessione, fare riferimento al database elastico sottoposto a query e alle tabelle esterne in tale database in modo analogo a qualsiasi altro database di SQL Server a cui ci si connette con lo strumento specifico.
Importante
Le query elastiche sono supportate solo per connessioni con l'autenticazione di SQL Server.
Costo
Le query elastiche sono incluse nei costi di Database SQL di Azure. Sono supportate le topologie in cui i database remoti si trovano in un data center diverso rispetto all'endpoint delle query elastiche, ma per i dati in uscita dai database remoti vengono addebitate le normali tariffe di Azure.
Limiti dell'anteprima
- L'esecuzione della prima query elastica può richiedere alcuni minuti su risorse più piccole e con il livello di servizio standard o per utilizzo generico. Questo intervallo di tempo è necessario per caricare le funzionalità delle query elastiche. Le prestazioni di caricamento risultano migliori nei livelli di servizio più elevati e con dimensioni di calcolo maggiori.
- La creazione di script di origini dati esterne o tabelle esterne da SSMS o SSDT non è ancora supportata.
- L'importazione/esportazione per Database SQL non supporta ancora origini dati esterne e tabelle esterne. Se è necessario usare l'importazione/esportazione, eliminare questi oggetti prima dell'esportazione e quindi crearli di nuovo dopo l'importazione.
- La query elastica supporta attualmente solo l'accesso in sola lettura alle tabelle esterne. È tuttavia possibile usare la funzionalità Transact-SQL completa nel database in cui viene definita la tabella esterna. Ciò può risultare utile, tra l’altro, per rendere permanenti i risultati temporanei usando, ad esempio, SELECT <column_list> INTO <local_table>, oppure per definire stored procedure nel database sottoposto a query elastiche che fanno riferimento a tabelle esterne.
- Ad eccezione di nvarchar(max), i tipi LOB (inclusi i tipi spaziali) non sono supportati nelle definizioni di tabelle esterne. Come soluzione alternativa, è possibile creare una visualizzazione nel database remoto che esegue il cast del tipo LOB in nvarchar(max), definire una tabella esterna sulla visualizzazione invece della tabella di base e quindi eseguirne di nuovo il cast nel tipo LOB originale nelle query.
- Le colonne del tipo di dati nvarchar(max) nel set di risultati disattivano le tecniche di invio in batch avanzate usate nell'implementazione di query elastiche e possono influire sulle prestazioni della query per un ordine di grandezza o addirittura due ordini di grandezza in casi d'uso non canonici in cui grandi quantità di dati non aggregati vengono trasferiti come risultato della query.
- Le statistiche di colonna sulle tabelle esterne non sono attualmente supportate. Le statistiche di tabella sono supportate ma devono essere create manualmente.
- I cursori non sono supportati per le tabelle esterne nel database SQL di Azure.
- Le query elastiche funzionano solo con Database SQL di Azure. Non è possibile usarle per eseguire query su un'istanza di SQL Server.
- I collegamenti privati non sono attualmente supportati con la query elastica per i database usati come destinazioni per origini dati esterne.
Condividere il feedback
Per condividere feedback sulla propria esperienza con le query elastiche, usare i forum MSDN o Stack Overflow. Siamo interessati a tutti i tipi di commenti e suggerimenti relativi al servizio (difetti, bordi approssimativo, gap di funzionalità).
Passaggi successivi
- Per un'esercitazione sul partizionamento verticale, vedere Introduzione alle query tra database (partizionamento verticale).
- Per le query di esempio e sintassi per i dati con partizionamento verticale, vedere Eseguire query su dati con partizionamento verticale
- Per un'esercitazione sul partizionamento orizzontale, vedere la guida introduttiva alle query elastiche per il partizionamento orizzontale.
- Per le query di esempio e sintassi per i dati con partizionamento orizzontale, vedere Eseguire query su dati con partizionamento orizzontale
- Vedere sp_execute _remote per una stored procedure che esegue un'istruzione Transact-SQL su un singolo database SQL di Azure remoto o un set di database che fungono da partizioni in uno schema di partizionamento orizzontale.