Funzionalità Transact-SQL supportate in Azure Synapse SQL

Azure Synapse SQL è un servizio di analisi di Big Data che consente di eseguire query e di analizzare i dati tramite il linguaggio T-SQL. Per l'analisi dei dati, è possibile usare il dialetto standard compatibile con ANSI del linguaggio SQL usato in SQL Server e in Database SQL di Azure.

Il linguaggio Transact-SQL usato nel pool SQL serverless e nel modello dedicato può fare riferimento a oggetti diversi e presenta alcune differenze nel set di funzionalità supportate. Questa pagina illustra le differenze generali del linguaggio Transact-SQL tra i modelli di consumo di Synapse SQL.

Oggetti di database

I modelli di consumo in Synapse SQL consentono di usare oggetti di database diversi. Il confronto dei tipi di oggetto supportati è illustrato nella tabella seguente:

Oggetto Dedicato Senza server
Tabelle No, le tabelle nel database non sono supportate. Il pool SQL serverless può eseguire query solo su tabelle esterne che fanno riferimento ai dati archiviati in Azure Data Lake Storage o Dataverse.
Visualizzazioni . Le viste possono usare gli elementi del linguaggio di query disponibili nel modello dedicato. , è possibile creare viste su tabelle esterne, query con la funzione OPENROWSET e altre viste. Le viste possono usare gli elementi del linguaggio di query disponibili nel modello serverless.
Schemi , gli schemi sono supportati. Usare gli schemi per isolare tenant diversi e inserire le tabelle in base agli schemi.
Tabelle temporanee È possibile usare le tabelle temporanee solo per archiviare alcune informazioni di viste di sistema, valori letterali o da altre tabelle temporanee. Sulla tabella temporanea è supportato anche UPDATE/DELETE. È possibile unire tabelle temporanee con viste di sistema. Non è possibile selezionare dati da una tabella esterna per inserirli in una tabella temporanea o unire una tabella temporanea a una tabella esterna: queste operazioni non riusciranno perché i dati esterni e le tabelle temporanee non possono essere inseriti nella stessa query.
Routine definite dall'utente Sì, le stored procedure possono essere inserite in qualsiasi database utente (non nel database master). Le routine possono semplicemente leggere dati esterni e usare elementi del linguaggio di query disponibili nel pool serverless.
Funzioni definite dall'utente Sì, sono supportate solo le funzioni con valori di tabella inline. Le funzioni scalari definite dall'utente non sono supportate.
Trigger No No, i pool SQL serverless non consentono la modifica dei dati, quindi i trigger non possono reagire alle modifiche ai dati.
Tabelle esterne . Vedere i formati di dati supportati. Sì, le tabelle esterne sono disponibili e possono essere usate per leggere i dati da Azure Data Lake Storage o Dataverse. Vedere i formati di dati supportati.
Memorizzazione nella cache delle query Sì, più modalità (memorizzazione nella cache basata su SSD, in memoria, memorizzazione nella cache del set di risultati). Sono inoltre supportate le viste materializzate. No, nella cache vengono memorizzate solo le statistiche dei file.
Memorizzazione nella cache dei set di risultati No, i risultati della query non vengono memorizzati nella cache. Nella cache vengono memorizzate solo le statistiche dei file.
Viste materializzate No, le viste materializzate non sono supportate nei pool SQL serverless.
Variabili di tabella No, usare tabelle temporanee No, le variabili di tabella non sono supportate.
Distribuzione di tabelle No, le distribuzioni di tabelle non sono supportate.
Indicizzazione di tabelle No, gli indici non sono supportati.
Partizionamento delle tabelle . Le tabelle esterne non supportano il partizionamento. È possibile partizionare i file usando la struttura di cartelle della partizione Hive e creare tabelle partizionate in Spark. Il partizionamento di Spark verrà sincronizzato con il pool serverless. Se non si usa Spark, è possibile partizionare i file nella struttura di cartelle e creare viste partizionate nella struttura di partizione di cartelle, ma non è possibile creare tabelle esterne nelle cartelle partizionate.
Statistica Sì, le statistiche vengono create in file esterni.
Gestione del carico di lavoro, classi di risorse e controllo della concorrenza Sì, vedere gestione del carico di lavoro, classi di risorse e controllo della concorrenza. No, non è possibile gestire le risorse assegnate alle query. Il pool SQL serverless gestisce automaticamente le risorse.
Controllo dei costi Sì, tramite azioni di aumento e riduzione. Sì, è possibile limitare l'uso giornaliero, settimanale o mensile del pool serverless usando il portale di Azure o la routine T-SQL.

Linguaggio di query

I linguaggi di query usati in Synapse SQL possono supportare funzionalità diverse in base al modello di consumo. La tabella seguente illustra le differenze più importanti del linguaggio di query nei dialetti Transact-SQL:

Istruzione Dedicato Senza server
Istruzione SELECT Sì. L'istruzione SELECT è supportata, ma alcune clausole di query Transact-SQL, ad esempio FOR XML/FOR JSON, MATCH, OFFSET/FETCH non sono supportate. Sì, l'istruzione SELECT è supportata, ma alcune clausole di query Transact-SQL come FOR XML, MATCH, PREDICT, GROUPNG SETS e gli hint per le query non sono supportati.
Istruzione INSERT No. Caricare nuovi dati in Data Lake usando Spark o altri strumenti. Usare Azure Cosmos DB con l'archiviazione analitica per carichi di lavoro altamente transazionali. È possibile usare CETAS per creare una tabella esterna e inserire dati.
Istruzione UPDATE No, gli aggiornamenti dei dati Parquet/CSV con Spark e le modifiche saranno automaticamente disponibili nel pool serverless. Usare Azure Cosmos DB con l'archiviazione analitica per carichi di lavoro altamente transazionali.
Istruzione DELETE No, le eliminazioni dei dati Parquet/CSV con Spark e le modifiche saranno automaticamente disponibili nel pool serverless. Usare Azure Cosmos DB con l'archiviazione analitica per carichi di lavoro altamente transazionali.
Istruzione merge Sì (anteprima) No, le unioni dei dati Parquet/CSV con Spark e le modifiche saranno automaticamente disponibili nel pool serverless.
Istruzione CTAS No, l'istruzione CREATE TABLE AS SELECT (CTAS) non è supportata nel pool SQL serverless.
Istruzione CETAS Sì, è possibile eseguire il caricamento iniziale in una tabella esterna con CETAS. Sì, è possibile eseguire il caricamento iniziale in una tabella esterna con CETAS. CETAS supporta i formati di output Parquet e CSV.
Transazioni Sì, le transazioni sono applicabili solo agli oggetti metadati.
Etichette No, le etichette non sono supportate nei pool SQL serverless.
Caricamento dati Sì. L'utilità preferita è l'istruzione COPY, ma il sistema supporta sia il caricamento BULK (BCP) sia CETAS per il caricamento dei dati. No, non è possibile caricare i dati nel pool SQL serverless perché i dati vengono archiviati nell'archiviazione esterna. È possibile caricare inizialmente i dati in una tabella esterna con l'istruzione CETAS.
Esportazione dei dati Sì. Tramite CETAS. Sì. È possibile esportare dati da una risorsa di archiviazione esterna (Azure Data Lake, Dataverse, Azure Cosmos DB) in Azure Data Lake usando CETAS.
Tipi Sì, tutti i tipi Transact-SQL ad eccezione di cursor, hierarchyid, ntext, text e image, rowversion, tipi spaziali, sql_variant e xml. Sì, sono supportati tutti i tipi Transact-SQL ad eccezione di cursor, hierarchyid, ntext, text e image, rowversion, tipi spaziali, sql_variant, xml e il tipo Table. Per informazioni su come eseguire il mapping dei tipi di colonna Parquet nei tipi SQL, vedere qui.
Query tra database No Sì, le query tra database e i riferimenti a nomi in tre parti sono supportati, inclusa l'istruzione USE. Le query possono fare riferimento ai database SQL serverless o ai database Lake nella stessa area di lavoro. Le query tra aree di lavoro non sono supportate.
Funzioni predefinite/di sistema (analisi) Sì, tutte le funzioni Transact-SQL di analisi, conversione, data e ora, logiche, matematiche, ad eccezione di CHOOSE e PARSE Sì, sono supportate tutte le funzioni Transact-SQL di analisi, conversione, data e ora, logiche e matematiche.
Funzioni predefinite/di sistema (stringa) Sì. Tutte le funzioni Transact-SQL di tipo stringa, JSON e regole di confronto, ad eccezione di STRING_ESCAPE e TRANSLATE Sì. Sono supportate tutte le funzioni Transact-SQL stringa, JSON e delle regole di confronto.
Funzioni predefinite/di sistema (crittografia) In parte HASHBYTES è l'unica funzione di crittografia supportata nei pool SQL serverless.
Funzioni predefinite/con valori di tabella di sistema Sì, le funzioni Transact-SQL per i set di righe, ad eccezione di OPENXML, OPENDATASOURCE, OPENQUERY e OPENROWSET Sì, sono supportate tutte le funzioni Transact-SQL per i set di righe, ad eccezione di OPENXML, OPENDATASOURCE e OPENQUERY.
Aggregazioni predefinite/di sistema Aggregazioni predefinite di Transact-SQL, ad eccezione di CHECKSUM_AGG e GROUPING_ID Sì, sono supportate tutte le aggregazioni predefinite di Transact-SQL.
Operatori Sì, tutti gli operatori Transact-SQL, ad eccezione di !> e !<. Sì, sono supportati tutti gli operatori Transact-SQL.
Controllo di flusso Sì. Tutte le istruzioni Transact-SQL per il controllo di flusso, ad eccezione di CONTINUE, GOTO, RETURN, USE e WAITFOR Sì. Sono supportate tutte le istruzioni Transact-SQL per il controllo del flusso. La query SELECT nella condizione WHILE (...) non è supportata.
Istruzioni DDL (CREATE, ALTER, DROP) Sì. Tutte le istruzioni DDL Transact-SQL applicabili ai tipi di oggetto supportati Sì, sono supportate tutte le istruzioni DDL Transact-SQL applicabili ai tipi di oggetto supportati.

Sicurezza

I pool Synapse SQL consentono di usare le funzionalità di sicurezza predefinite per proteggere i dati e controllare l'accesso. Nella tabella seguente vengono confrontate le differenze generali tra i modelli di consumo di Synapse SQL.

Funzionalità Dedicato Senza server
Account di accesso N/A (sono supportati solo gli utenti contenuti nei database) Sì, gli account di accesso Microsoft Entra ID e SQL a livello di server sono supportati.
Utenti N/A (sono supportati solo gli utenti contenuti nei database) Sì, gli utenti del database sono supportati.
Utenti indipendenti Sì. Nota: un solo utente di Microsoft Entra può essere un amministratore senza restrizioni. No, gli utenti contenuti non sono supportati.
Autenticazione con nome utente e password SQL Sì, gli utenti possono accedere al pool SQL serverless usando i nomi utente e le password.
Autenticazione Microsoft Entra Sì, gli utenti di Microsoft Entra Sì, gli account di accesso e gli utenti di Microsoft Entra possono accedere ai pool SQL serverless con le identità Microsoft Entra.
Autenticazione pass-through di Microsoft Entra per l'archiviazione Sì, l'autenticazione pass-through di Microsoft Entra è applicabile agli account di accesso di Microsoft Entra. L'identità dell'utente di Microsoft Entra viene passata all'archiviazione se non viene specificata una credenziale. L'autenticazione pass-through di Microsoft Entra non è disponibile per gli utenti SQL.
Autenticazione con token di firma di accesso condiviso (SAS) per l'archiviazione No Sì, usando DATABASE SCOPED CREDENTIAL con il token di firma di accesso condiviso in EXTERNAL DATA SOURCE o CREDENTIAL a livello di istanza con la firma di accesso condiviso.
Autenticazione tramite chiave di accesso alle risorse di archiviazione Sì, tramite DATABASE SCOPED CREDENTIAL in EXTERNAL DATA SOURCE No, usare il token di firma di accesso condiviso invece della chiave di accesso all'archiviazione.
Autenticazione tramite Identità gestita per l'archiviazione Sì, tramite credenziali dell'identità del servizio gestita Sì, la query può accedere all'archiviazione usando le credenziali dell'identità gestita dell'area di lavoro.
Autenticazione con identità/entità servizio (SPN) dell'applicazione per l'archiviazione Sì, è possibile creare credenziali con un ID applicazione dell'entità servizio che verrà usato per l'autenticazione nell'archiviazione.
Ruoli del server No Sì, sono supportati sysadmin, public e altri ruoli del server.
CREDENZIALI A LIVELLO DI SERVER No Sì, le credenziali a livello di server vengono usate dalla funzione OPENROWSET che non usa l'origine dati esplicita.
Autorizzazioni a livello di server No Sì, ad esempio, CONNECT ANY DATABASE e SELECT ALL USER SECURABLES consentono a un utente di leggere dati da qualsiasi database.
ruoli del database Sì, è possibile usare i ruoli db_owner, db_datareader e db_ddladmin.
DATABASE SCOPED CREDENTIAL Sì, sono usate nelle origini dati esterne. Sì, le credenziali con ambito database possono essere usate in origini dati esterne per definire il metodo di autenticazione dell'archiviazione.
Autorizzazioni a livello di database Sì, è possibile concedere, negare o revocare le autorizzazioni per gli oggetti di database.
Autorizzazioni a livello di schema Sì, inclusa la possibilità di concedere, negare e revocare le autorizzazioni a utenti/account di accesso per lo schema Sì, è possibile specificare autorizzazioni a livello di schema, inclusa la possibilità di CONCEDERE, NEGARE e REVOCARE le autorizzazioni a utenti/account di accesso per lo schema.
Autorizzazioni a livello di oggetto Sì, inclusa la possibilità di concedere, negare e revocare le autorizzazioni agli utenti Sì, è possibile CONCEDERE, NEGARE e REVOCARE le autorizzazioni a utenti/account di accesso per gli oggetti di sistema supportati.
Autorizzazioni - Sicurezza a livello di colonna La sicurezza a livello di colonna è supportata nei pool SQL serverless per le viste e non per le tabelle esterne. Nel caso delle tabelle esterne è possibile creare una vista logica basata sulla tabella esterna e quindi applicare la sicurezza a livello di colonna.
Sicurezza a livello di riga No, non è disponibile alcun supporto predefinito per la sicurezza a livello di riga. Usare viste personalizzate come soluzione alternativa.
Maschera dati No, la maschera dati predefinita non è supportata nei pool SQL serverless. Usare viste SQL wrapper che mascherano in modo esplicito alcune colonne come soluzione alternativa.
Funzioni di sicurezza e identità predefinite/di sistema Alcune funzioni e operatori di sicurezza Transact-SQL: CURRENT_USER, HAS_DBACCESS, IS_MEMBER, IS_ROLEMEMBER, SESSION_USER, SUSER_NAME, SUSER_SNAME, SYSTEM_USER, USER, USER_NAME, EXECUTE AS, OPEN/CLOSE MASTER KEY Sono supportate alcune funzioni e operatori di sicurezza Transact-SQL: CURRENT_USER, HAS_DBACCESS, HAS_PERMS_BY_NAME, IS_MEMBER, IS_ROLEMEMBER, IS_SRVROLEMEMBER, SESSION_USER, SESSION_CONTEXT, SUSER_NAME, SUSER_SNAME, SYSTEM_USER, USER, USER_NAME, EXECUTE AS e REVERT. Le funzioni di sicurezza non possono essere usate per eseguire query sui dati esterni. Archiviare il risultato in una variabile che può essere usata nella query.
Transparent Data Encryption (TDE) No, Transparent Data Encryption non è supportato.
Individuazione dati e classificazione No, l'individuazione dati e la classificazione non sono supportate.
Valutazione della vulnerabilità No, la valutazione della vulnerabilità non è disponibile.
Advanced Threat Protection No, Advanced Threat Protection non è supportato.
Controllo Sì, il controllo è supportato nei pool SQL serverless.
Regole del firewall Sì, le regole del firewall possono essere impostate nell'endpoint SQL serverless.
Endpoint privato Sì, l'endpoint privato può essere impostato nel pool SQL serverless.

Il pool SQL dedicato e il pool SQL serverless usano il linguaggio Transact-SQL per eseguire query sui dati. Per informazioni dettagliate sulle differenze, vedere le informazioni di riferimento sul linguaggio Transact-SQL.

Funzionalità della piattaforma

Funzionalità Dedicato Senza server
Scalabilità Il pool SQL serverless viene ridimensionato automaticamente a seconda del carico di lavoro.
Sospensione/ripresa Il pool SQL serverless viene disattivato automaticamente quando non viene usato e attivato quando necessario. Non è richiesta alcuna azione da parte dell'utente.
Backup del database No. I dati vengono archiviati in sistemi esterni (ADLS, Cosmos DB), quindi assicurarsi di eseguire backup dei dati nell'origine. Assicurarsi di usare i metadati SQL di archiviazione (tabella, vista, definizioni di routine e autorizzazioni utente) nel controllo del codice sorgente. Le definizioni di tabella nel database di Lake vengono archiviate nei metadati di Spark, quindi assicurarsi di mantenere anche le definizioni di tabella di Spark nel controllo del codice sorgente.
Ripristino del database No. I dati vengono archiviati in sistemi esterni (ADLS, Cosmos DB), quindi è necessario ripristinare i sistemi di origine per trasferire i dati. Assicurarsi che i metadati SQL (tabella, vista, definizioni di routine e autorizzazioni utente) siano presenti nel controllo del codice sorgente in modo da poter ricreare gli oggetti SQL. Le definizioni di tabella nel database di Lake vengono archiviate nei metadati di Spark, quindi assicurarsi di mantenere anche le definizioni di tabella di Spark nel controllo del codice sorgente.

Strumenti

È possibile usare vari strumenti per connettersi a Synapse SQL per eseguire query sui dati.

Tool Dedicato Senza server
Synapse Studio Sì, script SQL Sì, gli script SQL possono essere usati in Synapse Studio. Usare SQL Server Management Studio o Azure Data Studio invece di Synapse Studio se come risultato viene restituita una grande quantità di dati.
Power BI Sì, è possibile usare Power BI per creare report sul pool SQL serverless. Per la creazione di report è consigliata la modalità di importazione.
Azure Analysis Service Sì, è possibile caricare i dati in Azure Analysis Service con il pool SQL serverless.
Azure Data Studio Sì, è possibile usare Azure Data Studio (versione 1.18.0 o successiva) per eseguire query su un pool SQL serverless. Gli script SQL e i notebook SQL sono supportati.
SQL Server Management Studio (SSMS) Sì, è possibile usare SQL Server Management Studio (versione 18.5 o successiva) per eseguire query su un pool SQL serverless. SQL Server Management Studio mostra solo gli oggetti disponibili nei pool SQL serverless.

Nota

È possibile usare SSMS per connettersi al pool SQL serverless ed eseguire query. SSMS è parzialmente supportato a partire dalla versione 18.5, è possibile usarlo solo per connettersi ed eseguire query.

La maggior parte delle applicazioni che usano il linguaggio Transact-SQL standard possono eseguire query sia sui modelli di consumo dedicati che serverless di Synapse SQL.

Accesso ai dati

I dati analizzati possono essere archiviati in vari tipi di archiviazione. La tabella seguente elenca tutte le opzioni di archiviazione disponibili:

Tipo di archiviazione Dedicato Senza server
Archiviazione interna No, i dati vengono inseriti in Azure Data Lake o nell'archivio analitico di Azure Cosmos DB.
Azure Data Lake v2 Sì, è possibile usare tabelle esterne e la funzione OPENROWSET per leggere dati da Azure Data Lake Storage. Informazioni su come configurare il controllo di accesso.
Archiviazione BLOB di Azure Sì, è possibile usare tabelle esterne e la funzione OPENROWSET per leggere i dati da Archiviazione BLOB di Azure. Informazioni su come configurare il controllo di accesso.
Azure SQL/SQL Server (remoto) No No, il pool SQL serverless non può fare riferimento al database SQL di Azure. È possibile fare riferimento ai pool SQL serverless da Azure SQL usando query elastiche o server collegati.
Dataverse No, è possibile caricare i dati di Azure Cosmos DB in un pool dedicato usando Collegamento ad Azure Synapse nel pool SQL serverless (tramite ADLS) o Spark. Sì, è possibile leggere le tabelle di Dataverse usando Collegamento ad Azure Synapse per Dataverse con Azure Data Lake.
Archiviazione transazionale di Azure Cosmos DB No No, non è possibile accedere ai contenitori di Azure Cosmos DB per aggiornare i dati o leggere i dati dall'archiviazione transazionale di Azure Cosmos DB. Usare i pool di Spark per aggiornare l'archiviazione transazionale di Azure Cosmos DB.
Archiviazione analitica di Azure Cosmos DB No, è possibile caricare i dati di Azure Cosmos DB in un pool dedicato usando Collegamento ad Azure Synapse nel pool SQL serverless (tramite Azure Data Lake Storage), Azure Data Factory, Spark o altri strumenti di caricamento. Sì, è possibile eseguire query sull'archiviazione analitica di Azure Cosmos DB usando Collegamento ad Azure Synapse.
Tabelle di Apache Spark (nell'area di lavoro) No Sì, il pool serverless può leggere tabelle PARQUET e CSV usando la sincronizzazione dei metadati.
Tabelle di Apache Spark (remoto) No No, il pool serverless può accedere solo alle tabelle PARQUET e CSV create nei pool di Apache Spark nella stessa area di lavoro di Synapse. Tuttavia, è possibile creare manualmente una tabella esterna che faccia riferimento alla posizione della tabella Spark esterna.
Tabelle di Databricks (remoto) No No, il pool serverless può accedere solo alle tabelle PARQUET e CSV create nei pool di Apache Spark nella stessa area di lavoro di Synapse. Tuttavia, è possibile creare manualmente una tabella esterna che faccia riferimento alla posizione della tabella Databricks.

Formati di dati

I dati analizzati possono essere archiviati in vari formati di archiviazione. La tabella seguente elenca tutti i formati di dati disponibili che è possibile analizzare:

Formato dati Dedicato Senza server
Delimitato Sì, è possibile eseguire la query sui file delimitati.
CSV Sì, (i delimitatori a più caratteri non sono supportati) Sì, è possibile eseguire la query sui file CSV. Per migliorare le prestazioni, usare PARSER_VERSION 2.0 che offre un'analisi più veloce. Se si accodano righe ai file CSV, assicurarsi di eseguire query sui file come accodabili.
Parquet Sì, è possibile eseguire query sui file Parquet, inclusi i file con tipi nidificati.
Hive ORC No, i pool SQL serverless non leggono il formato ORC di Hive.
Hive RC No, i pool SQL serverless non leggono il formato RC di Hive.
JSON Sì, è possibile eseguire query sui file JSON usando il formato di testo delimitato e le funzioni JSON di T-SQL.
Avro No No, i pool SQL serverless non leggono il formato Avro.
Delta Lake No Sì, è possibile eseguire query sui file Delta Lake, inclusi i file con tipi nidificati.
Common Data Model (CDM) No No, i pool SQL serverless non leggono dati archiviati con Common Data Model.

Passaggi successivi

Per altre informazioni sulle procedure consigliate per il pool SQL dedicato e il pool SQL serverless, vedere gli articoli seguenti: