Partilhar via


CRIAR TABELA EXTERNA (Transact-SQL)

Aplica-se a: SQL Server 2016 (13.x) e versões posteriores Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Armazém no Microsoft FabricBase de dados SQL no Microsoft Fabric

Cria uma tabela externa.

Este artigo fornece a sintaxe, argumentos, observações, permissões e exemplos para qualquer produto SQL escolhido.

Selecione um produto

Na linha seguinte, selecione o nome do produto em que está interessado e apenas as informações desse produto são apresentadas.

* Servidor SQL *  

da Instância Gerenciada SQL do Azure

Plataforma de análise
Sistema (PDW)

 

Visão geral: SQL Server

Este comando cria uma tabela externa para o PolyBase acessar dados armazenados em um cluster Hadoop ou tabela externa PolyBase de Armazenamento de Blob do Azure que faz referência a dados armazenados em um cluster Hadoop ou Armazenamento de Blob do Azure.

Aplica-se a: SQL Server 2016 (13.x) e versões posteriores.

Use uma tabela externa com uma fonte de dados externa para consultas PolyBase. As fontes de dados externas são usadas para estabelecer conectividade e dar suporte a estes casos de uso primários:

Uma tabela externa é baseada em uma fonte de dados externa.

Transact-SQL convenções de sintaxe

Sintaxe

-- Create a new external table
CREATE EXTERNAL TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
    ( <column_definition> [ , ...n ] )
    WITH (
        LOCATION = 'folder_or_filepath' ,
        DATA_SOURCE = external_data_source_name ,
        [ FILE_FORMAT = external_file_format_name ]
        [ , <reject_options> [ , ...n ] ]
    )
[ ; ]

<reject_options> ::=
{
    | REJECT_TYPE = { value | percentage }
    | REJECT_VALUE = reject_value
    | REJECT_SAMPLE_VALUE = reject_sample_value ,
    | REJECTED_ROW_LOCATION = '/REJECT_Directory'
}

<column_definition> ::=
column_name <data_type>
    [ COLLATE collation_name ]
    [ NULL | NOT NULL ]

Argumentos

{ database_name.nome_schema.nome_de_tabela | schema_name.nome_de_tabela | table_name }

O nome de uma a três partes da tabela a ser criada.

Para uma tabela externa, o SQL armazena apenas os metadados da tabela, juntamente com estatísticas básicas sobre o arquivo ou pasta referenciado no Hadoop ou no Armazenamento de Blobs do Azure. Nenhum dado real é movido ou armazenado no SQL Server.

Importante

Para melhor desempenho, se o driver de fonte de dados externo suportar um nome de três partes, deve fornecer o nome de três partes.

< > column_definition [ ,... n ]

CREATE EXTERNAL TABLE suporta a capacidade de configurar o nome da coluna, o tipo de dados, a anulabilidade e o agrupamento. Não é possível usar o DEFAULT CONSTRAINT em tabelas externas.

As definições de coluna, incluindo os tipos de dados e o número de colunas, devem corresponder aos dados nos arquivos externos. Se houver uma incompatibilidade, as linhas do arquivo serão rejeitadas ao consultar os dados reais.

LOCALIZAÇÃO = 'folder_or_filepath'

Especifica a pasta ou o caminho do arquivo e o nome do arquivo para os dados reais no Hadoop ou no Armazenamento de Blobs do Azure. Além disso, o armazenamento de objetos compatível com o S3 é suportado a partir do SQL Server 2022 (16.x)). O local começa a partir da pasta raiz. A pasta raiz é o local de dados especificado na fonte de dados externa.

No SQL Server, a instrução CREATE EXTERNAL TABLE cria o caminho e a pasta, caso ainda não exista. Depois podes exportar INSERT INTO dados de uma tabela SQL Server local para a fonte de dados externa. Para obter mais informações, consulte Cenários de consulta do PolyBase.

Se especificar LOCATION que é uma pasta, uma consulta PolyBase que seleciona da tabela externa recupera ficheiros da pasta e de todas as suas subpastas. Assim como o Hadoop, o PolyBase não retorna pastas ocultas. Também não devolve ficheiros cujo nome começa por sublinhado (_) ou ponto (.).

No exemplo de imagem seguinte, se LOCATION='/webdata/', uma consulta PolyBase devolve linhas de mydata.txt e mydata2.txt. Não retorna mydata3.txt porque é um ficheiro numa subpasta oculta. E não regressa _hidden.txt porque é um ficheiro oculto.

Diagrama de pastas e dados de arquivos para tabelas externas.

Para alterar o padrão e ler apenas a partir da pasta raiz, defina o atributo <polybase.recursive.traversal> como 'false' no arquivo de configuração core-site.xml. Esse arquivo está localizado em <SqlBinRoot>\PolyBase\Hadoop\Conf sob a raiz bin do SQL Server. Por exemplo, C:\Program Files\Microsoft SQL Server\MSSQL13.XD14\MSSQL\Binn.

DATA_SOURCE = external_data_source_name

Especifica o nome da fonte de dados externa que contém o local dos dados externos. Esse local é um Hadoop File System (HDFS), um contêiner de Armazenamento de Blob do Azure ou o Azure Data Lake Store. Para criar uma fonte de dados externa, use CRIAR FONTE DE DADOS EXTERNA.

FILE_FORMAT = external_file_format_name

Especifica o nome do objeto de formato de arquivo externo que armazena o tipo de arquivo e o método de compactação para os dados externos. Para criar um formato de arquivo externo, use CREATE EXTERNAL FILE FORMAT.

Formatos de arquivo externos podem ser reutilizados por vários arquivos externos semelhantes.

Opções REJEITAR

Esta opção só pode ser usada com fontes de dados externas onde TYPE = HADOOP.

Pode especificar os parâmetros de rejeição que determinam como o PolyBase lida com registos sujos que recupera da fonte de dados externa. Um registo de dados é considerado "sujo" se os tipos de dados reais ou o número de colunas não corresponderem às definições de coluna da tabela externa.

Quando você não especifica ou altera valores de rejeição, o PolyBase usa valores padrão. Esta informação sobre os parâmetros de rejeição é armazenada como metadados adicionais quando cria uma tabela externa com CREATE EXTERNAL TABLE a instrução. Quando uma instrução ou SELECT INTO SELECT instrução futura SELECT seleciona dados da tabela externa, o PolyBase usa as opções de rejeição para determinar o número ou percentagem de linhas que podem ser rejeitadas antes que a consulta real falhe. A consulta devolve resultados (parciais) até que o limiar de rejeição seja ultrapassado. Em seguida, ele falha com a mensagem de erro apropriada.

REJECT_TYPE = { valor | percentagem }

Esclarece se a REJECT_VALUE opção é especificada como um valor literal ou uma porcentagem.

  • valor

    REJECT_VALUE é um valor literal, não uma percentagem. A consulta falha quando o número de linhas rejeitadas excede reject_value.

    Por exemplo, se REJECT_VALUE = 5 e REJECT_TYPE = value, a SELECT consulta falha após cinco linhas serem rejeitadas.

  • percentagem

    REJECT_VALUE é uma percentagem, não um valor literal. Uma consulta falha quando a percentagem de linhas falhadas excede reject_value. A percentagem de linhas com falha é calculada em intervalos.

REJECT_VALUE = reject_value

Especifica o valor ou a porcentagem de linhas que podem ser rejeitadas antes que a consulta falhe.

Para REJECT_TYPE = value, reject_value deve ser um número inteiro entre 0 e 2.147.483.647.

Para REJECT_TYPE = percentage, reject_value deve ser um flutuador entre 0 e 100.

REJECT_SAMPLE_VALUE = reject_sample_value

Este atributo é necessário quando você especifica REJECT_TYPE = percentage. Ele determina o número de linhas a serem recuperadas antes que o PolyBase recalcule a porcentagem de linhas rejeitadas.

O parâmetro reject_sample_value deve ser um número inteiro entre 0 e 2.147.483.647.

Por exemplo, se REJECT_SAMPLE_VALUE = 1000, o PolyBase calcula a percentagem de linhas falhadas depois de ter tentado importar 1.000 linhas do ficheiro de dados externo. Se a porcentagem de linhas com falha for menor que reject_value, o PolyBase tentará recuperar outras 1.000 linhas. Ele continua a recalcular a porcentagem de linhas com falha depois de tentar importar cada 1.000 linhas adicionais.

Observação

Como o PolyBase calcula a porcentagem de linhas com falha em intervalos, a porcentagem real de linhas com falha pode exceder reject_value.

Exemplo

Este exemplo mostra como as três REJECT opções interagem entre si. Por exemplo, se REJECT_TYPE = percentage, REJECT_VALUE = 30e REJECT_SAMPLE_VALUE = 100, o seguinte cenário pode ocorrer:

  • O PolyBase tenta recuperar as primeiras 100 linhas; 25 reprovam e 75 conseguem.
  • A porcentagem de linhas com falha é calculada como 25%, que é menor do que o valor de rejeição de 30%. Como resultado, o PolyBase continua recuperando dados da fonte de dados externa.
  • O PolyBase tenta carregar as próximas 100 linhas; Desta vez, 25 linhas são bem-sucedidas e 75 linhas falham.
  • A porcentagem de linhas com falha é recalculada como 50%. A porcentagem de linhas com falha excedeu o valor de rejeição de 30%.
  • A consulta PolyBase falha com 50% linhas rejeitadas depois de tentar retornar as primeiras 200 linhas. As linhas correspondentes são devolvidas antes de a consulta PolyBase detetar que o limiar de rejeição foi ultrapassado.

REJECTED_ROW_LOCATION = localização do diretório

Aplica-se a: SQL Server 2019 (15.x) 6 e versões posteriores, e Azure Synapse Analytics.

Especifica o diretório dentro da Fonte de Dados Externa que as linhas rejeitadas e o arquivo de erro correspondente devem ser gravados.

Se o caminho especificado não existir, o PolyBase criará um em seu nome. Um diretório filho é criado com o nome _rejectedrows. O caractere _ garante que o diretório seja escapado para outro processamento de dados, a menos que explicitamente nomeado no parâmetro location. Dentro deste diretório, há uma pasta criada com base no tempo de envio de carregamento no formato YearMonthDay -HourMinuteSecond (por exemplo, 20230330-173205). Nesta pasta, dois tipos de arquivos são gravados, o arquivo _reason e o arquivo de dados. Esta opção só pode ser usada com fontes de dados externas onde TYPE = HADOOP e para tabelas externas usando DELIMITEDTEXTFORMAT_TYPE. Para mais informações, consulte CRIAR FONTE DE DADOS EXTERNA e CRIAR FORMATO DE FICHEIRO EXTERNO.

Os arquivos de motivo e os arquivos de dados têm o queryID associado à instrução CTAS. Como os dados e o motivo estão em arquivos separados, os arquivos correspondentes têm um sufixo correspondente.

Permissões

Requer estas permissões de usuário:

  • CREATE TABLE
  • ALTER ANY SCHEMA
  • ALTER ANY EXTERNAL DATA SOURCE
  • ALTER ANY EXTERNAL FILE FORMAT (aplica-se apenas a fontes de dados externas do Hadoop e Azure Storage)
  • CONTROL DATABASE (aplica-se apenas a fontes de dados externas do Hadoop e Azure Storage)

Note-se, o login remoto especificado no DATABASE SCOPED CREDENTIAL usado no CREATE EXTERNAL TABLE comando deve ter permissão de leitura para o caminho/tabela/coleção na fonte de dados externa especificada no LOCATION parâmetro. Se planeia usar isto EXTERNAL TABLE para exportar dados para uma fonte de dados externa Hadoop ou Azure Storage, então o login especificado deve ter permissão de escrita no caminho especificado em LOCATION. O Hadoop não é suportado no SQL Server 2022 (16.x).

Para o Armazenamento de Blobs do Azure, ao configurar as chaves de acesso e a assinatura de acesso compartilhado (SAS) no portal do Azure, as contas de armazenamento do Armazenamento de Blob do Azure ou do ADLS Gen2, configure o de permissões Permitido para conceder pelo menos de leitura e permissões de gravação. permissão Lista também pode ser necessária ao pesquisar entre pastas. Você também deve selecionar de contêiner e de objeto como os tipos de recursos permitidos.

Importante

A ALTER ANY EXTERNAL DATA SOURCE permissão concede a qualquer principal a capacidade de criar e modificar qualquer objeto fonte de dados externo e, por isso, também concede a capacidade de aceder a todas as credenciais com âmbito de base de dados na base de dados. Essa permissão deve ser considerada altamente privilegiada e, portanto, deve ser concedida apenas a entidades confiáveis no sistema.

Tratamento de erros

Ao executar a instrução CREATE EXTERNAL TABLE, o PolyBase tenta se conectar à fonte de dados externa. Se a tentativa de ligação falhar, a instrução falha e a tabela externa não é criada. Pode levar um minuto ou mais para que o comando falhe, já que o PolyBase tenta novamente a conexão antes de eventualmente falhar na consulta.

Comentários

Em cenários de consulta ad hoc, como SELECT FROM EXTERNAL TABLE, o PolyBase armazena as linhas recuperadas da fonte de dados externa em uma tabela temporária. Após a conclusão da consulta, o PolyBase remove e exclui a tabela temporária. Nenhum dado permanente é armazenado em tabelas SQL. Em contraste, no cenário de importação, como SELECT INTO FROM EXTERNAL TABLE, o PolyBase armazena as linhas que são recuperadas da fonte de dados externa como dados permanentes na tabela SQL. A nova tabela é criada durante a execução da consulta quando o PolyBase recupera os dados externos.

O formato Hadoop é apenas suportado no SQL Server 2016 (13.x), SQL Server 2017 (14.x) e SQL Server 2019 (15.x).

O PolyBase pode enviar parte da computação da consulta para o Hadoop para melhorar o desempenho da consulta. Esta ação é conhecida como empurrar de predicado. Para habilitá-lo, especifique a opção de local do gerenciador de recursos do Hadoop em CREATE EXTERNAL DATA SOURCE.

Você pode criar muitas tabelas externas que fazem referência à mesma fonte de dados externa ou a fontes de dados externas diferentes.

Limitações

Como os dados de uma tabela externa não estão sob controlo direto de gestão do SQL Server, podem ser alterados ou removidos a qualquer momento por um processo externo. Como resultado, não é garantido que os resultados da consulta em uma tabela externa sejam determinísticos. A mesma consulta pode retornar resultados diferentes cada vez que é executada em uma tabela externa. Da mesma forma, uma consulta pode falhar se os dados externos forem movidos ou removidos.

Você pode criar várias tabelas externas que fazem referência a diferentes fontes de dados externas. Se você executar consultas simultaneamente em diferentes fontes de dados Hadoop, cada fonte Hadoop deverá usar a mesma definição de configuração do servidor 'conectividade hadoop'. Por exemplo, não é possível executar simultaneamente uma consulta em um cluster Hadoop do Cloudera e em um cluster Hadoop do Hortonworks, pois eles usam definições de configuração diferentes. Para as definições de configuração e combinações suportadas, veja Configuração de conectividade PolyBase.

Quando a tabela externa está usando DELIMITEDTEXT, CSV, PARQUETou DELTA como tipos de dados, as tabelas externas oferecem suporte apenas a estatísticas para uma coluna por CREATE STATISTICS comando.

Somente estas instruções DDL (Data Definition Language) são permitidas em tabelas externas:

  • CREATE TABLE e DROP TABLE
  • CREATE STATISTICS e DROP STATISTICS
  • CREATE VIEW e DROP VIEW

Construções e operações não suportadas:

  • Uma DEFAULT restrição nas colunas externas da tabela
  • Operações DML (Data Manipulation Language) de exclusão, inserção e atualização

Limitações de consulta

O PolyBase pode consumir um máximo de 33 mil arquivos por pasta ao executar 32 consultas PolyBase simultâneas. Este número máximo inclui ficheiros e subpastas em cada pasta HDFS. Se o grau de simultaneidade for inferior a 32, um usuário pode executar consultas PolyBase em pastas no HDFS que contenham mais de 33k arquivos. Recomendamos que você mantenha os caminhos de arquivos externos curtos e não use mais de 30 mil arquivos por pasta HDFS. Quando muitos arquivos são referenciados, uma exceção de falta de memória da Java Virtual Machine (JVM) pode ocorrer.

Limitações de largura da tabela

No SQL Server 2016 (13.x), o PolyBase tem um limite de largura de linha de 32 KB baseado no tamanho máximo de uma única linha válida por definição de tabela. Se a soma do esquema de coluna for maior que 32 KB, o PolyBase não poderá consultar os dados.

Limitações do tipo de dados

Os seguintes tipos de dados não podem ser usados em tabelas externas PolyBase:

  • geografia
  • geometria
  • Hierarquia
  • imagem
  • texto
  • ntexto
  • XML
  • Qualquer tipo definido pelo usuário

Limitações específicas da fonte de dados

Oráculo

Os sinônimos Oracle não são suportados para uso com o PolyBase.

Tabelas externas para coleções MongoDB que contêm matrizes

Use sp_data_source_objects para detetar o esquema de coleções (colunas) das coleções MongoDB que contenham arrays e crie manualmente a tabela externa. O procedimento armazenado sp_data_source_table_columns também executa automaticamente o nivelamento por meio do driver ODBC do PolyBase para o driver MongoDB.

Bloqueio

Bloqueio partilhado no SCHEMARESOLUTION objeto.

Segurança

Os arquivos de dados de uma tabela externa são armazenados no Hadoop ou no Armazenamento de Blobs do Azure. Esses arquivos de dados são criados e gerenciados por seus próprios processos. É sua responsabilidade gerir a segurança dos dados externos.

Exemplos

Um. Criar uma tabela externa com dados em formato delimitado por texto

Este exemplo mostra todas as etapas necessárias para criar uma tabela externa com dados formatados em arquivos delimitados por texto. Ele define uma fonte de dados externa mydatasource e um formato de arquivo externo myfileformat. Esses objetos no nível de banco de dados são referenciados na instrução CREATE EXTERNAL TABLE. Para mais informações, consulte CRIAR FONTE DE DADOS EXTERNA e CRIAR FORMATO DE FICHEIRO EXTERNO.

CREATE EXTERNAL DATA SOURCE mydatasource
WITH (
    TYPE = HADOOP,
    LOCATION = 'hdfs://xxx.xxx.xxx.xxx:8020'
);
GO

CREATE EXTERNAL FILE FORMAT myfileformat
WITH (
    FORMAT_TYPE = DELIMITEDTEXT,
    FORMAT_OPTIONS (FIELD_TERMINATOR = '|')
);
GO

CREATE EXTERNAL TABLE ClickStream
(
    url VARCHAR (50),
    event_date DATE,
    user_IP VARCHAR (50)
)
WITH (
    DATA_SOURCE = mydatasource,
    LOCATION = '/webdata/employee.tbl',
    FILE_FORMAT = myfileformat
);

B. Criar uma tabela externa com dados em formato RCFile

Este exemplo mostra todas as etapas necessárias para criar uma tabela externa que tenha dados formatados como RCFiles. Ele define uma fonte de dados externa mydatasource_rc e um formato de arquivo externo myfileformat_rc. Esses objetos no nível de banco de dados são referenciados na instrução CREATE EXTERNAL TABLE. Para mais informações, consulte CRIAR FONTE DE DADOS EXTERNA e CRIAR FORMATO DE FICHEIRO EXTERNO.

CREATE EXTERNAL DATA SOURCE mydatasource_rc
WITH (
    TYPE = HADOOP,
    LOCATION = 'hdfs://xxx.xxx.xxx.xxx:8020'
);
GO

CREATE EXTERNAL FILE FORMAT myfileformat_rc
WITH (
    FORMAT_TYPE = RCFILE,
    SERDE_METHOD = 'org.apache.hadoop.hive.serde2.columnar.LazyBinaryColumnarSerDe'
);
GO

CREATE EXTERNAL TABLE ClickStream_rc
(
    url VARCHAR (50),
    event_date DATE,
    user_ip VARCHAR (50)
)
WITH (
    DATA_SOURCE = mydatasource_rc,
    LOCATION = '/webdata/employee_rc.tbl',
    FILE_FORMAT = myfileformat_rc
);

C. Criar uma tabela externa com dados em formato ORC

Este exemplo mostra todas as etapas necessárias para criar uma tabela externa que tenha dados formatados como arquivos ORC. Ele define uma fonte de dados externa mydatasource_orc e um formato de arquivo externo myfileformat_orc. Esses objetos no nível de banco de dados são referenciados na instrução CREATE EXTERNAL TABLE. Para mais informações, consulte CRIAR FONTE DE DADOS EXTERNA e CRIAR FORMATO DE FICHEIRO EXTERNO.

CREATE EXTERNAL DATA SOURCE mydatasource_orc
WITH (
    TYPE = HADOOP,
    LOCATION = 'hdfs://xxx.xxx.xxx.xxx:8020'
);
GO

CREATE EXTERNAL FILE FORMAT myfileformat_orc
WITH (
    FORMAT = ORC,
    COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec'
);
GO

CREATE EXTERNAL TABLE ClickStream_orc (
    url VARCHAR (50),
    event_date DATE,
    user_ip VARCHAR (50)
)
WITH (
    LOCATION='/webdata/',
    DATA_SOURCE = mydatasource_orc,
    FILE_FORMAT = myfileformat_orc
);

D. Consultar dados do Hadoop

ClickStream é uma tabela externa que se conecta ao arquivo de texto delimitado employee.tbl em um cluster Hadoop. A consulta a seguir se parece com uma consulta em relação a uma tabela padrão. No entanto, essa consulta recupera dados do Hadoop e, em seguida, calcula os resultados.

SELECT TOP 10 (url)
FROM ClickStream
WHERE user_ip = 'xxx.xxx.xxx.xxx';

E. Unir dados do Hadoop com dados SQL

Esta consulta assemelha-se exatamente a um padrão JOIN em duas tabelas SQL. A diferença é que o PolyBase recupera os dados do fluxo de cliques do Hadoop e, em seguida, os une à tabela UrlDescription. Uma tabela é uma tabela externa e a outra é uma tabela SQL padrão.

SELECT url.description
FROM ClickStream AS cs
     INNER JOIN UrlDescription AS url
         ON cs.url = url.name
WHERE cs.url = 'msdn.microsoft.com';

F. Importar dados do Hadoop para uma tabela SQL

Este exemplo cria um novo ms_user de tabela SQL que armazena permanentemente o resultado de uma associação entre o user de tabela SQL padrão e a tabela externa ClickStream.

SELECT DISTINCT user.FirstName, user.LastName
INTO ms_user
FROM user INNER JOIN (
    SELECT * FROM ClickStream WHERE cs.url = 'www.microsoft.com'
) AS ms
ON user.user_ip = ms.user_ip;

G. Criar uma tabela externa para o SQL Server

Antes de criar uma credencial com escopo de banco de dados, o banco de dados de usuário deve ter uma chave mestra para proteger a credencial. Para mais informações, consulte CREATE MASTER KEY e CREATE DATABASE SCOPED CREDENTIAL.

-- Create a Master Key
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
GO

/*  specify credentials to external data source
 *  IDENTITY: user name for external source.
 *  SECRET: password for external source.
 */
CREATE DATABASE SCOPED CREDENTIAL SqlServerCredentials
WITH
    IDENTITY = '<username>',
    SECRET = '<password>';

Crie uma nova fonte de dados externa chamada SQLServerInstancee uma tabela externa chamada sqlserver.customer:

/* LOCATION: Location string should be of format '<vendor>://<server>[:<port>]'.
*  PUSHDOWN: specify whether computation should be pushed down to the source. ON by default.
*  CREDENTIAL: the database scoped credential, created above.
*/
CREATE EXTERNAL DATA SOURCE SQLServerInstance
WITH (
LOCATION = 'sqlserver://SqlServer',
    -- PUSHDOWN = ON | OFF,
    CREDENTIAL = SQLServerCredentials
);
GO

CREATE SCHEMA sqlserver;

/* LOCATION: sql server table/view in 'database_name.schema_name.object_name' format
*  DATA_SOURCE: the external data source, created above.
*/
CREATE EXTERNAL TABLE sqlserver.customer (
    C_CUSTKEY INT NOT NULL,
    C_NAME VARCHAR(25) NOT NULL,
    C_ADDRESS VARCHAR(40) NOT NULL,
    C_NATIONKEY INT NOT NULL,
    C_PHONE CHAR(15) NOT NULL,
    C_ACCTBAL DECIMAL(15,2) NOT NULL,
    C_MKTSEGMENT CHAR(10) NOT NULL,
    C_COMMENT VARCHAR(117) NOT NULL
)
WITH (
    LOCATION='tpch_10.dbo.customer',
    DATA_SOURCE=SqlServerInstance
);

Eu. Criar uma tabela externa para Oracle

-- Create a Master Key
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
GO

/*
* Specify credentials to external data source
* IDENTITY: user name for external source.
* SECRET: password for external source.
*/
CREATE DATABASE SCOPED CREDENTIAL credential_name
WITH
    IDENTITY = '<username>',
    SECRET = '<password>';
GO

/*
* LOCATION: Location string should be of format '<vendor>://<server>[:<port>]'.
* PUSHDOWN: specify whether computation should be pushed down to the source. ON by default.
* CONNECTION_OPTIONS: Specify driver location
* CREDENTIAL: the database scoped credential, created above.
*/
CREATE EXTERNAL DATA SOURCE external_data_source_name
WITH (
    LOCATION = 'oracle://<server address>[:<port>]',
    -- PUSHDOWN = ON | OFF,CREDENTIAL = credential_name
);

/*
* LOCATION: Oracle table/view in '<database_name>.<schema_name>.<object_name>' format. This may be case sensitive in the Oracle database.
* DATA_SOURCE: the external data source, created above.
*/
CREATE EXTERNAL TABLE customers
(
    [O_ORDERKEY] DECIMAL (38) NOT NULL,
    [O_CUSTKEY] DECIMAL (38) NOT NULL,
    [O_ORDERSTATUS] CHAR COLLATE Latin1_General_BIN NOT NULL,
    [O_TOTALPRICE] DECIMAL (15, 2) NOT NULL,
    [O_ORDERDATE] DATETIME2 (0) NOT NULL,
    [O_ORDERPRIORITY] CHAR (15) COLLATE Latin1_General_BIN NOT NULL,
    [O_CLERK] CHAR (15) COLLATE Latin1_General_BIN NOT NULL,
    [O_SHIPPRIORITY] DECIMAL (38) NOT NULL,
    [O_COMMENT] VARCHAR (79) COLLATE Latin1_General_BIN NOT NULL
)
WITH (
    DATA_SOURCE = external_data_source_name,
    LOCATION = 'DB1.mySchema.customer'
);

J. Criar uma tabela externa para Teradata

-- Create a Master Key
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
GO

/*
* Specify credentials to external data source
* IDENTITY: user name for external source.
* SECRET: password for external source.
*/
CREATE DATABASE SCOPED CREDENTIAL credential_name
WITH
    IDENTITY = '<username>',
    SECRET = '<password>';
GO

/* LOCATION: Location string should be of format '<vendor>://<server>[:<port>]'.
* PUSHDOWN: specify whether computation should be pushed down to the source. ON by default.
* CONNECTION_OPTIONS: Specify driver location
* CREDENTIAL: the database scoped credential, created above.
*/
CREATE EXTERNAL DATA SOURCE external_data_source_name
WITH (
    LOCATION = teradata://<server address>[:<port>],
    -- PUSHDOWN = ON | OFF,
    CREDENTIAL =credential_name
);
GO

/* LOCATION: Teradata table/view in '<database_name>.<object_name>' format
* DATA_SOURCE: the external data source, created above.
*/
CREATE EXTERNAL TABLE customer(
    L_ORDERKEY INT NOT NULL,
    L_PARTKEY INT NOT NULL,
    L_SUPPKEY INT NOT NULL,
    L_LINENUMBER INT NOT NULL,
    L_QUANTITY DECIMAL(15,2) NOT NULL,
    L_EXTENDEDPRICE DECIMAL(15,2) NOT NULL,
    L_DISCOUNT DECIMAL(15,2) NOT NULL,
    L_TAX DECIMAL(15,2) NOT NULL,
    L_RETURNFLAG CHAR NOT NULL,
    L_LINESTATUS CHAR NOT NULL,
    L_SHIPDATE DATE NOT NULL,
    L_COMMITDATE DATE NOT NULL,
    L_RECEIPTDATE DATE NOT NULL,
    L_SHIPINSTRUCT CHAR(25) NOT NULL,
    L_SHIPMODE CHAR(10) NOT NULL,
    L_COMMENT VARCHAR(44) NOT NULL
)
WITH (
    LOCATION='customer',
    DATA_SOURCE= external_data_source_name
);

K. Criar uma tabela externa para o MongoDB

-- Create a Master Key
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
GO

/*
* Specify credentials to external data source
* IDENTITY: user name for external source.
* SECRET: password for external source.
*/
CREATE DATABASE SCOPED CREDENTIAL credential_name
WITH
    IDENTITY = '<username>',
    SECRET = '<password>';
GO

/* LOCATION: Location string should be of format '<type>://<server>[:<port>]'.
* PUSHDOWN: specify whether computation should be pushed down to the source. ON by default.
* CONNECTION_OPTIONS: Specify driver location
* CREDENTIAL: the database scoped credential, created above.
*/
CREATE EXTERNAL DATA SOURCE external_data_source_name
WITH (
    LOCATION = mongodb://<server>[:<port>],
    -- PUSHDOWN = ON | OFF,
    CREDENTIAL = credential_name
);

/* LOCATION: MongoDB table/view in '<database_name>.<schema_name>.<object_name>' format
* DATA_SOURCE: the external data source, created above.
*/
CREATE EXTERNAL TABLE customers(
    [O_ORDERKEY] DECIMAL(38) NOT NULL,
    [O_CUSTKEY] DECIMAL(38) NOT NULL,
    [O_ORDERSTATUS] CHAR COLLATE Latin1_General_BIN NOT NULL,
    [O_TOTALPRICE] DECIMAL(15,2) NOT NULL,
    [O_ORDERDATE] DATETIME2(0) NOT NULL,
    [O_COMMENT] VARCHAR(79) COLLATE Latin1_General_BIN NOT NULL
)
WITH (
    LOCATION='customer',
    DATA_SOURCE= external_data_source_name
);

L. Consultar o armazenamento de objetos compatíveis com o S3 através de uma tabela externa

Aplica-se a: SQL Server 2022 (16.x) e versões posteriores.

O exemplo a seguir demonstra o uso do T-SQL para consultar um arquivo parquet armazenado no armazenamento de objetos compatível com o S3 por meio da consulta de tabela externa. O exemplo usa um caminho relativo dentro da fonte de dados externa.

CREATE EXTERNAL DATA SOURCE s3_ds
WITH
(   LOCATION = 's3://<ip_address>:<port>/',
    CREDENTIAL = s3_dc
);
GO

CREATE EXTERNAL FILE FORMAT ParquetFileFormat
WITH(
    FORMAT_TYPE = PARQUET
);
GO

CREATE EXTERNAL TABLE Region (
    r_regionkey BIGINT,
    r_name CHAR(25),
    r_comment VARCHAR(152)
)
WITH (
    LOCATION = '/region/',
    DATA_SOURCE = 's3_ds',
    FILE_FORMAT = ParquetFileFormat
);

* Banco de Dados SQL do Azure *  

da Instância Gerenciada SQL do Azure

Plataforma de análise
Sistema (PDW)

 

Visão geral: Banco de Dados SQL do Azure

Cria uma tabela externa, usada para:

Ver também CRIAR FONTE DE DADOS EXTERNA.

Sintaxe

Para uso com virtualização de dados (visualização)

CREATE EXTERNAL TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
    ( <column_definition> [ , ...n ] )
    WITH (
        LOCATION = 'filepath' ,
        DATA_SOURCE = external_data_source_name ,
        FILE_FORMAT = external_file_format_name
    )
[ ; ]

<column_definition> ::=
column_name <data_type>
    [ COLLATE collation_name ]
    [ NULL | NOT NULL ]

Para uso com consultas elásticas (visualização):

-- Create a table for use with elastic query
CREATE EXTERNAL TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
    ( <column_definition> [ , ...n ] )
    WITH ( <sharded_external_table_options> )
[ ; ]

<column_definition> ::=
column_name <data_type>
    [ COLLATE collation_name ]
    [ NULL | NOT NULL ]

<sharded_external_table_options> ::=
        DATA_SOURCE = external_data_source_name ,
        SCHEMA_NAME = N'nonescaped_schema_name' ,
        OBJECT_NAME = N'nonescaped_object_name' ,
        [ DISTRIBUTION  = SHARDED(sharding_column_name) | REPLICATED | ROUND_ROBIN ] ]
    )
[ ; ]

Argumentos

{ database_name.nome_schema.nome_de_tabela | schema_name.nome_de_tabela | table_name }

O nome de uma a três partes da tabela a ser criada.

Para uma tabela externa, o SQL armazena apenas os metadados da tabela, juntamente com estatísticas básicas sobre o arquivo ou pasta referenciado no Banco de Dados SQL do Azure. Nenhum dado real é movido ou armazenado no Banco de Dados SQL do Azure quando tabelas externas são criadas.

Importante

Para melhor desempenho, se o driver de fonte de dados externo suportar um nome de três partes, deve fornecer o nome de três partes.

< > column_definition [ ,... n ]

CREATE EXTERNAL TABLE suporta a capacidade de configurar o nome da coluna, o tipo de dados, a anulabilidade e o agrupamento. Não é possível usar o DEFAULT CONSTRAINT em tabelas externas. Estes tipos de dados não são suportados para colunas em tabelas externas da Azure SQL Database:

  • geografia
  • geometria
  • Hierarquia
  • imagem
  • texto
  • ntexto
  • XML
  • Json
  • Qualquer tipo definido pelo usuário

As definições de coluna, incluindo os tipos de dados e o número de colunas, devem corresponder aos dados nos arquivos externos. Se houver uma incompatibilidade, as linhas do arquivo serão rejeitadas ao consultar os dados reais.

Opções de tabela externa fragmentada

Especifica a fonte de dados externa (uma fonte de dados que não seja do SQL Server) e um método de distribuição para a consulta Elastic.

LOCALIZAÇÃO = 'folder_or_filepath'

Especifica a pasta ou o caminho do arquivo e o nome do arquivo para os dados reais no Azure Data Lake Gen2 ou no Armazenamento de Blobs do Azure. O local começa a partir da pasta raiz. A pasta raiz é o local de dados especificado na fonte de dados externa. CREATE EXTERNAL TABLE não cria o caminho e a pasta.

Se especificar LOCATION que é uma pasta, uma consulta que seleciona da tabela externa recupera ficheiros da pasta, mas não todas as suas subpastas.

O Azure SQL Managed Instance não consegue encontrar ficheiros em subpastas ou pastas ocultas. Também não devolve ficheiros cujo nome começa por sublinhado (_) ou ponto (.).

No exemplo da imagem seguinte, se LOCATION='/webdata/', uma consulta devolve linhas de mydata.txt. Não retorna mydata2.txt porque está numa subpasta, não retorna mydata3.txt porque está numa pasta oculta, e não retorna _hidden.txt porque é um ficheiro oculto.

Diagrama de pastas e dados de arquivos para tabelas externas.

FONTE_DE_DADOS

DATA_SOURCE especifica o nome da fonte de dados externa que contém o local dos dados externos. Para criar uma fonte de dados externa, use CRIAR FONTE DE DADOS EXTERNA. Para obter um exemplo na consulta elástica, DATA_SOURCE é o mapa de estilhaços, consulte Criar tabelas externas.

FILE_FORMAT = external_file_format_name

Especifica o nome do objeto de formato de arquivo externo que armazena o tipo de arquivo e o método de compactação para os dados externos. Para criar um formato de arquivo externo, use CREATE EXTERNAL FILE FORMAT.

SCHEMA_NAME e OBJECT_NAME

Para uso somente com consulta elástica.

As SCHEMA_NAME cláusulas e OBJECT_NAME mapeiam a definição externa da tabela para uma tabela num esquema diferente. Se omitido, assume-se que o esquema do objeto remoto é dbo, e o seu nome é assumido como idêntico ao nome da tabela externa definida. Isso é útil se o nome da tabela remota já estiver no banco de dados onde você deseja criar a tabela externa. Por exemplo, você deseja definir uma tabela externa para obter uma exibição agregada de exibições de catálogo ou DMVs em sua camada de dados dimensionada. Como as vistas de catálogo e os DMVs já existem localmente, não podes usar os seus nomes para a definição de tabelas externas. Em vez disso, use um nome diferente e utilize o nome da vista de catálogo ou do DMV nas SCHEMA_NAME cláusulas e/ou OBJECT_NAME do DMV. Para obter um exemplo, consulte Criar tabelas externas.

DISTRIBUIÇÃO

Para uso somente com consulta elástica.

Opcional. Esse argumento só é necessário para bancos de dados do tipo SHARD_MAP_MANAGER. Esse argumento controla se uma tabela é tratada como uma tabela fragmentada ou uma tabela replicada. Com SHARDED (<column name>) tabelas, os dados de tabelas diferentes não se sobrepõem. REPLICATED Especifica que as tabelas têm os mesmos dados em todos os fragmentos. ROUND_ROBIN Indica que um método específico do aplicativo é usado para distribuir os dados.

A DISTRIBUTION cláusula especifica a distribuição de dados usada para esta tabela. O processador de consultas utiliza a informação fornecida na DISTRIBUTION cláusula para construir os planos de consulta mais eficientes.

  • SHARDED significa que os dados são particionados horizontalmente entre os bancos de dados. A chave de particionamento para a distribuição de dados é o parâmetro sharding_column_name.
  • REPLICATED significa que cópias idênticas da tabela estão presentes em cada banco de dados. É da sua responsabilidade garantir que as réplicas são idênticas em todas as bases de dados.
  • ROUND_ROBIN significa que a tabela é particionada horizontalmente usando um método de distribuição dependente de aplicativo.

Permissões

Os usuários com acesso à tabela externa obtêm automaticamente acesso às tabelas remotas subjacentes sob a credencial fornecida na definição de fonte de dados externa. Evite a elevação indesejada de privilégios por meio da credencial da fonte de dados externa. Usa GRANT ou REVOKE para uma mesa externa como se fosse uma mesa normal. Depois de definir sua fonte de dados externa e suas tabelas externas, agora você pode usar o T-SQL completo sobre suas tabelas externas.

CREATE EXTERNAL TABLE requer estas permissões de usuário:

  • CREATE TABLE
  • ALTER ANY SCHEMA
  • ALTER ANY EXTERNAL DATA SOURCE
  • ALTER ANY EXTERNAL FILE FORMAT
  • CONTROL DATABASE São necessárias permissões apenas para criar a chave mestra, credencial com âmbito de base de dados e fonte de dados externa.

Observe que o logon que cria a fonte de dados externa deve ter permissão para ler e gravar na fonte de dados externa, localizada no Hadoop ou no Armazenamento de Blobs do Azure.

Importante

A ALTER ANY EXTERNAL DATA SOURCE permissão concede a qualquer principal a capacidade de criar e modificar qualquer objeto fonte de dados externo e, por isso, também concede a capacidade de aceder a todas as credenciais com âmbito de base de dados na base de dados. Essa permissão deve ser considerada altamente privilegiada e, portanto, deve ser concedida apenas a entidades confiáveis no sistema.

Bloqueio

Bloqueio partilhado no SCHEMARESOLUTION objeto.

Comentários

Em cenários de consulta ad hoc, como SELECT FROM EXTERNAL TABLE, as linhas recuperadas da fonte de dados externa são armazenadas em uma tabela temporária. Após a conclusão da consulta, as linhas são removidas e a tabela temporária é excluída. Nenhum dado permanente é armazenado em tabelas SQL.

Por outro lado, no cenário de importação, como SELECT INTO FROM EXTERNAL TABLE, as linhas recuperadas da fonte de dados externa são armazenadas como dados permanentes na tabela SQL. A nova tabela é criada durante a execução da consulta quando os dados externos são recuperados.

Atualmente, a virtualização de dados com o Banco de Dados SQL do Azure é somente leitura.

Você pode criar muitas tabelas externas que fazem referência à mesma fonte de dados externa ou a fontes de dados externas diferentes.

Limitações de largura da tabela

O limite de largura de linha de 1 MB baseia-se no tamanho máximo de uma única linha válida por definição de tabela. Se a soma do esquema da coluna for superior a 1 MB, as consultas de virtualização de dados falham.

Tratamento de erros

Durante a execução da CREATE EXTERNAL TABLE instrução, se a tentativa de ligação falhar, a instrução falha e a tabela externa não é criada. Pode levar um minuto ou mais para que o comando falhe, já que o Banco de dados SQL tenta novamente a conexão antes de eventualmente falhar na consulta.

Limitações

Como os dados de uma tabela externa não estão sob controlo direto de gestão do Base de Dados ou da Azure SQL Database, podem ser alterados ou removidos a qualquer momento por um processo externo. Como resultado, não é garantido que os resultados da consulta em uma tabela externa sejam determinísticos. A mesma consulta pode retornar resultados diferentes cada vez que é executada em uma tabela externa. Da mesma forma, uma consulta pode falhar se os dados externos forem movidos ou removidos.

Você pode criar várias tabelas externas que fazem referência a diferentes fontes de dados externas.

Somente estas instruções DDL (Data Definition Language) são permitidas em tabelas externas:

  • CREATE TABLE e DROP TABLE
  • CREATE STATISTICS e DROP STATISTICS
  • CREATE VIEW e DROP VIEW

Construções e operações não suportadas:

  • A DEFAULT restrição em colunas de tabela externas.
  • Operações DML (Data Manipulation Language) de exclusão, inserção e atualização.

Limitações com consulta elástica

  • Semântica de isolamento: O acesso aos dados por meio de uma tabela externa não adere à semântica de isolamento no SQL Server. Isso significa que consultar uma tabela externa não impõe nenhum bloqueio ou isolamento de instantâneo. Portanto, o retorno de dados pode mudar se os dados na fonte de dados externa estiverem mudando. A mesma consulta pode retornar resultados diferentes cada vez que é executada em uma tabela externa. Da mesma forma, uma consulta pode falhar se os dados externos forem movidos ou removidos.

  • Construções e operações não suportadas:

    • A DEFAULT restrição em colunas de tabela externas.
    • Operações DML (Data Manipulation Language) de exclusão, inserção e atualização.
    • Mascaramento dinâmico de dados em colunas de tabelas externas.
    • Os cursores não são suportados para tabelas externas no Azure SQL Database.
  • Somente predicados literais: Somente predicados literais definidos em uma consulta podem ser enviados para a fonte de dados externa. Isso é diferente dos servidores vinculados e do acesso onde os predicados determinados durante a execução da consulta podem ser usados, ou seja, quando usados com um loop aninhado em um plano de consulta. Isto muitas vezes leva a que toda a tabela externa seja copiada localmente e depois unida.

    No exemplo a seguir, se External.Orders for uma tabela externa e Customer for uma tabela local, a consulta copiará toda a tabela externa localmente porque o predicado necessário não é conhecido em tempo de compilação.

    SELECT Orders.OrderId, Orders.OrderTotal
    FROM External.Orders
    WHERE CustomerId IN (
        SELECT TOP 1 CustomerId
        FROM Customer
        WHERE CustomerName = 'MyCompany'
    );
    
  • Sem paralelismo: O uso de tabelas externas impede o uso de paralelismo no plano de consulta.

  • Executado como consulta remota: As tabelas externas são implementadas como consulta remota, de modo que o número estimado de linhas retornadas é geralmente 1000. Existem outras regras baseadas no tipo de predicado usado para filtrar a tabela externa. São estimativas baseadas em regras e não estimativas baseadas nos dados reais do quadro externo. O otimizador não acessa a fonte de dados remota para obter uma estimativa mais precisa.

  • Não suportado para endpoint privado: Consultas externas de tabela não são suportadas quando a ligação à tabela remota é um endpoint privado.

Exemplos

Para mais exemplos, consulte CRIAR FONTE DE DADOS EXTERNA ou consulte Virtualização de dados com Azure SQL Database.

Um. Criar tabela externa para o Elastic Query

CREATE EXTERNAL TABLE [dbo].[CustomerInformation]
(
    [CustomerID] INT NOT NULL,
    [CustomerName] VARCHAR (50) NOT NULL,
    [Company] VARCHAR (50) NOT NULL
)
WITH (
    DATA_SOURCE = MyElasticDBQueryDataSrc
);

B. Criar uma tabela externa para uma fonte de dados fragmentada

Este exemplo remapeia um DMV remoto para uma tabela externa usando as SCHEMA_NAME cláusulas e.OBJECT_NAME

CREATE EXTERNAL TABLE [dbo].[all_dm_exec_requests]
(
    [session_id] SMALLINT NOT NULL,
    [request_id] INT NOT NULL,
    [start_time] DATETIME NOT NULL,
    [status] NVARCHAR (30) NOT NULL,
    [command] NVARCHAR (32) NOT NULL,
    [sql_handle] VARBINARY (64),
    [statement_start_offset] INT,
    [statement_end_offset] INT,
    [cpu_time] INT NOT NULL
)
WITH (
    DATA_SOURCE = MyExtSrc,
    SCHEMA_NAME = 'sys',
    OBJECT_NAME = 'dm_exec_requests',
    DISTRIBUTION = ROUND_ROBIN
);

C. Consultar dados externos do Banco de Dados SQL do Azure com uma tabela externa

  1. Para criar uma credencial com âmbito de base de dados no Azure SQL Database, deve primeiro criar a chave mestra da base de dados, caso ainda não exista. Uma chave mestra de banco de dados é necessária quando a credencial requer SECRET.

    -- Create MASTER KEY if it doesn't exist in the database:
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
    
  2. Crie a credencial com escopo do banco de dados usando um token SAS. Você também pode usar uma identidade gerenciada.

    CREATE DATABASE SCOPED CREDENTIAL MyCredential
    WITH
        IDENTITY = 'SHARED ACCESS SIGNATURE',
        SECRET = '<KEY>'; --Removing leading '?'
    
  3. Crie a fonte de dados externa usando a credencial.

    --Create external data source pointing to the file path, and referencing database-scoped credential:
    CREATE EXTERNAL DATA SOURCE MyPrivateExternalDataSource
    WITH (
        LOCATION = 'abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest'
        CREDENTIAL = [MyCredential]
    );
    
  4. Crie um EXTERNAL FILE FORMAT e um EXTERNAL TABLE, para consultar os dados como se fosse uma tabela local.

    -- Or, create an EXTERNAL FILE FORMAT and an EXTERNAL TABLE
    
    --Create external file format
    CREATE EXTERNAL FILE FORMAT DemoFileFormat
    WITH (
        FORMAT_TYPE = PARQUET
    );
    
    --Create external table:
    CREATE EXTERNAL TABLE tbl_TaxiRides
    (
        vendorID VARCHAR (100) COLLATE Latin1_General_BIN2,
        tpepPickupDateTime DATETIME2,
        tpepDropoffDateTime DATETIME2,
        passengerCount INT,
        tripDistance FLOAT,
        puLocationId VARCHAR (8000),
        doLocationId VARCHAR (8000),
        startLon FLOAT,
        startLat FLOAT,
        endLon FLOAT,
        endLat FLOAT,
        rateCodeId SMALLINT,
        storeAndFwdFlag VARCHAR (8000),
        paymentType VARCHAR (8000),
        fareAmount FLOAT,
        extra FLOAT,
        mtaTax FLOAT,
        improvementSurcharge VARCHAR (8000),
        tipAmount FLOAT,
        tollsAmount FLOAT,
        totalAmount FLOAT
    )
    WITH (
        DATA_SOURCE = NYCTaxiExternalDataSource,
        LOCATION = 'yellow/puYear = */puMonth = */*.parquet',
        FILE_FORMAT = MyFileFormat
    );
    
    --Then, query the data via an external table with T-SQL:
    SELECT TOP 10 *
    FROM tbl_TaxiRides;
    

da Instância Gerenciada SQL do Azure

* Sinapse do Azure
Análise *
 

Plataforma de análise
Sistema (PDW)

 

Visão geral: Azure Synapse Analytics

Use uma tabela externa para:

  • Pools SQL dedicados podem consultar, importar e armazenar dados do Hadoop, do Armazenamento de Blobs do Azure e do Azure Data Lake Storage Gen1 e Gen2.
  • Pools SQL serverless podem consultar, importar e armazenar dados do Azure Blob Storage e do Azure Data Lake Storage Gen1 e Gen2. Serverless não suporta TYPE=Hadoop.

Veja também CRIAR FONTE DE DADOS EXTERNA e DROP EXTERNAL TABLE.

Para mais informações e exemplos sobre como usar tabelas externas com Azure Synapse, consulte Usar tabelas externas com Synapse SQL.

Sintaxe

CREATE EXTERNAL TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
    ( <column_definition> [ ,...n ] )
    WITH (
        LOCATION = 'hdfs_folder_or_filepath',
        DATA_SOURCE = external_data_source_name,
        FILE_FORMAT = external_file_format_name
        [ , <reject_options> [ ,...n ] ]
    )
[ ; ]

<column_definition> ::=
column_name <data_type>
    [ COLLATE collation_name ]
    [ NULL | NOT NULL ]

<reject_options> ::=
{
    | REJECT_TYPE = { value | percentage },
    | REJECT_VALUE = reject_value,
    | REJECT_SAMPLE_VALUE = reject_sample_value,
    | REJECTED_ROW_LOCATION = '/REJECT_Directory'
}

Argumentos

{ database_name.nome_schema.nome_de_tabela | schema_name.nome_de_tabela | table_name }

O nome de uma a três partes da tabela a ser criada.

Para uma tabela externa, apenas os metadados da tabela, juntamente com estatísticas básicas sobre o arquivo ou pasta referenciados no Azure Data Lake, Hadoop ou Armazenamento de Blobs do Azure. Nenhum dado real é movido ou armazenado quando tabelas externas são criadas.

Importante

Para melhor desempenho, se o driver de fonte de dados externo suportar um nome de três partes, deve fornecer o nome de três partes.

< > column_definition [ ,... n ]

CREATE EXTERNAL TABLE suporta a capacidade de configurar o nome da coluna, o tipo de dados, a anulabilidade e o agrupamento. Não é possível usar o DEFAULT CONSTRAINT em tabelas externas.

Observação

Os tipos de dados text, ntext e xml não são suportados para colunas em tabelas externas do Synapse Analytics.

  • Ao ler arquivos delimitados, as definições de coluna, incluindo os tipos de dados e o número de colunas, devem corresponder aos dados nos arquivos externos. Se houver uma incompatibilidade, as linhas do arquivo serão rejeitadas ao consultar os dados reais.
  • Ao ler a partir de arquivos do Parquet, você pode especificar apenas as colunas que deseja ler e ignorar o resto.

LOCALIZAÇÃO = 'folder_or_filepath'

Especifica a pasta ou o caminho do arquivo e o nome do arquivo para os dados reais no Azure Data Lake, Hadoop ou Armazenamento de Blob do Azure. O local começa a partir da pasta raiz. A pasta raiz é o local de dados especificado na fonte de dados externa. A instrução CREATE EXTERNAL TABLE AS SELECT (CETAS) cria o caminho e a pasta caso esta não exista. CREATE EXTERNAL TABLE não cria o caminho e a pasta.

Se especificar LOCATION que é uma pasta, uma consulta PolyBase que seleciona da tabela externa recupera ficheiros da pasta e de todas as suas subpastas. Assim como o Hadoop, o PolyBase não retorna pastas ocultas. Também não devolve ficheiros cujo nome começa por sublinhado (_) ou ponto (.).

No exemplo de imagem seguinte, se LOCATION='/webdata/', uma consulta PolyBase devolve linhas de mydata.txt e mydata2.txt. Não retorna mydata3.txt porque está numa subpasta de uma pasta oculta, e não retorna _hidden.txt porque é um ficheiro oculto.

Diagrama de pastas e dados de arquivos para tabelas externas.

Ao contrário das tabelas externas do Hadoop, as tabelas externas nativas não retornam subpastas, a menos que você especifique /** no final do caminho. Neste exemplo, se LOCATION='/webdata/', uma consulta de pool SQL serverless retorna linhas de mydata.txt. Não devolve mydata2.txt e mydata3.txt porque estão localizados numa subpasta. As tabelas Hadoop retornam todos os ficheiros dentro de qualquer subpasta.

Tanto o Hadoop como as tabelas externas nativas ignoram os ficheiros com nomes que começam por sublinhado (_) ou ponto (.).

DATA_SOURCE = external_data_source_name

Especifica o nome da fonte de dados externa que contém o local dos dados externos. Este local fica no Azure Data Lake. Para criar uma fonte de dados externa, use CRIAR FONTE DE DADOS EXTERNA.

FILE_FORMAT = external_file_format_name

Especifica o nome do objeto de formato de arquivo externo que armazena o tipo de arquivo e o método de compactação para os dados externos. Para criar um formato de arquivo externo, use CREATE EXTERNAL FILE FORMAT.

Opções da Tabela

Especifica o conjunto de opções que descrevem como ler os arquivos subjacentes. Atualmente, o único disponível é {"READ_OPTIONS":["ALLOW_INCONSISTENT_READS"]}, que instrui a tabela externa a ignorar as atualizações feitas nos ficheiros subjacentes, mesmo que isso possa causar algumas operações de leitura inconsistentes. Utilize esta opção apenas em casos especiais em que tenha acrescentado ficheiros com frequência. Esta opção está disponível no pool SQL sem servidor para o formato CSV.

Opções REJEITAR

As opções de rejeição estão em pré-visualização para pools SQL sem servidor no Azure Synapse Analytics.

Esta opção só pode ser usada com fontes de dados externas onde TYPE = HADOOP.

Pode especificar os parâmetros de rejeição que determinam como o PolyBase lida com registos sujos que recupera da fonte de dados externa. Um registo de dados é considerado "sujo" se os tipos de dados reais ou o número de colunas não corresponderem às definições de coluna da tabela externa.

Quando você não especifica ou altera valores de rejeição, o PolyBase usa valores padrão. Esta informação sobre os parâmetros de rejeição é armazenada como metadados adicionais quando cria uma tabela externa com CREATE EXTERNAL TABLE a instrução. Quando uma instrução ou SELECT INTO SELECT instrução futura SELECT seleciona dados da tabela externa, o PolyBase usa as opções de rejeição para determinar o número ou percentagem de linhas que podem ser rejeitadas antes que a consulta real falhe. A consulta devolve resultados (parciais) até que o limiar de rejeição seja ultrapassado. Em seguida, ele falha com a mensagem de erro apropriada.

A PARSER_VERSION opção de formatação só é suportada em pools SQL serverless.

REJECT_TYPE = { valor | percentagem }

Esclarece se a REJECT_VALUE opção é especificada como um valor literal ou uma porcentagem.

  • valor

    REJECT_VALUE é um valor literal, não uma percentagem. A consulta PolyBase falha quando o número de linhas rejeitadas excede reject_value.

    A consulta falha quando o número de linhas rejeitadas excede reject_value. Por exemplo, se REJECT_VALUE = 5 e REJECT_TYPE = value, a consulta PolyBase SELECT falha após cinco linhas serem rejeitadas.

  • percentagem

    REJECT_VALUE é uma percentagem, não um valor literal. Uma consulta PolyBase falha quando a percentagem de linhas falhadas excede reject_value. A percentagem de linhas com falha é calculada em intervalos.

    • Para REJECT_TYPE = value, reject_value deve ser um número inteiro entre 0 e 2.147.483.647.
    • Para REJECT_TYPE = percentage, reject_value deve ser um flutuador entre 0 e 100. A porcentagem só é válida para pools SQL dedicados onde TYPE = HADOOP.

REJECT_SAMPLE_VALUE = reject_sample_value

Este atributo é necessário quando você especifica REJECT_TYPE = percentage. Ele determina o número de linhas a serem recuperadas antes que o PolyBase recalcule a porcentagem de linhas rejeitadas.

O parâmetro reject_sample_value deve ser um número inteiro entre 0 e 2.147.483.647.

Por exemplo, se REJECT_SAMPLE_VALUE = 1000, o PolyBase calcula a percentagem de linhas falhadas depois de ter tentado importar 1.000 linhas do ficheiro de dados externo. Se a porcentagem de linhas com falha for menor que reject_value, o PolyBase tentará recuperar outras 1.000 linhas. Ele continua a recalcular a porcentagem de linhas com falha depois de tentar importar cada 1.000 linhas adicionais.

Observação

Como o PolyBase calcula a porcentagem de linhas com falha em intervalos, a porcentagem real de linhas com falha pode exceder reject_value.

Exemplo

Este exemplo mostra como as três REJECT opções interagem entre si. Por exemplo, se REJECT_TYPE = percentage, REJECT_VALUE = 30e REJECT_SAMPLE_VALUE = 100, o seguinte cenário pode ocorrer:

  • O PolyBase tenta recuperar as primeiras 100 linhas; 25 reprovam e 75 conseguem.
  • A porcentagem de linhas com falha é calculada como 25%, que é menor do que o valor de rejeição de 30%. Como resultado, o PolyBase continua recuperando dados da fonte de dados externa.
  • O PolyBase tenta carregar as próximas 100 linhas; Desta vez, 25 linhas são bem-sucedidas e 75 linhas falham.
  • A porcentagem de linhas com falha é recalculada como 50%. A porcentagem de linhas com falha excedeu o valor de rejeição de 30%.
  • A consulta PolyBase falha com 50% linhas rejeitadas depois de tentar retornar as primeiras 200 linhas. As linhas correspondentes são devolvidas antes de a consulta PolyBase detetar que o limiar de rejeição foi ultrapassado.

REJECTED_ROW_LOCATION = localização do diretório

Especifica o diretório dentro da Fonte de Dados Externa que as linhas rejeitadas e o arquivo de erro correspondente devem ser gravados.

Se o caminho especificado não existir, é criado. Um diretório filho é criado com o nome _rejectedrows. O caractere _ garante que o diretório seja escapado para outro processamento de dados, a menos que explicitamente nomeado no parâmetro location.

  • Em pools SQL sem servidor, o caminho é YearMonthDay_HourMinuteSecond_StatementID. Você pode usar statementID para correlacionar a pasta com a consulta que a gerou.
  • Em pools SQL dedicados, o caminho criado é baseado no tempo de envio de carregamento no formato YearMonthDay -HourMinuteSecond, por exemplo, 20180330-173205.

Nesta pasta, dois tipos de arquivos são gravados, o arquivo _reason e o arquivo de dados.

Para obter mais informações, consulte CREATE EXTERNAL DATA SOURCE.

Os arquivos de motivo e os arquivos de dados têm o queryID associado à instrução CTAS. Como os dados e o motivo estão em arquivos separados, os arquivos correspondentes têm um sufixo correspondente.

Em pools SQL sem servidor, o arquivo error.json contém uma matriz JSON com erros encontrados relacionados a linhas rejeitadas. Cada elemento que representa o erro contém os seguintes atributos:

Atributo Descrição
Error Razão pela qual a linha é rejeitada.
Row Número ordinal da linha rejeitado no arquivo.
Column Número ordinal da coluna rejeitado.
Value Valor da coluna rejeitado. Se o valor for maior que 100 caracteres, somente os primeiros 100 caracteres serão exibidos.
File Caminho para o arquivo ao qual essa linha pertence.

Permissões

Requer estas permissões de usuário:

  • CREATE TABLE
  • ALTER ANY SCHEMA
  • ALTER ANY EXTERNAL DATA SOURCE
  • ALTER ANY EXTERNAL FILE FORMAT
  • CONTROL DATABASE São necessárias permissões apenas para criar a chave mestra, credencial com âmbito de base de dados e fonte de dados externa.

Observe que o logon que cria a fonte de dados externa deve ter permissão para ler e gravar na fonte de dados externa, localizada no Hadoop ou no Armazenamento de Blobs do Azure.

Importante

A ALTER ANY EXTERNAL DATA SOURCE permissão concede a qualquer principal a capacidade de criar e modificar qualquer objeto fonte de dados externo e, por isso, também concede a capacidade de aceder a todas as credenciais com âmbito de base de dados na base de dados. Essa permissão deve ser considerada altamente privilegiada e, portanto, deve ser concedida apenas a entidades confiáveis no sistema.

Tratamento de erros

Ao executar a instrução CREATE EXTERNAL TABLE, o PolyBase tenta se conectar à fonte de dados externa. Se a tentativa de ligação falhar, a instrução falha e a tabela externa não é criada. Pode levar um minuto ou mais para que o comando falhe, já que o PolyBase tenta novamente a conexão antes de eventualmente falhar na consulta.

Comentários

Em cenários de consulta ad hoc, como SELECT FROM EXTERNAL TABLE, o PolyBase armazena as linhas recuperadas da fonte de dados externa em uma tabela temporária. Após a conclusão da consulta, o PolyBase remove e exclui a tabela temporária. Nenhum dado permanente é armazenado em tabelas SQL.

Em contraste, no cenário de importação, como SELECT INTO FROM EXTERNAL TABLE, o PolyBase armazena as linhas que são recuperadas da fonte de dados externa como dados permanentes na tabela SQL. A nova tabela é criada durante a execução da consulta quando o PolyBase recupera os dados externos.

O PolyBase pode enviar parte da computação da consulta para o Hadoop para melhorar o desempenho da consulta. Esta ação é conhecida como empurrar de predicado. Para habilitá-lo, especifique a opção de local do gerenciador de recursos do Hadoop em CREATE EXTERNAL DATA SOURCE.

Você pode criar muitas tabelas externas que fazem referência à mesma fonte de dados externa ou a fontes de dados externas diferentes.

Os pools SQL dedicados e sem servidor no Azure Synapse Analytics usam bases de código diferentes para virtualização de dados. Os pools SQL sem servidor oferecem suporte a uma tecnologia nativa de virtualização de dados. Pools SQL dedicados oferecem suporte à virtualização de dados nativos e PolyBase. A virtualização de dados PolyBase é usada quando o EXTERNAL DATA SOURCE é criado com TYPE=HADOOP.

Limitações

Como os dados de uma tabela externa não estão sob controlo direto de gestão do Azure Synapse, podem ser alterados ou removidos a qualquer momento por um processo externo. Como resultado, não é garantido que os resultados da consulta em uma tabela externa sejam determinísticos. A mesma consulta pode retornar resultados diferentes cada vez que é executada em uma tabela externa. Da mesma forma, uma consulta pode falhar se os dados externos forem movidos ou removidos.

Tabelas externas não suportam dados de origem com colações UTF-8. Se os seus dados de origem utilizarem a colação UTF-8, deve atribuir explicitamente uma colação não UTF-8 a cada coluna UTF-8 na CREATE EXTERNAL TABLE instrução. Se não o fizer, resultará numa mensagem de erro semelhante à seguinte saída:

Msg 105105, Level 16, State 1, Line 22
105105;No column collation was specified in external table definition and the collation of current database 'Latin1_General_100_CI_AS_SC_UTF8' is not supported for external tables of type 'HADOOP'. Please specify a supported collation in the column definition.

Se o agrupamento de banco de dados da tabela externa for UTF-8, a criação da tabela falhará, a menos que cada coluna seja explicitamente definida com um agrupamento não-UTF-8 (por exemplo, [UTF8_column] VARCHAR(128) COLLATE LATIN1_GENERAL_100_CI_AS_KS_WS NOT NULL).

Você pode criar várias tabelas externas que fazem referência a diferentes fontes de dados externas.

Somente estas instruções DDL (Data Definition Language) são permitidas em tabelas externas:

  • CREATE TABLE e DROP TABLE
  • CREATE STATISTICS e DROP STATISTICS
  • CREATE VIEW e DROP VIEW

Construções e operações não suportadas:

  • Uma DEFAULT restrição nas colunas externas da tabela
  • Operações DML (Data Manipulation Language) de exclusão, inserção e atualização
  • Mascaramento de dados dinâmicos em colunas de tabelas externas

Limitações de consulta

Recomenda-se não ultrapassar 30 mil ficheiros por pasta. Quando muitos arquivos são referenciados, uma exceção de falta de memória da Java Virtual Machine (JVM) pode ocorrer ou o desempenho pode se degradar.

Limitações de largura da tabela

O PolyBase no Azure Data Warehouse tem um limite de largura de linha de 1 MB com base no tamanho máximo de uma única linha válida por definição de tabela. Se a soma do esquema de coluna for maior que 1 MB, o PolyBase não poderá consultar os dados.

Limitações do tipo de dados

Os seguintes tipos de dados não podem ser usados em tabelas externas PolyBase:

  • geografia
  • geometria
  • Hierarquia
  • imagem
  • texto
  • ntexto
  • XML
  • Qualquer tipo definido pelo usuário

Bloqueio

Bloqueio partilhado no SCHEMARESOLUTION objeto.

Exemplos

Um. Importar dados do ADLS Gen 2 para o Azure Synapse Analytics

Para obter exemplos para Gen ADLS Gen 1, consulte Criar fonte de dados externa.

-- These values come from your Azure Active Directory Application used to authenticate to ADLS Gen 2.
CREATE DATABASE SCOPED CREDENTIAL ADLUser
WITH
    IDENTITY = '<clientID>@\<OAuth2.0TokenEndPoint>',
    SECRET = '<KEY>';
GO

CREATE EXTERNAL DATA SOURCE AzureDataLakeStore
WITH (
    TYPE = HADOOP,
    LOCATION = 'abfss://data@pbasetr.azuredatalakestore.net'
);
GO

CREATE EXTERNAL FILE FORMAT TextFileFormat
WITH (
    FORMAT_TYPE = DELIMITEDTEXT,
    FORMAT_OPTIONS (
        FIELD_TERMINATOR = '|',
        STRING_DELIMITER = '',
        DATE_FORMAT = 'yyyy-MM-dd HH:mm:ss.fff',
        USE_TYPE_DEFAULT = FALSE
    )
);
GO

CREATE EXTERNAL TABLE [dbo].[DimProduct_external]
(
    [ProductKey] INT NOT NULL,
    [ProductLabel] NVARCHAR NULL,
    [ProductName] NVARCHAR NULL
)
WITH (
    DATA_SOURCE = AzureDataLakeStore,
    LOCATION = '/DimProduct/',
    FILE_FORMAT = TextFileFormat,
    REJECT_TYPE = value,
    REJECT_VALUE = 0
);
GO

CREATE TABLE [dbo].[DimProduct]
WITH (DISTRIBUTION = HASH([ProductKey])) AS
GO

SELECT *
FROM [dbo].[DimProduct_external];

B. Importar dados do Parquet para o Azure Synapse Analytics

O exemplo a seguir cria uma tabela externa. Em seguida, retorna a primeira linha:

CREATE EXTERNAL TABLE census_external_table
(
    decennialTime VARCHAR (20),
    stateName VARCHAR (100),
    countyName VARCHAR (100),
    population INT,
    race VARCHAR (50),
    sex VARCHAR (10),
    minAge INT,
    maxAge INT
)
WITH (
    DATA_SOURCE = population_ds,
    LOCATION = '/parquet/',
    FILE_FORMAT = census_file_format
);
GO

SELECT TOP 1 *
FROM census_external_table;

da Instância Gerenciada SQL do Azure

* Análise
Sistema de plataforma (PDW) *
 

 

Visão geral: Analytics Platform System

Use uma tabela externa para:

  • Consulte dados do Hadoop ou do Armazenamento de Blobs do Azure com instruções Transact-SQL.
  • Importe e armazene dados do Hadoop ou do Armazenamento de Blobs do Azure no Analytics Platform System.

Veja também CRIAR FONTE DE DADOS EXTERNA e DROP EXTERNAL TABLE.

Sintaxe

CREATE EXTERNAL TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
    ( <column_definition> [ , ...n ] )
    WITH (
        LOCATION = 'hdfs_folder_or_filepath' ,
        DATA_SOURCE = external_data_source_name ,
        FILE_FORMAT = external_file_format_name
        [ , <reject_options> [ , ...n ] ]
    )
[ ; ]

<column_definition> ::=
column_name <data_type>
    [ COLLATE collation_name ]
    [ NULL | NOT NULL ]

<reject_options> ::=
{
    | REJECT_TYPE = { value | percentage },
    | REJECT_VALUE = reject_value ,
    | REJECT_SAMPLE_VALUE = reject_sample_value ,

}

Argumentos

{ database_name.nome_schema.nome_de_tabela | schema_name.nome_de_tabela | table_name }

O nome de uma a três partes da tabela a ser criada.

Para uma tabela externa, o Analytics Platform System armazena apenas os metadados da tabela, juntamente com estatísticas básicas sobre o arquivo ou pasta referenciado no Hadoop ou no Armazenamento de Blobs do Azure. Nenhum dado real é movido ou armazenado no Analytics Platform System.

Importante

Para melhor desempenho, se o driver de fonte de dados externo suportar um nome de três partes, deve fornecer o nome de três partes.

< > column_definition [ ,... n ]

CREATE EXTERNAL TABLE suporta a capacidade de configurar o nome da coluna, o tipo de dados, a anulabilidade e o agrupamento. Não é possível usar o DEFAULT CONSTRAINT em tabelas externas.

As definições de coluna, incluindo os tipos de dados e o número de colunas, devem corresponder aos dados nos arquivos externos. Se houver uma incompatibilidade, as linhas do arquivo serão rejeitadas ao consultar os dados reais.

LOCALIZAÇÃO = 'folder_or_filepath'

Especifica a pasta ou o caminho do arquivo e o nome do arquivo para os dados reais no Hadoop ou no Armazenamento de Blobs do Azure. O local começa a partir da pasta raiz. A pasta raiz é o local de dados especificado na fonte de dados externa.

No Analytics Platform System, a instrução CREATE EXTERNAL TABLE AS SELECT (CETAS) cria o caminho e a pasta caso esta não exista. CREATE EXTERNAL TABLE não cria o caminho e a pasta.

Se especificar LOCATION que é uma pasta, uma consulta PolyBase que seleciona da tabela externa recupera ficheiros da pasta e de todas as suas subpastas. Assim como o Hadoop, o PolyBase não retorna pastas ocultas. Também não devolve ficheiros cujo nome começa por sublinhado (_) ou ponto (.).

No exemplo de imagem seguinte, se LOCATION='/webdata/', uma consulta PolyBase devolve linhas de mydata.txt e mydata2.txt. Não retorna mydata3.txt porque está numa subpasta de uma pasta oculta, e não retorna _hidden.txt porque é um ficheiro oculto.

Diagrama de pastas e dados de arquivos para tabelas externas.

Para alterar o padrão e ler apenas a partir da pasta raiz, defina o atributo <polybase.recursive.traversal> como 'false' no arquivo de configuração core-site.xml. Esse arquivo está localizado em <SqlBinRoot>\PolyBase\Hadoop\Conf\ sob a raiz bin do SQL Server. Por exemplo, C:\Program Files\Microsoft SQL Server\MSSQL13.XD14\MSSQL\Binn\.

DATA_SOURCE = external_data_source_name

Especifica o nome da fonte de dados externa que contém o local dos dados externos. Esse local é um Hadoop ou um Armazenamento de Blob do Azure. Para criar uma fonte de dados externa, use CRIAR FONTE DE DADOS EXTERNA.

FILE_FORMAT = external_file_format_name

Especifica o nome do objeto de formato de arquivo externo que armazena o tipo de arquivo e o método de compactação para os dados externos. Para criar um formato de arquivo externo, use CREATE EXTERNAL FILE FORMAT.

Opções REJEITAR

Esta opção só pode ser usada com fontes de dados externas onde TYPE = HADOOP.

Pode especificar os parâmetros de rejeição que determinam como o PolyBase lida com registos sujos que recupera da fonte de dados externa. Um registo de dados é considerado "sujo" se os tipos de dados reais ou o número de colunas não corresponderem às definições de coluna da tabela externa.

Quando você não especifica ou altera valores de rejeição, o PolyBase usa valores padrão. Esta informação sobre os parâmetros de rejeição é armazenada como metadados adicionais quando cria uma tabela externa com CREATE EXTERNAL TABLE a instrução. Quando uma instrução ou SELECT INTO SELECT instrução futura SELECT seleciona dados da tabela externa, o PolyBase usa as opções de rejeição para determinar o número ou percentagem de linhas que podem ser rejeitadas antes que a consulta real falhe. A consulta devolve resultados (parciais) até que o limiar de rejeição seja ultrapassado. Em seguida, ele falha com a mensagem de erro apropriada.

REJECT_TYPE = { valor | percentagem }

Esclarece se a REJECT_VALUE opção é especificada como um valor literal ou uma porcentagem.

  • valor

    REJECT_VALUE é um valor literal, não uma percentagem. A consulta PolyBase falha quando o número de linhas rejeitadas excede reject_value.

    Por exemplo, se REJECT_VALUE = 5 e REJECT_TYPE = value, a consulta PolyBase SELECT falha após cinco linhas serem rejeitadas.

  • percentagem

    REJECT_VALUE é uma percentagem, não um valor literal. Uma consulta PolyBase falha quando a percentagem de linhas falhadas excede reject_value. A percentagem de linhas com falha é calculada em intervalos.

REJECT_VALUE = reject_value

Especifica o valor ou a porcentagem de linhas que podem ser rejeitadas antes que a consulta falhe.

Para REJECT_TYPE = value, reject_value deve ser um número inteiro entre 0 e 2.147.483.647.

Para REJECT_TYPE = percentage, reject_value deve ser um flutuador entre 0 e 100.

REJECT_SAMPLE_VALUE = reject_sample_value

Este atributo é necessário quando você especifica REJECT_TYPE = percentage. Ele determina o número de linhas a serem recuperadas antes que o PolyBase recalcule a porcentagem de linhas rejeitadas.

O parâmetro reject_sample_value deve ser um número inteiro entre 0 e 2.147.483.647.

Por exemplo, se REJECT_SAMPLE_VALUE = 1000, o PolyBase calcula a percentagem de linhas falhadas depois de ter tentado importar 1.000 linhas do ficheiro de dados externo. Se a porcentagem de linhas com falha for menor que reject_value, o PolyBase tentará recuperar outras 1.000 linhas. Ele continua a recalcular a porcentagem de linhas com falha depois de tentar importar cada 1.000 linhas adicionais.

Observação

Como o PolyBase calcula a porcentagem de linhas com falha em intervalos, a porcentagem real de linhas com falha pode exceder reject_value.

Exemplo

Este exemplo mostra como as três REJECT opções interagem entre si. Por exemplo, se REJECT_TYPE = percentage, REJECT_VALUE = 30e REJECT_SAMPLE_VALUE = 100, o seguinte cenário pode ocorrer:

  • O PolyBase tenta recuperar as primeiras 100 linhas; 25 reprovam e 75 conseguem.
  • A porcentagem de linhas com falha é calculada como 25%, que é menor do que o valor de rejeição de 30%. Como resultado, o PolyBase continua recuperando dados da fonte de dados externa.
  • O PolyBase tenta carregar as próximas 100 linhas; Desta vez, 25 linhas são bem-sucedidas e 75 linhas falham.
  • A porcentagem de linhas com falha é recalculada como 50%. A porcentagem de linhas com falha excedeu o valor de rejeição de 30%.
  • A consulta PolyBase falha com 50% linhas rejeitadas depois de tentar retornar as primeiras 200 linhas. As linhas correspondentes são devolvidas antes de a consulta PolyBase detetar que o limiar de rejeição foi ultrapassado.

Permissões

Requer estas permissões de usuário:

  • CREATE TABLE
  • ALTER ANY SCHEMA
  • ALTER ANY EXTERNAL DATA SOURCE
  • ALTER ANY EXTERNAL FILE FORMAT
  • CONTROL DATABASE

Observe que o logon que cria a fonte de dados externa deve ter permissão para ler e gravar na fonte de dados externa, localizada no Hadoop ou no Armazenamento de Blobs do Azure.

Importante

A ALTER ANY EXTERNAL DATA SOURCE permissão concede a qualquer principal a capacidade de criar e modificar qualquer objeto fonte de dados externo e, por isso, também concede a capacidade de aceder a todas as credenciais com âmbito de base de dados na base de dados. Essa permissão deve ser considerada altamente privilegiada e, portanto, deve ser concedida apenas a entidades confiáveis no sistema.

Tratamento de erros

Ao executar a instrução CREATE EXTERNAL TABLE, o PolyBase tenta se conectar à fonte de dados externa. Se a tentativa de ligação falhar, a instrução falha e a tabela externa não é criada. Pode levar um minuto ou mais para que o comando falhe, já que o PolyBase tenta novamente a conexão antes de eventualmente falhar na consulta.

Comentários

Em cenários de consulta ad hoc, como SELECT FROM EXTERNAL TABLE, o PolyBase armazena as linhas recuperadas da fonte de dados externa em uma tabela temporária. Após a conclusão da consulta, o PolyBase remove e exclui a tabela temporária. Nenhum dado permanente é armazenado em tabelas SQL.

Em contraste, no cenário de importação, como SELECT INTO FROM EXTERNAL TABLE, o PolyBase armazena as linhas que são recuperadas da fonte de dados externa como dados permanentes na tabela SQL. A nova tabela é criada durante a execução da consulta quando o PolyBase recupera os dados externos.

O PolyBase pode enviar parte da computação da consulta para o Hadoop para melhorar o desempenho da consulta. Esta ação é conhecida como empurrar de predicado. Para habilitá-lo, especifique a opção de local do gerenciador de recursos do Hadoop em CREATE EXTERNAL DATA SOURCE.

Você pode criar muitas tabelas externas que fazem referência à mesma fonte de dados externa ou a fontes de dados externas diferentes.

Limitações

Como os dados de uma tabela externa não estão sob controlo direto de gestão do dispositivo, podem ser alterados ou removidos a qualquer momento por um processo externo. Como resultado, não é garantido que os resultados da consulta em uma tabela externa sejam determinísticos. A mesma consulta pode retornar resultados diferentes cada vez que é executada em uma tabela externa. Da mesma forma, uma consulta pode falhar se os dados externos forem movidos ou removidos.

Você pode criar várias tabelas externas que fazem referência a diferentes fontes de dados externas. Se você executar consultas simultaneamente em diferentes fontes de dados Hadoop, cada fonte Hadoop deverá usar a mesma definição de configuração do servidor 'conectividade hadoop'. Por exemplo, não é possível executar simultaneamente uma consulta em um cluster Hadoop do Cloudera e em um cluster Hadoop do Hortonworks, pois eles usam definições de configuração diferentes. Para as definições de configuração e combinações suportadas, veja Configuração de conectividade PolyBase.

Somente estas instruções DDL (Data Definition Language) são permitidas em tabelas externas:

  • CREATE TABLE e DROP TABLE
  • CREATE STATISTICS e DROP STATISTICS
  • CREATE VIEW e DROP VIEW

Construções e operações não suportadas:

  • Uma DEFAULT restrição nas colunas externas da tabela
  • Operações DML (Data Manipulation Language) de exclusão, inserção e atualização
  • Mascaramento de dados dinâmicos em colunas de tabelas externas

Limitações de consulta

O PolyBase pode consumir um máximo de 33 mil arquivos por pasta ao executar 32 consultas PolyBase simultâneas. Este número máximo inclui ficheiros e subpastas em cada pasta HDFS. Se o grau de simultaneidade for inferior a 32, um usuário pode executar consultas PolyBase em pastas no HDFS que contenham mais de 33k arquivos. Recomendamos que você mantenha os caminhos de arquivos externos curtos e não use mais de 30 mil arquivos por pasta HDFS. Quando muitos arquivos são referenciados, uma exceção de falta de memória da Java Virtual Machine (JVM) pode ocorrer.

Limitações de largura da tabela

No SQL Server 2016 (13.x), o PolyBase tem um limite de largura de linha de 32 KB baseado no tamanho máximo de uma única linha válida por definição de tabela. Se a soma do esquema de coluna for maior que 32 KB, o PolyBase não poderá consultar os dados.

No Azure Synapse Analytics, essa limitação foi aumentada para 1 MB.

Limitações do tipo de dados

Os seguintes tipos de dados não podem ser usados em tabelas externas PolyBase:

  • geografia
  • geometria
  • Hierarquia
  • imagem
  • texto
  • ntexto
  • XML
  • Qualquer tipo definido pelo usuário

Bloqueio

Bloqueio partilhado no SCHEMARESOLUTION objeto.

Segurança

Os arquivos de dados de uma tabela externa são armazenados no Hadoop ou no Armazenamento de Blobs do Azure. Esses arquivos de dados são criados e gerenciados por seus próprios processos. É sua responsabilidade gerir a segurança dos dados externos.

Exemplos

Um. Junte dados do HDFS aos dados do Analytics Platform System

SELECT cs.user_ip
FROM ClickStream AS cs
     INNER JOIN [User] AS u
         ON cs.user_ip = u.user_ip
WHERE cs.url = 'www.microsoft.com';

B. Importar dados de linha do HDFS para uma tabela distribuída do Analytics Platform System

CREATE TABLE ClickStream_PDW
WITH (DISTRIBUTION = HASH(url)) AS
SELECT url,
       event_date,
       user_ip
FROM ClickStream;

C. Importar dados de linha do HDFS para uma tabela replicada do Analytics Platform System

CREATE TABLE ClickStream_PDW
WITH (DISTRIBUTION = REPLICATE) AS
SELECT url,
       event_date,
       user_ip
FROM ClickStream;

* Instância Gerenciada SQL do Azure *  

Plataforma de análise
Sistema (PDW)

 

Visão geral: Instância gerenciada SQL do Azure

Cria uma tabela de dados externos na Instância Gerenciada SQL do Azure. Para obter informações completas, consulte Virtualização de dados com a Instância Gerenciada SQL do Azure.

A virtualização de dados no Azure SQL Managed Instance permite acesso a dados externos em vários formatos de ficheiro no Azure Data Lake Storage Gen2 ou Azure Blob Storage, e para os consultar com instruções T-SQL, chegando mesmo a combinar dados com dados relacionais armazenados localmente através de joins.

Veja também CRIAR FONTE DE DADOS EXTERNA e DROP EXTERNAL TABLE.

Sintaxe

CREATE EXTERNAL TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
    ( <column_definition> [ , ...n ] )
    WITH (
        LOCATION = 'filepath' ,
        DATA_SOURCE = external_data_source_name ,
        FILE_FORMAT = external_file_format_name
    )
[ ; ]

<column_definition> ::=
column_name <data_type>
    [ COLLATE collation_name ]
    [ NULL | NOT NULL ]

Argumentos

{ database_name.nome_schema.nome_de_tabela | schema_name.nome_de_tabela | table_name }

O nome de uma a três partes da tabela a ser criada.

Para uma tabela externa, apenas os metadados da tabela, juntamente com estatísticas básicas sobre o arquivo ou pasta referenciada no Azure Data Lake ou no Armazenamento de Blobs do Azure. Nenhum dado real é movido ou armazenado quando tabelas externas são criadas.

Importante

Para melhor desempenho, se o driver de fonte de dados externo suportar um nome de três partes, deve fornecer o nome de três partes.

< > column_definition [ ,... n ]

CREATE EXTERNAL TABLE suporta a capacidade de configurar o nome da coluna, o tipo de dados, a anulabilidade e o agrupamento. Não é possível usar o DEFAULT CONSTRAINT em tabelas externas.

As definições de coluna, incluindo os tipos de dados e o número de colunas, devem corresponder aos dados nos arquivos externos. Se houver uma incompatibilidade, as linhas do arquivo serão rejeitadas ao consultar os dados reais.

LOCALIZAÇÃO = 'folder_or_filepath'

Especifica a pasta ou o caminho do arquivo e o nome do arquivo para os dados reais no Azure Data Lake ou no Armazenamento de Blobs do Azure. O local começa a partir da pasta raiz. A pasta raiz é o local de dados especificado na fonte de dados externa. CREATE EXTERNAL TABLE não cria o caminho e a pasta.

Se especificares LOCATION que é uma pasta, a consulta da Instância Gerida SQL do Azure que seleciona da tabela externa recupera ficheiros da pasta, mas não todas as suas subpastas.

O Azure SQL Managed Instance não consegue encontrar ficheiros em subpastas ou pastas ocultas. Também não devolve ficheiros cujo nome começa por sublinhado (_) ou ponto (.).

No exemplo da imagem seguinte, se LOCATION='/webdata/', uma consulta devolve linhas de mydata.txt. Não retorna mydata2.txt porque está numa subpasta, não retorna mydata3.txt porque está numa pasta oculta, e não retorna _hidden.txt porque é um ficheiro oculto.

Diagrama de pastas e dados de arquivos para tabelas externas.

DATA_SOURCE = external_data_source_name

Especifica o nome da fonte de dados externa que contém o local dos dados externos. Este local fica no Azure Data Lake. Para criar uma fonte de dados externa, use CRIAR FONTE DE DADOS EXTERNA.

FILE_FORMAT = external_file_format_name

Especifica o nome do objeto de formato de arquivo externo que armazena o tipo de arquivo e o método de compactação para os dados externos. Para criar um formato de arquivo externo, use CREATE EXTERNAL FILE FORMAT.

Permissões

Requer estas permissões de usuário:

  • CREATE TABLE
  • ALTER ANY SCHEMA
  • ALTER ANY EXTERNAL DATA SOURCE
  • ALTER ANY EXTERNAL FILE FORMAT
  • CONTROL DATABASE São necessárias permissões apenas para criar a chave mestra, credencial com âmbito de base de dados e fonte de dados externa.

Observe que o logon que cria a fonte de dados externa deve ter permissão para ler e gravar na fonte de dados externa, localizada no Hadoop ou no Armazenamento de Blobs do Azure.

Importante

A ALTER ANY EXTERNAL DATA SOURCE permissão concede a qualquer principal a capacidade de criar e modificar qualquer objeto fonte de dados externo e, por isso, também concede a capacidade de aceder a todas as credenciais com âmbito de base de dados na base de dados. Essa permissão deve ser considerada altamente privilegiada e, portanto, deve ser concedida apenas a entidades confiáveis no sistema.

Comentários

Em cenários de consulta ad hoc, como SELECT FROM EXTERNAL TABLE, as linhas recuperadas da fonte de dados externa são armazenadas em uma tabela temporária. Após a conclusão da consulta, as linhas são removidas e a tabela temporária é excluída. Nenhum dado permanente é armazenado em tabelas SQL.

Por outro lado, no cenário de importação, como SELECT INTO FROM EXTERNAL TABLE, as linhas recuperadas da fonte de dados externa são armazenadas como dados permanentes na tabela SQL. A nova tabela é criada durante a execução da consulta quando os dados externos são recuperados.

Atualmente, a virtualização de dados com a Instância Gerenciada SQL do Azure é somente leitura.

Você pode criar muitas tabelas externas que fazem referência à mesma fonte de dados externa ou a fontes de dados externas diferentes.

Limitações

Como os dados de uma tabela externa não estão sob controlo direto de gestão da Azure SQL Managed Instance, podem ser alterados ou removidos a qualquer momento por um processo externo. Como resultado, não é garantido que os resultados da consulta em uma tabela externa sejam determinísticos. A mesma consulta pode retornar resultados diferentes cada vez que é executada em uma tabela externa. Da mesma forma, uma consulta pode falhar se os dados externos forem movidos ou removidos.

Você pode criar várias tabelas externas que fazem referência a diferentes fontes de dados externas.

Somente estas instruções DDL (Data Definition Language) são permitidas em tabelas externas:

  • CREATE TABLE e DROP TABLE
  • CREATE STATISTICS e DROP STATISTICS
  • CREATE VIEW e DROP VIEW

Construções e operações não suportadas:

  • A DEFAULT restrição nas colunas externas da tabela
  • Operações DML (Data Manipulation Language) de exclusão, inserção e atualização

Limitações de largura da tabela

O limite de largura de linha de 1 MB baseia-se no tamanho máximo de uma única linha válida por definição de tabela. Se a soma do esquema da coluna for superior a 1 MB, as consultas de virtualização de dados falham.

Limitações do tipo de dados

Os seguintes tipos de dados não podem ser usados em tabelas externas no Azure SQL Managed Instance:

  • geografia
  • geometria
  • Hierarquia
  • imagem
  • texto
  • ntexto
  • XML
  • Json
  • Qualquer tipo definido pelo usuário

Bloqueio

Bloqueio partilhado no SCHEMARESOLUTION objeto.

Exemplos

Um. Consultar dados externos da Instância Gerenciada SQL do Azure com uma tabela externa

Para obter mais exemplos, consulte CREATE EXTERNAL DATA SOURCE ou consulte Data virtualization with Azure SQL Managed Instance.

  1. Crie a chave mestra do banco de dados, se ela não existir.

    -- Optional: Create MASTER KEY if it doesn't exist in the database:
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
    
  2. Crie a credencial com escopo do banco de dados usando um token SAS. Você também pode usar uma identidade gerenciada.

    CREATE DATABASE SCOPED CREDENTIAL MyCredential
    WITH
        IDENTITY = 'SHARED ACCESS SIGNATURE',
        SECRET = '<KEY>'; --Removing leading '?'
    
  3. Crie a fonte de dados externa usando a credencial.

    --Create external data source pointing to the file path, and referencing database-scoped credential:
    CREATE EXTERNAL DATA SOURCE MyPrivateExternalDataSource
    WITH (
        LOCATION = 'abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest'
        CREDENTIAL = [MyCredential]
    );
    
  4. Crie um EXTERNAL FILE FORMAT e um EXTERNAL TABLE, para consultar os dados como se fossem uma tabela local.

    -- Or, create an EXTERNAL FILE FORMAT and an EXTERNAL TABLE
    
    --Create external file format
    CREATE EXTERNAL FILE FORMAT DemoFileFormat
    WITH (
        FORMAT_TYPE = PARQUET
    );
    
    --Create external table:
    CREATE EXTERNAL TABLE tbl_TaxiRides
    (
        vendorID VARCHAR (100) COLLATE Latin1_General_BIN2,
        tpepPickupDateTime DATETIME2,
        tpepDropoffDateTime DATETIME2,
        passengerCount INT,
        tripDistance FLOAT,
        puLocationId VARCHAR (8000),
        doLocationId VARCHAR (8000),
        startLon FLOAT,
        startLat FLOAT,
        endLon FLOAT,
        endLat FLOAT,
        rateCodeId SMALLINT,
        storeAndFwdFlag VARCHAR (8000),
        paymentType VARCHAR (8000),
        fareAmount FLOAT,
        extra FLOAT,
        mtaTax FLOAT,
        improvementSurcharge VARCHAR (8000),
        tipAmount FLOAT,
        tollsAmount FLOAT,
        totalAmount FLOAT
    )
    WITH (
        DATA_SOURCE = NYCTaxiExternalDataSource,
        LOCATION = 'yellow/puYear = */puMonth = */*.parquet',
        FILE_FORMAT = MyFileFormat
    );
    
    --Then, query the data via an external table with T-SQL:
    SELECT TOP 10 *
    FROM tbl_TaxiRides;
    

Saiba mais sobre tabelas externas e conceitos relacionados nos seguintes artigos:

 

Visão geral: Microsoft Fabric

Aplica-se a: Microsoft Fabric Data Warehouse

Para obter mais informações e exemplos no OPENROWSET Fabric Data Warehouse, consulte:

da Instância Gerenciada SQL do Azure

* Base de dados SQL Fabric *  

Plataforma de análise
Sistema (PDW)

 

Visão geral: Base de dados SQL no Microsoft Fabric

Cria uma tabela externa.

Para utilização com virtualização de dados (pré-visualização).

Sintaxe

CREATE EXTERNAL TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
    ( <column_definition> [ , ...n ] )
    WITH (
        LOCATION = 'filepath' ,
        DATA_SOURCE = external_data_source_name ,
        FILE_FORMAT = external_file_format_name
    )
[ ; ]

<column_definition> ::=
column_name <data_type>
    [ COLLATE collation_name ]
    [ NULL | NOT NULL ]

Argumentos

{ database_name.nome_schema.nome_de_tabela | schema_name.nome_de_tabela | table_name }

O nome de uma a três partes da tabela a ser criada.

Para uma tabela externa, o SQL armazena apenas os metadados da tabela juntamente com estatísticas básicas sobre o ficheiro ou pasta. Nenhum dado real é movido ou armazenado na base de dados SQL no Fabric quando são criadas tabelas externas.

Importante

Para melhor desempenho, se o driver de fonte de dados externo suportar um nome de três partes, deve fornecer o nome de três partes.

< > column_definition [ ,... n ]

CREATE EXTERNAL TABLE suporta a capacidade de configurar o nome da coluna, o tipo de dados, a anulabilidade e o agrupamento. Não é possível usar o DEFAULT CONSTRAINT em tabelas externas. Estes tipos de dados não são suportados para colunas em tabelas externas:

  • geografia
  • geometria
  • Hierarquia
  • imagem
  • texto
  • ntexto
  • XML
  • Json
  • Qualquer tipo definido pelo usuário

As definições de coluna, incluindo os tipos de dados e o número de colunas, devem corresponder aos dados nos arquivos externos. Se houver uma incompatibilidade, as linhas do arquivo serão rejeitadas ao consultar os dados reais.

LOCALIZAÇÃO = 'folder_or_filepath'

Especifica a pasta ou o caminho do ficheiro e o nome do ficheiro para os dados reais no OneLake no Microsoft Fabric.

FONTE_DE_DADOS

DATA_SOURCE especifica o nome da fonte de dados externa que contém o local dos dados externos. Para criar uma fonte de dados externa, use CRIAR FONTE DE DADOS EXTERNA.

FILE_FORMAT = external_file_format_name

Especifica o nome do objeto de formato de arquivo externo que armazena o tipo de arquivo e o método de compactação para os dados externos. Para criar um formato de arquivo externo, use CREATE EXTERNAL FILE FORMAT.

Permissões

Os usuários com acesso à tabela externa obtêm automaticamente acesso às tabelas remotas subjacentes sob a credencial fornecida na definição de fonte de dados externa. Evite a elevação indesejada de privilégios por meio da credencial da fonte de dados externa. Usa GRANT ou REVOKE para uma mesa externa como se fosse uma mesa normal. Depois de definir sua fonte de dados externa e suas tabelas externas, agora você pode usar o T-SQL completo sobre suas tabelas externas.

CREATE EXTERNAL TABLE requer estas permissões de usuário:

  • CREATE TABLE
  • ALTER ANY SCHEMA
  • ALTER ANY EXTERNAL DATA SOURCE
  • ALTER ANY EXTERNAL FILE FORMAT
  • CONTROL DATABASE São necessárias permissões apenas para criar a chave mestra, credencial com âmbito de base de dados e fonte de dados externa.

O login que cria a fonte de dados externa deve ter permissão para ler e escrever na fonte de dados externa, localizada no Hadoop ou Azure Blob Storage.

Importante

A ALTER ANY EXTERNAL DATA SOURCE permissão concede a qualquer principal a capacidade de criar e modificar qualquer objeto fonte de dados externo e, por isso, também concede a capacidade de aceder a todas as credenciais com âmbito de base de dados na base de dados. Essa permissão deve ser considerada altamente privilegiada e, portanto, deve ser concedida apenas a entidades confiáveis no sistema.

Bloqueio

Bloqueio partilhado no SCHEMARESOLUTION objeto.

Comentários

Em cenários de consulta ad hoc, como SELECT FROM EXTERNAL TABLE, as linhas recuperadas da fonte de dados externa são armazenadas em uma tabela temporária. Após a conclusão da consulta, as linhas são removidas e a tabela temporária é excluída. Nenhum dado permanente é armazenado em tabelas SQL.

Por outro lado, no cenário de importação, como SELECT INTO FROM EXTERNAL TABLE, as linhas recuperadas da fonte de dados externa são armazenadas como dados permanentes na tabela SQL. A nova tabela é criada durante a execução da consulta quando os dados externos são recuperados.

A base de dados SQL do Fabric só suporta o OneLake no Microsoft Fabric como fonte de dados.

Você pode criar muitas tabelas externas que fazem referência à mesma fonte de dados externa ou a fontes de dados externas diferentes.

Limitações de largura da tabela

O limite de largura de linha de 1 MB baseia-se no tamanho máximo de uma única linha válida por definição de tabela. Se a soma do esquema da coluna for superior a 1 MB, as consultas de virtualização de dados falham.

Tratamento de erros

Durante a execução da CREATE EXTERNAL TABLE instrução, se a tentativa de ligação falhar, a instrução falha e a tabela externa não é criada. Pode levar um minuto ou mais para que o comando falhe, já que o Banco de dados SQL tenta novamente a conexão antes de eventualmente falhar na consulta.

Limitações

Atualmente, ao criar uma Tabela Externa que aponta para um ficheiro CSV na base de dados Fabric SQL, deve fornecer o esquema da tabela, por exemplo: SELECT * FROM [schema].[table_name]. Caso contrário, é exibida a seguinte mensagem de erro:

Msg 208, Level 16, State 160, Line 1: Invalid object name 'SQLdatabase-id'

Como os dados de uma tabela externa não estão sob controlo direto de gestão do Motor de Base de Dados, podem ser alterados ou removidos a qualquer momento por um processo externo. Como resultado, não é garantido que os resultados da consulta em uma tabela externa sejam determinísticos. A mesma consulta pode retornar resultados diferentes cada vez que é executada em uma tabela externa. Da mesma forma, uma consulta pode falhar se os dados externos forem movidos ou removidos.

Você pode criar várias tabelas externas que fazem referência a diferentes fontes de dados externas.

Somente estas instruções DDL (Data Definition Language) são permitidas em tabelas externas:

  • CREATE TABLE e DROP TABLE
  • CREATE STATISTICS e DROP STATISTICS
  • CREATE VIEW e DROP VIEW

Construções e operações não suportadas:

  • A DEFAULT restrição em colunas de tabela externas.
  • Operações DML (Data Manipulation Language) de exclusão, inserção e atualização.

Exemplos

Um. Crie uma tabela externa direcionada para um ficheiro Parquet disponível no OneLake no Microsoft Fabric

CREATE EXTERNAL DATA SOURCE [MainLakeHouse]
WITH (
    LOCATION = 'abfss://<WorkspaceID>@<tenant>.dfs.fabric.microsoft.com/<Lakehouse_id'
);
GO

CREATE EXTERNAL FILE FORMAT [Parquetff]
WITH (
    FORMAT_TYPE = PARQUET
);
GO

CREATE EXTERNAL TABLE Customer_parquet
(
    CustomerKey INT,
    GeoAreaKey INT,
    StartDT DATETIME2,
    EndDT DATETIME2,
    Continent NVARCHAR (50),
    Gender NVARCHAR (10),
    Title NVARCHAR (10),
    GivenName NVARCHAR (100),
    MiddleInitial VARCHAR (2),
    Surname NVARCHAR (100),
    StreetAddress NVARCHAR (200),
    City NVARCHAR (100),
    State NVARCHAR (100),
    StateFull NVARCHAR (100),
    ZipCode NVARCHAR (20),
    Country_Region NCHAR (2),
    CountryFull NVARCHAR (100),
    Birthday DATETIME2,
    Age INT,
    Occupation NVARCHAR (100),
    Company NVARCHAR (100),
    Vehicle NVARCHAR (100),
    Latitude DECIMAL (10, 6),
    Longitude DECIMAL (10, 6)
)
WITH (
    DATA_SOURCE = MainLakeHouse,
    LOCATION = '/Files/parquet/customer.parquet',
    FILE_FORMAT = [parquetff]
);
GO

SELECT *
FROM Customer_parquet;