Panoramica delle query elastiche del database SQL di Azure (anteprima)
Si applica a:Database SQL di Azure
La funzionalità di query elastica (in anteprima) consente di eseguire una query Transact-SQL (T-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 durante la creazione di report, l'uso di strumenti commerciali di business intelligence o di integrazione dei dati o 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 più database in un livello 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 chiamato anche sharding. 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 in cui viene trasferita una grande quantità di dati 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
È necessario disporre dell'autorizzazione ALTER ANY EXTERNAL DATA SOURCE
. Questa autorizzazione è inclusa nell'autorizzazione ALTER DATABASE
.
ALTER ANY EXTERNAL DATA SOURCE
sono necessarie autorizzazioni per fare riferimento all'origine dati sottostante.
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 ampi.
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 EXTERNAL DATA SOURCE
mydatasource
di tipoRDBMS
CREATE EXTERNAL TABLE
mytable
Dopo aver eseguito le 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 sufficienti per gestire il numero previsto di richieste di accesso/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.
CREA EXTERNAL DATA SOURCE
mydatasource
di tipoSHARD_MAP_MANAGER
.CREATE EXTERNAL TABLE
mytable
Dopo aver eseguito questi passaggi, è possibile accedere alla tabella partizionata orizzontalmente 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 ha esito negativo. 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 istruzioni T-SQL sulle tabelle esterne in tale connessione con le limitazioni descritte più avanti in questo articolo. Puoi trovare ulteriori informazioni ed esempi di query T-SQL negli articoli della documentazione per il partizionamento orizzontale e per il 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. Le topologie in cui i database remoti si trovano in un data center diverso rispetto all'endpoint di query elastico sono supportate, ma i dati in uscita dai database remoti vengono addebitati regolarmente 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 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ò essere utile, ad esempio, per mantenere i risultati temporanei usando
SELECT <column_list> INTO <local_table>
, oppure per definire stored procedure nel database di query elastico 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 vista nel database remoto che converte il tipo LOB in nvarchar(max), definire la tabella esterna sulla vista anziché sulla tabella di base e quindi riconvertirlo nel tipo LOB originale nelle query.
Le colonne di tipo dati nvarchar(max) nel set di risultati disabilitano le tecniche di raggruppamento avanzate utilizzate nell'implementazione di Elastic Query. Questo potrebbe influire significativamente sulle prestazioni della query, alterandole di un ordine di grandezza o addirittura di due ordini di grandezza, specialmente nei casi d'uso non canonici in cui viene trasferita una grande quantità di dati non aggregati 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 usarlo per eseguire query su un'istanza di SQL Server, un'istanza gestita di SQL di Azure o un database SQL di Infrastruttura.
I collegamenti privati non sono attualmente supportati con la query elastica per i database usati come destinazioni per origini dati esterne.
Contenuto correlato
- Inizia con le query cross-database (partizionamento verticale) (anteprima)
- Query tra database cloud con schemi diversi (in anteprima)
- Report tra database cloud con scalabilità orizzontale (anteprima)
- Creazione di report tra database cloud con scalabilità orizzontale (anteprima)
-
sp_execute_remote (database SQL di Azure)