Dela via


CETAS med Synapse SQL

Du kan använda CREATE EXTERNAL TABLE AS SELECT (CETAS) i en dedikerad SQL-pool eller en serverlös SQL-pool för att utföra följande uppgifter:

  • Skapa en extern tabell

  • Exportera, parallellt, resultatet av en Transact-SQL SELECT-instruktion för att:

    • Hadoop
    • Azure Storage Blob
    • Azure Data Lake Storage Gen2

CETAS i en dedikerad SQL-pool

Information om dedikerad SQL-pool, CETAS-användning och syntax finns i artikeln SKAPA EXTERN TABELL SOM SELECT . Mer information om CTAS med dedikerad SQL-pool finns i artikeln CREATE TABLE AS SELECT (SKAPA TABELL SOM SELECT ).

CETAS i serverlös SQL-pool

När du använder en serverlös SQL-pool används CETAS för att skapa en extern tabell och exportera frågeresultat till Azure Storage Blob eller Azure Data Lake Storage Gen2.

Fullständig syntax finns i CREATE EXTERNAL TABLE AS SELECT (Transact-SQL).

Exempel

De här exemplen använder CETAS för att spara den totala populationen aggregerad per år och delstat till en aggregated_data mapp som finns i population_ds datakällan.

Det här exemplet förlitar sig på autentiseringsuppgifterna, datakällan och det externa filformat som skapades tidigare. Se dokumentet med externa tabeller . Om du vill spara frågeresultat i en annan mapp i samma datakälla ändrar du argumentet LOCATION.

Om du vill spara resultat till ett annat lagringskonto skapar och använder du en annan datakälla för DATA_SOURCE argument.

Anteckning

Exemplen som följer använder ett offentligt Azure Open Data Storage-konto. Den är skrivskyddad. Om du vill köra dessa frågor måste du ange den datakälla som du har skrivbehörighet för.

-- use CETAS to export select statement with OPENROWSET result to  storage
CREATE EXTERNAL TABLE population_by_year_state
WITH (
    LOCATION = 'aggregated_data/',
    DATA_SOURCE = population_ds,  
    FILE_FORMAT = census_file_format
)  
AS
SELECT decennialTime, stateName, SUM(population) AS population
FROM
    OPENROWSET(BULK 'https://azureopendatastorage.dfs.core.windows.net/censusdatacontainer/release/us_population_county/year=*/*.parquet',
    FORMAT='PARQUET') AS [r]
GROUP BY decennialTime, stateName
GO

-- you can query the newly created external table
SELECT * FROM population_by_year_state

I följande exempel används en extern tabell som källa för CETAS. Den förlitar sig på autentiseringsuppgifter, datakälla, externt filformat och den externa tabell som skapades tidigare. Se dokumentet med externa tabeller .

-- use CETAS with select from external table
CREATE EXTERNAL TABLE population_by_year_state
WITH (
    LOCATION = 'aggregated_data/',
    DATA_SOURCE = population_ds,  
    FILE_FORMAT = census_file_format
)  
AS
SELECT decennialTime, stateName, SUM(population) AS population
FROM census_external_table
GROUP BY decennialTime, stateName
GO

-- you can query the newly created external table
SELECT * FROM population_by_year_state

Allmänt exempel

I det här exemplet kan vi se exempel på en mallkod för att skriva CETAS med en Vy som källa och använda hanterad identitet som autentisering.

CREATE DATABASE [<mydatabase>];
GO

USE [<mydatabase>];
GO

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong password>';

CREATE DATABASE SCOPED CREDENTIAL [WorkspaceIdentity] WITH IDENTITY = 'Managed Identity';
GO

CREATE EXTERNAL FILE FORMAT [ParquetFF] WITH (
    FORMAT_TYPE = PARQUET,
    DATA_COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec'
);
GO

CREATE EXTERNAL DATA SOURCE [SynapseSQLwriteable] WITH (
    LOCATION = 'https://<mystoageaccount>.dfs.core.windows.net/<mycontainer>/<mybaseoutputfolderpath>',
    CREDENTIAL = [WorkspaceIdentity]
);
GO

CREATE EXTERNAL TABLE [dbo].[<myexternaltable>] WITH (
        LOCATION = '<myoutputsubfolder>/',
        DATA_SOURCE = [SynapseSQLwriteable],
        FILE_FORMAT = [ParquetFF]
) AS
SELECT * FROM [<myview>];
GO

Datatyper som stöds

CETAS kan användas för att lagra resultatuppsättningar med följande SQL-datatyper:

  • binary
  • varbinary
  • char
  • varchar
  • nchar
  • nvarchar
  • smalldate
  • datum
  • datetime
  • datetime2
  • datetimeoffset
  • time
  • decimal
  • numeric
  • flyt
  • real
  • bigint
  • tinyint
  • smallint
  • int
  • bigint
  • bit
  • money
  • smallmoney
  • uniqueidentifier

Anteckning

LOB:er som är större än 1 MB kan inte användas med CETAS.

Nästa steg

Prova att fråga Apache Spark efter Azure Synapse externa tabeller.