Transact-SQL-funktioner som stöds i Azure Synapse SQL

Azure Synapse SQL är en analystjänst för stordata som gör att du kan köra frågor mot och analysera dina data med hjälp av T-SQL-språket. Du kan använda ansi-kompatibel standarddialekt för SQL-språk som används på SQL Server och Azure SQL Database för dataanalys.

Transact-SQL-språk används i serverlös SQL-pool och dedikerad modell kan referera till olika objekt och har vissa skillnader i uppsättningen funktioner som stöds. På den här sidan hittar du skillnader i transact-SQL-språk på hög nivå mellan förbrukningsmodeller i Synapse SQL.

Databasobjekt

Med förbrukningsmodeller i Synapse SQL kan du använda olika databasobjekt. Jämförelsen av objekttyper som stöds visas i följande tabell:

Objekt Dedikerad Utan server
Tabeller Ja Nej, tabellerna i databasen stöds inte. Serverlös SQL-pool kan endast köra frågor mot externa tabeller som refererar till data som lagras i Azure Data Lake Storage eller Dataverse.
Vyer Ja. Vyer kan använda frågespråkelement som är tillgängliga i en dedikerad modell. Ja, du kan skapa vyer över externa tabeller, frågorna med funktionen OPENROWSET och andra vyer. Vyer kan använda frågespråkelement som är tillgängliga i en serverlös modell.
Scheman Ja Ja, scheman stöds. Använd scheman för att isolera olika klienter och placera deras tabeller per scheman.
Temporary tables (Temporära tabeller) Ja Temporära tabeller kan användas bara för att lagra viss information från systemvyer, literaler eller andra temporära tabeller. UPPDATERING/TA BORT i temporär tabell stöds också. Du kan koppla tillfälliga tabeller till systemvyerna. Du kan inte välja data från en extern tabell för att infoga dem i en tillfällig tabell eller koppla en tillfällig tabell till en extern tabell. Dessa åtgärder misslyckas eftersom externa data och temporära tabeller inte kan blandas i samma fråga.
Användardefinierade procedurer Ja Ja, lagrade procedurer kan placeras i alla användardatabaser (inte master i databasen). Procedurer kan bara läsa externa data och använda frågespråkelement som är tillgängliga i en serverlös pool.
Användardefinierade funktioner Ja Ja, endast infogade tabellvärdesfunktioner stöds. Skalära användardefinierade funktioner stöds inte.
Utlösare Nej Nej, serverlösa SQL-pooler tillåter inte att data ändras, så utlösarna kan inte reagera på dataändringar.
Externa tabeller Ja. Se dataformat som stöds. Ja, externa tabeller är tillgängliga och kan användas för att läsa data från Azure Data Lake Storage eller Dataverse. Se de dataformat som stöds.
Cachelagringsfrågor Ja, flera formulär (SSD-baserad cachelagring, minnesintern cachelagring och cachelagring av resultatuppsättningar). Dessutom stöds materialiserad vy. Nej, endast filstatistiken cachelagras.
Cachelagring av resultatuppsättning Ja Nej, frågeresultatet cachelagras inte. Endast filstatistiken cachelagras.
Materialiserade vyer Ja Nej, de materialiserade vyerna stöds inte i de serverlösa SQL-poolerna.
Tabellvariabler Nej, använd temporära tabeller Nej, tabellvariabler stöds inte.
Table distribution (Tabelldistribution) Ja Nej, tabelldistributioner stöds inte.
Table indexes (Tabellindex) Ja Nej, index stöds inte.
Table partitioning (Tabellpartitionering) Ja. Externa tabeller stöder inte partitionering. Du kan partitionera filer med hive-partitionsmappens struktur och skapa partitionerade tabeller i Spark. Spark-partitioneringen synkroniseras med den serverlösa poolen. Om du inte använder Spark kan du partitionera dina filer i mappstrukturen och skapa partitionerade vyer på mapppartitionsstrukturen, men de externa tabellerna kan inte skapas på partitionerade mappar.
Statistik Ja Ja, statistik skapas för externa filer.
Arbetsbelastningshantering, resursklasser och samtidighetskontroll Ja, se arbetsbelastningshantering, resursklasser och samtidighetskontroll. Nej, du kan inte hantera de resurser som har tilldelats till frågorna. Den serverlösa SQL-poolen hanterar automatiskt resurserna.
Kostnadskontroll Ja, med hjälp av uppskalnings- och nedskalningsåtgärder. Ja, du kan begränsa daglig, veckovis eller månatlig användning av serverlös pool med hjälp av Azure-portalen eller T-SQL-proceduren.

Frågespråk

Frågespråk som används i Synapse SQL kan ha olika funktioner som stöds beroende på förbrukningsmodell. I följande tabell beskrivs de viktigaste skillnaderna i frågespråk i Transact-SQL-dialekter:

Utdrag Dedikerad Utan server
SELECT-instruktion Ja. SELECT -instruktionen stöds, men vissa Transact-SQL-frågesatser, till exempel FOR XML/FOR JSON, MATCH, OFFSET/FETCH, stöds inte. Ja, SELECT instruktionen stöds, men vissa Transact-SQL-frågesatser som FOR XML, MATCH, PREDICT, GROUPNG SETS och frågetips stöds inte.
INSERT-instruktion Ja Nej. Ladda upp nya data till Data Lake med spark eller andra verktyg. Använd Azure Cosmos DB med analyslagringen för mycket transaktionella arbetsbelastningar. Du kan använda CETAS för att skapa en extern tabell och infoga data.
UPDATE-instruktion Ja Nej, uppdatera Parquet/CSV-data med Spark så blir ändringarna automatiskt tillgängliga i en serverlös pool. Använd Azure Cosmos DB med analyslagringen för mycket transaktionella arbetsbelastningar.
DELETE-instruktion Ja Nej, ta bort Parquet/CSV-data med Spark så blir ändringarna automatiskt tillgängliga i en serverlös pool. Använd Azure Cosmos DB med analyslagringen för mycket transaktionella arbetsbelastningar.
MERGE-instruktion Ja (förhandsversion) Nej, slå samman Parquet/CSV-data med Spark så blir ändringarna automatiskt tillgängliga i en serverlös pool.
CTAS-instruktion Ja Nej, CREATE TABLE AS SELECT-instruktionen stöds inte i den serverlösa SQL-poolen.
CETAS-instruktion Ja, du kan utföra den inledande belastningen i en extern tabell med hjälp av CETAS. Ja, du kan utföra den inledande belastningen i en extern tabell med hjälp av CETAS. CETAS stöder Parquet- och CSV-utdataformat.
Transaktioner Ja Ja, transaktioner gäller endast för metadataobjekten.
Etiketter Ja Nej, etiketter stöds inte i serverlösa SQL-pooler.
Datainläsning Ja. Det föredragna verktyget är COPY-instruktionen , men systemet stöder både BULK-inläsning (BCP) och CETAS för datainläsning. Nej, du kan inte läsa in data i den serverlösa SQL-poolen eftersom data lagras på extern lagring. Du kan först läsa in data i en extern tabell med hjälp av CETAS-instruktionen.
Dataexport Ja. Använda CETAS. Ja. Du kan exportera data från extern lagring (Azure Data Lake, Dataverse, Azure Cosmos DB) till Azure Data Lake med hjälp av CETAS.
Typer Ja, alla Transact-SQL-typer utom markör, hierarkiid, ntext, text och bild, radversion, rumsliga typer, sql_variant och xml Ja, alla Transact-SQL-typer stöds, förutom markören, hierarkin, ntext, text och bild, rowversion, spatialtyper, sql_variant, xml och tabelltyp. Se hur du mappar Parquet-kolumntyper till SQL-typer här.
Frågor mellan databaser Nej Ja, frågorna mellan databaser och referenserna för tredelade namn stöds, inklusive USE-instruktionen . Frågorna kan referera till serverlösa SQL-databaser eller Lake-databaser på samma arbetsyta. Frågor mellan arbetsytor stöds inte.
Inbyggda/systemfunktioner (analys) Ja, alla analysfunktioner för Transact-SQL, konvertering, datum och tid, logiska, matematiska funktioner utom CHOOSE och PARSE Ja, alla funktioner för transact-SQL analys, konvertering, datum och tid, logiska och matematiska funktioner stöds.
Inbyggda/systemfunktioner (sträng) Ja. Alla funktioner för Transact-SQL String, JSON och Sortering, förutom STRING_ESCAPE och TRANSLATE Ja. Alla funktioner för Transact-SQL String, JSON och Sortation stöds.
Inbyggda/systemfunktioner (kryptografi) Vissa HASHBYTES är den enda kryptografiska funktion som stöds i serverlösa SQL-pooler.
Inbyggda/systemtabellvärdesfunktioner Ja, funktionerna Transact-SQL Rowset, förutom OPENXML, OPENDATASOURCE, OPENQUERY och OPENROWSET Ja, alla Transact-SQL Rowset-funktioner stöds, förutom OPENXML, OPENDATASOURCE och OPENQUERY.
Inbyggda/systemaggregeringar Inbyggda transact-SQL-aggregeringar, förutom CHECKSUM_AGG och GROUPING_ID Ja, alla inbyggda Transact-SQL-aggregeringar stöds.
Operatorer Ja, alla Transact-SQL-operatorer utom !> och !< Ja, alla Transact-SQL-operatorer stöds.
Kontroll av flöde Ja. Alla Transact-SQL Control-of-flow-instruktioner förutom CONTINUE, GOTO, RETURN, USE och WAITFOR Ja. Alla Transact-SQL Control-of-flow-instruktioner stöds. SELECT-fråga i WHILE (...) villkor stöds inte.
DDL-instruktioner (CREATE, ALTER, DROP) Ja. Alla Transact-SQL DDL-uttryck som gäller för objekttyper som stöds Ja, alla Transact-SQL DDL-instruktioner som gäller för de objekttyper som stöds stöds.

Säkerhet

Med Synapse SQL-pooler kan du använda inbyggda säkerhetsfunktioner för att skydda dina data och kontrollera åtkomsten. I följande tabell jämförs skillnader på hög nivå mellan Synapse SQL-förbrukningsmodeller.

Funktion Dedikerad Utan server
Inloggningar N/A (endast inneslutna användare stöds i databaser) Ja, Microsoft Entra-ID och SQL-inloggningar på servernivå stöds.
Användare N/A (endast inneslutna användare stöds i databaser) Ja, databasanvändare stöds.
Inneslutna användare Ja. Obs! Endast en Microsoft Entra-användare kan vara obegränsad administratör Nej, de inneslutna användarna stöds inte.
SQL-användarnamn/lösenordsautentisering Ja Ja, användare kan komma åt en serverlös SQL-pool med sina användarnamn och lösenord.
Microsoft Entra-autentisering Ja, Microsoft Entra-användare Ja, Microsoft Entra-inloggningar och användare kan komma åt serverlösa SQL-pooler med hjälp av sina Microsoft Entra-identiteter.
Storage Microsoft Entra-genomströmningsautentisering Ja Ja, Microsoft Entra-genomströmningsautentisering gäller för Microsoft Entra-inloggningar. Microsoft Entra-användarens identitet skickas till lagringen om ingen autentiseringsuppgift har angetts. Microsoft Entra-genomströmningsautentisering är inte tillgängligt för SQL-användare.
Sas-tokenautentisering (signatur för delad åtkomst) för lagring Nej Ja, med hjälp av DATABASE SCOPED CREDENTIAL med signaturtoken för delad åtkomst i EXTERN DATAKÄLLA eller CREDENTIAL på instansnivå med signatur för delad åtkomst.
Autentisering av lagringsåtkomstnyckel Ja, använda DATABASOMFATTNINGSAUTENTISERINGSUPPGIFTER I EXTERN DATAKÄLLA Nej, använd SAS-token i stället för lagringsåtkomstnyckeln.
Lagringshanterad identitetsautentisering Ja, med hjälp av autentiseringsuppgifter för hanterad tjänstidentitet Ja, Frågan kan komma åt lagringen med hjälp av arbetsytans hanterade identitetsautentiseringsuppgifter .
SpN-autentisering (Storage Application Identity/Service Principal) Ja Ja, du kan skapa en autentiseringsuppgift med ett program-ID för tjänstens huvudnamn som ska användas för att autentisera på lagringen.
Serverroller Nej Ja, sysadmin, offentliga och andra serverroller stöds.
AUTENTISERINGSUPPGIFTER PÅ SERVERNIVÅ Nej Ja, autentiseringsuppgifterna på servernivå används av funktionen OPENROWSET som inte använder explicit datakälla.
Behörigheter – servernivå Nej Ja, till exempel CONNECT ANY DATABASE och SELECT ALL USER SECURABLES gör det möjligt för en användare att läsa data från alla databaser.
Databasroller Ja Ja, du kan använda db_owneroch db_datareader db_ddladmin roller.
DATABASOMFÅNGSBEGRÄNSADE AUTENTISERINGSUPPGIFTER Ja, används i externa datakällor. Ja, autentiseringsuppgifter med databasomfattning kan användas i externa datakällor för att definiera lagringsautentiseringsmetod.
Behörigheter – databasnivå Ja Ja, du kan bevilja, neka eller återkalla behörigheter för databasobjekten.
Behörigheter – schemanivå Ja, inklusive möjligheten att bevilja, neka och återkalla behörigheter för användare/inloggningar i schemat Ja, du kan ange behörigheter på schemanivå, inklusive möjligheten att bevilja, NEKA och ÅTERKALLA behörigheter för användare/inloggningar i schemat.
Behörigheter – objektnivå Ja, inklusive möjligheten att bevilja, NEKA och ÅTERKALLA behörigheter till användare Ja, du kan bevilja, NEKA och ÅTERKALLA behörigheter för användare/inloggningar på systemobjekten som stöds.
Behörigheter – säkerhet på kolumnnivå Ja Säkerhet på kolumnnivå stöds i serverlösa SQL-pooler för vyer och inte för externa tabeller. Om det gäller externa tabeller kan man skapa en logisk vy ovanpå den externa tabellen och än tillämpa säkerhet på kolumnnivå.
Säkerhet på radnivå Ja Nej, det finns inget inbyggt stöd för säkerhet på radnivå. Använd anpassade vyer som en lösning.
Datamaskering Ja Nej, inbyggd datamaskering stöds inte i serverlösa SQL-pooler. Använd SQL-omslutningsvyer som uttryckligen maskerar vissa kolumner som en lösning.
Inbyggda/systemsäkerhets- och identitetsfunktioner Vissa Transact-SQL-säkerhetsfunktioner och -operatorer: CURRENT_USER, HAS_DBACCESS, IS_MEMBER, IS_ROLEMEMBER, SESSION_USER, SUSER_NAME, SUSER_SNAME, SYSTEM_USER, USERUSER_NAME, , EXECUTE ASOPEN/CLOSE MASTER KEY Vissa Transact-SQL-säkerhetsfunktioner och -operatorer stöds: CURRENT_USER, HAS_DBACCESS, HAS_PERMS_BY_NAME, IS_MEMBER, IS_ROLEMEMBER, IS_SRVROLEMEMBER, SESSION_USER, SESSION_CONTEXT, SUSER_NAMESUSER_SNAME, SYSTEM_USER, USER_NAMEUSER, EXECUTE ASoch REVERT. Säkerhetsfunktioner kan inte användas för att fråga externa data (lagra resultatet i variabeln som kan användas i frågan).
Transparent datakryptering (TDE) Ja Nej, transparent datakryptering stöds inte.
Dataidentifiering och -klassificering Ja Nej, dataidentifiering och klassificering stöds inte.
Sårbarhetsbedömning Ja Nej, sårbarhetsbedömning är inte tillgängligt.
Advanced Threat Protection Ja Nej, Advanced Threat Protection stöds inte.
Granskning Ja Ja, granskning stöds i serverlösa SQL-pooler.
Brandväggsregler Ja Ja, brandväggsreglerna kan ställas in på den serverlösa SQL-slutpunkten.
Privat slutpunkt Ja Ja, den privata slutpunkten kan ställas in på den serverlösa SQL-poolen.

Dedikerad SQL-pool och serverlös SQL-pool använder standardspråket Transact-SQL för att fråga efter data. Detaljerade skillnader finns i transact-SQL-språkreferensen.

Plattformsfunktioner

Funktion Dedikerad Utan server
Skalning Ja Serverlös SQL-pool skalas automatiskt beroende på arbetsbelastningen.
Pausa/återuppta Ja Serverlös SQL-pool inaktiveras automatiskt när den inte används och aktiveras vid behov. Användaråtgärd krävs inte.
Säkerhetskopior av databasen Ja Nej. Data lagras i externa system (ADLS, Cosmos DB), så se till att du gör säkerhetskopior av data vid källan. Kontrollera att du använder SQL-metadata för lagring (tabell, vy, procedurdefinitioner och användarbehörigheter) i källkontrollen. Tabelldefinitioner i Lake-databasen lagras i Spark-metadata, så se till att du även behåller Spark-tabelldefinitioner i källkontrollen.
Databasresurs Ja Nej. Data lagras i externa system (ADLS, Cosmos DB), så du måste återställa källsystem för att hämta dina data. Kontrollera att dina SQL-metadata (tabell, vy, procedurdefinitioner och användarbehörigheter) finns i källkontrollen så att du kan återskapa SQL-objekten. Tabelldefinitioner i Lake-databasen lagras i Spark-metadata, så se till att du även behåller Spark-tabelldefinitioner i källkontrollen.

Verktyg

Du kan använda olika verktyg för att ansluta till Synapse SQL för att fråga efter data.

Verktyg Dedikerad Utan server
Synapse Studio Ja, SQL-skript Ja, SQL-skript kan användas i Synapse Studio. Använd SSMS eller ADS i stället för Synapse Studio om du returnerar en stor mängd data som ett resultat.
Power BI Ja Ja, du kan använda Power BI för att skapa rapporter i en serverlös SQL-pool. Importläge rekommenderas för rapportering.
Azure Analysis Service Ja Ja, du kan läsa in data i Azure Analysis Service med hjälp av den serverlösa SQL-poolen.
Azure Data Studio (ADS) Ja Ja, du kan använda Azure Data Studio (version 1.18.0 eller senare) för att fråga en serverlös SQL-pool. SQL-skript och SQL-notebook-filer stöds.
SQL Server Management Studio (SSMS) Ja Ja, du kan använda SQL Server Management Studio (version 18.5 eller senare) för att köra frågor mot en serverlös SQL-pool. SSMS visar bara de objekt som är tillgängliga i de serverlösa SQL-poolerna.

Kommentar

Du kan använda SSMS för att ansluta till en serverlös SQL-pool och fråga. Det stöds delvis från och med version 18.5. Du kan bara använda den för att ansluta och fråga.

De flesta program använder standardspråket Transact-SQL och kan köra frågor mot både dedikerade och serverlösa förbrukningsmodeller i Synapse SQL.

Dataåtkomst

Data som analyseras kan lagras på olika lagringstyper. I följande tabell visas alla tillgängliga lagringsalternativ:

Lagringstyp Dedikerad Utan server
Intern lagring Ja Nej, data placeras i Azure Data Lake eller Azure Cosmos DB-analyslagring.
Azure Data Lake v2 Ja Ja, du kan använda externa tabeller och OPENROWSET funktionen för att läsa data från ADLS. Lär dig hur du konfigurerar åtkomstkontroll här.
Azure Blob Storage Ja Ja, du kan använda externa tabeller och OPENROWSET funktionen för att läsa data från Azure Blob Storage. Lär dig hur du konfigurerar åtkomstkontroll här.
Azure SQL/SQL Server (fjärransluten) Nej Nej, serverlös SQL-pool kan inte referera till Azure SQL-databas. Du kan referera till serverlösa SQL-pooler från Azure SQL med hjälp av elastiska frågor eller länkade servrar.
Dataverse Nej, du kan läsa in Azure Cosmos DB-data i en dedikerad pool med Hjälp av Azure Synapse Link i en serverlös SQL-pool (via ADLS) eller Spark. Ja, du kan läsa Dataverse-tabeller med hjälp av Azure Synapse-länken för Dataverse med Azure Data Lake.
Transaktionslagring i Azure Cosmos DB Nej Nej, du kan inte komma åt Azure Cosmos DB-containrar för att uppdatera data eller läsa data från Azure Cosmos DB-transaktionslagringen. Använd Spark-pooler för att uppdatera transaktionslagringen i Azure Cosmos DB .
Azure Cosmos DB-analyslagring Nej, du kan läsa in Azure Cosmos DB-data i en dedikerad pool med hjälp av Azure Synapse Link i en serverlös SQL-pool (via ADLS), ADF, Spark eller något annat inläsningsverktyg. Ja, du kan fråga Azure Cosmos DB-analyslagring med hjälp av Azure Synapse Link.
Apache Spark-tabeller (i arbetsyta) Nej Ja, serverlös pool kan läsa PARQUET- och CSV-tabeller med hjälp av metadatasynkronisering.
Apache Spark-tabeller (fjärranslutna) Nej Nej, serverlös pool kan bara komma åt DE PARQUET- och CSV-tabeller som skapas i Apache Spark-pooler på samma Synapse-arbetsyta. Du kan dock manuellt skapa en extern tabell som refererar till den externa Spark-tabellplatsen.
Databricks-tabeller (fjärranslutna) Nej Nej, serverlös pool kan bara komma åt DE PARQUET- och CSV-tabeller som skapas i Apache Spark-pooler på samma Synapse-arbetsyta. Du kan dock manuellt skapa en extern tabell som refererar till Databricks-tabellplats.

Dataformat

Data som analyseras kan lagras i olika lagringsformat. I följande tabell visas alla tillgängliga dataformat som kan analyseras:

Dataformat Dedikerad Utan server
Avgränsad Ja Ja, du kan fråga avgränsade filer.
CSV Ja (avgränsare med flera tecken stöds inte) Ja, du kan fråga CSV-filer. För bättre prestanda använder du PARSER_VERSION 2.0 som ger snabbare parsning. Om du lägger till rader i dina CSV-filer kontrollerar du att du kör frågor mot filerna som tilläggsbara.
Parkettgolv Ja Ja, du kan köra frågor mot Parquet-filer, inklusive filer med kapslade typer.
Hive ORC Ja Nej, serverlösa SQL-pooler kan inte läsa Hive ORC-format.
Hive RC Ja Nej, serverlösa SQL-pooler kan inte läsa Hive RC-format.
JSON Ja Ja, du kan fråga JSON-filer med avgränsat textformat och T-SQL JSON-funktionerna .
Avro Nej Nej, serverlösa SQL-pooler kan inte läsa Avro-format.
Delta Lake Nej Ja, du kan köra frågor mot Delta Lake-filer, inklusive filer med kapslade typer.
Common Data Model (CDM) Nej Nej, serverlös SQL-pool kan inte läsa data som lagras med Common Data Model.

Nästa steg

Mer information om metodtips för dedikerad SQL-pool och serverlös SQL-pool finns i följande artiklar: