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_owner och 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 , USER USER_NAME , , EXECUTE AS OPEN/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_NAME SUSER_SNAME , SYSTEM_USER , USER_NAME USER , EXECUTE AS och 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: