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 non Microsoft (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

Screenshot della query Elasticsearch usata nel livello dati scalato.

Gli scenari dei clienti per le query elastiche sono caratterizzati dalle seguenti topologie:

  • 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 - Sharding (Topologia 2): i dati vengono partizionati orizzontalmente per distribuire le righe in un'infrastruttura dati scalabile orizzontalmente. 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 utilizzata per eseguire interrogazioni o compilare report su molti shard. Gli shards sono generalmente 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 - Utilizzo della query elastica per interrogare i dati di riferimento

Screenshot del partizionamento verticale - Uso di query elastiche per interrogare i 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 aver eseguito una volta la configurazione, l'accesso a una tabella remota sarà semplice come fare riferimento a una tabella locale dalle query T-SQL o dagli strumenti BI. 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

Screenshot del partizionamento verticale: uso della query elastica per eseguire query su 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:

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 - Sharding

Importante

La query elastica in modalità gestione mappe di shard (partizionamento orizzontale), utilizzando il tipo EXTERNAL DATA SOURCESHARD_MAP_MANAGER, giungerà a fine supporto il 31 marzo 2027. Dopo questa data, i carichi di lavoro esistenti continueranno a funzionare, ma non riceveranno più supporto e la creazione di nuove origini dati esterne di tipo SHARD_MAP_MANAGER non sarà più possibile. Per le opzioni di migrazione, vedere Guida alla migrazione dalla modalità di gestione guidata delle mappe delle partizioni delle query elastiche.

L'uso delle query elastiche per eseguire attività di reportistica 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 utilizzata una sola mappa di shard e un database dedicato con capacità di query elastiche (nodo principale) funge da punto di ingresso per le query di reportistica. L'accesso alla mappa partizioni è necessario solo per questo database dedicato. La Figura 4 illustra questa topologia e la relativa configurazione con il database per query elastiche e la mappa di partizione. 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

Screenshot del partizionamento orizzontale: utilizzo di query elastiche per la creazione di report su livelli di dati shardati.

Nota

Il database di query elastica (nodo head) può essere un database separato o lo stesso database che ospita la mappa di shard. 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:

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 di 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 .

Fonti di dati esterne sicure

Una LOCATION fonte di dati esterna può identificare un endpoint SQL tramite un nome di dominio completamente qualificato (FQDN) o un indirizzo IP, incluso un endpoint che non è un server logico database SQL di Azure. Quando viene eseguita una query elastica, invia informazioni di autenticazione, testo della query, parametri e qualsiasi dato trasferito dalla query all'endpoint configurato. Configura sorgenti di dati esterne solo per endpoint di cui la tua organizzazione si fida.

Solo i principali con ALTER ANY EXTERNAL DATA SOURCE permesso possono creare o modificare una fonte di dati esterna. Limitare questo permesso agli amministratori di database che ne hanno bisogno e revisionare periodicamente le fonti di dati esterne interrogando sys.external_data_sources.

Come controllo di rete separato, far sì che un amministratore di rete limiti la rete in uscita e consenta solo le destinazioni FQDN approvate per il server logico. Utilizzare un FQDN invece di un indirizzo IP in ogni sorgente dati esterna affinché la sua destinazione possa essere esplicitamente indicata. Separare la configurazione del database dall'approvazione di rete implementa la separazione dei compiti e impedisce a un amministratore di database di stabilire un percorso di comunicazione non approvato senza una modifica indipendente della politica di rete.

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, consultare il database elastico e le tabelle esterne in esso contenute esattamente come faresti con qualsiasi altro database SQL Server a cui ci si connette con il proprio strumento.

Importante

Le query elastiche sono supportate solo per connessioni con l'autenticazione di SQL Server.

Costo

La query elastica è inclusa nel costo 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.

  • Gli scenari di query elastica documentati e supportati in questo articolo utilizzano database SQL di Azure come fonte dati remota. La sintassi della sorgente dati esterna non si limita LOCATION a un server logico database SQL di Azure. Proteggi qualsiasi destinazione configurata come descritto in Fonti di dati esterne sicure.

  • I collegamenti privati non sono attualmente supportati con la query elastica per i database usati come destinazioni per origini dati esterne.