CETAS con Synapse SQL

È possibile usare CREATE EXTERNAL TABLE AS SELECT (CETAS) nel pool SQL dedicato o nel pool SQL serverless per completare le attività seguenti:

  • Creare una tabella esterna

  • Esportare, in parallelo, i risultati di un'istruzione Transact-SQL SELECT in:

    • Hadoop
    • BLOB del servizio di archiviazione di Azure
    • Azure Data Lake Storage Gen2

CETAS nel pool SQL dedicato

Per informazioni su utilizzo e sintassi di CETAS nel pool SQL dedicato, vedere l'articolo CREATE EXTERNAL TABLE AS SELECT. Inoltre, per informazioni su CTAS con il pool SQL dedicato, vedere l'articolo CREATE TABLE AS SELECT.

CETAS nel pool SQL serverless

Se si usa il pool SQL serverless, CETAS consente di creare una tabella esterna e di esportare i risultati delle query in BLOB del servizio di archiviazione di Azure o in Azure Data Lake Storage Gen2.

Per la sintassi completa, vedere CREATE EXTERNAL TABLE AS SELECT (Transact-SQL).

Esempi

Questi esempi usano CETAS per salvare i dati aggregati sulla popolazione totale per anno e stato in una cartella aggregated_data che si trova nell'origine dati population_ds.

Questo esempio si basa su credenziali, origine dati e formato di file esterno creati in precedenza. Vedere il documento Tabelle esterne. Per salvare i risultati delle query in una cartella diversa nella stessa origine dati, cambiare l'argomento LOCATION.

Per salvare i risultati in un account di archiviazione diverso, creare e usare un'origine dati diversa per l'argomento DATA_SOURCE.

Nota

Gli esempi che seguono usano un account di archiviazione di dati aperti di Azure. Il codice è di sola lettura. Per eseguire queste query, è necessario specificare l'origine dati per chi si hanno autorizzazioni di scrittura.

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

L'esempio seguente usa una tabella esterna come origine per CETAS. Si basa su credenziali, origine dati e formato di file esterno e tabella esterna creati in precedenza. Vedere il documento Tabelle esterne.

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

Esempio generale

In questo esempio è possibile osservare un esempio di codice modello per la scrittura di CETAS con una vista come origine e l'uso dell'identità gestita come autenticazione.

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

Tipi di dati supportati

È possibile usare CETAS per archiviare i set di risultati con i tipi di dati SQL seguenti:

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

Nota

Non è possibile usare LOB di dimensioni maggiori di 1 MB con CETAS.

Passaggi successivi

Provare a eseguire query su tabelle esterne di Apache Spark per Azure Synapse.