Visão geral da consulta elástica do Banco de Dados SQL do Azure (visualização)Azure SQL Database elastic query overview (preview)

O recurso de consulta elástica (em visualização) permite que você execute uma consulta Transact-SQL que abrange vários bancos de dados no Banco de Dados SQL do Azure.The elastic query feature (in preview) enables you to run a Transact-SQL query that spans multiple databases in Azure SQL Database. Ele permite que você realize consultas entre bancos de dados para acessar tabelas remotas e se conectar a ferramentas da Microsoft e de terceiros (Excel, Power BI, Tableau, etc.) para consultar em diferentes camadas de dados com vários bancos de dados.It allows you to perform cross-database queries to access remote tables, and to connect Microsoft and third-party tools (Excel, Power BI, Tableau, etc.) to query across data tiers with multiple databases. Usando esse recurso, você pode escalar horizontalmente para camadas de dados grandes no Banco de Dados SQL e visualizar os resultados em relatórios do BI (business intelligence).Using this feature, you can scale out queries to large data tiers in SQL Database and visualize the results in business intelligence (BI) reports.

Por que usar consultas elásticasWhy use elastic queries

Banco de Dados SQL do AzureAzure SQL Database

Consulte em bancos de dados SQL do Azure totalmente em T-SQL.Query across Azure SQL databases completely in T-SQL. Isso permite consultas de apenas leitura de bancos de dados remotos e fornece uma opção para que os clientes atuais do SQL Server local migrem aplicativos que usam nomes de três e quatro partes ou um servidor vinculado ao Banco de Dados SQL.This allows for read-only querying of remote databases and provides an option for current on-premises SQL Server customers to migrate applications using three- and four-part names or linked server to SQL DB.

Disponível no nível StandardAvailable on standard tier

Há suporte para a consulta elástica nas camadas de serviço Standard e Premium.Elastic query is supported on both the Standard and Premium service tiers. Veja a seção de Limitações da versão prévia abaixo sobre as limitações de desempenho das camadas de serviço inferiores.See the section on Preview Limitations below on performance limitations for lower service tiers.

Parâmetros de envio por push para bancos de dados remotosPush parameters to remote databases

As consultas elásticas agora podem enviar por push parâmetros SQL para os bancos de dados remotos para execução.Elastic queries can now push SQL parameters to the remote databases for execution.

Execução de procedimento armazenadoStored procedure execution

Execute chamadas remotas de procedimento armazenado ou funções remotas usando sp_execute _remote.Execute remote stored procedure calls or remote functions using sp_execute _remote.

FlexibilidadeFlexibility

Tabelas externas com elástica consulta podem fazer referência a tabelas remotas com um nome de tabela ou um esquema diferente.External tables with elastic query can refer to remote tables with a different schema or table name.

Cenários de consulta elásticaElastic query scenarios

O objetivo é facilitar cenários de consultas em que vários bancos de dados acrescentam linhas em um único resultado geral.The goal is to facilitate querying scenarios where multiple databases contribute rows into a single overall result. A consulta pode ser redigida pelo usuário ou pelo aplicativo diretamente, ou indiretamente por meio de ferramentas conectadas ao banco de dados.The query can either be composed by the user or application directly, or indirectly through tools that are connected to the database. Isso é especialmente útil ao criar relatórios usando as ferramentas comerciais de BI ou de integração de dados, ou então qualquer aplicativo que não possa ser alterado.This is especially useful when creating reports, using commercial BI or data integration tools, or any application that cannot be changed. Com uma consulta elástica, é possível consultar vários bancos de dados usando a experiência familiar de conectividade do SQL Server em ferramentas como o Excel, Power BI, Tableau ou Cognos.With an elastic query, you can query across several databases using the familiar SQL Server connectivity experience in tools such as Excel, Power BI, Tableau, or Cognos. Uma consulta elástica facilita o acesso a um conjunto inteiro de bancos de dados por meio de consultas emitidas pelo SQL Server Management Studio ou Visual Studio, além de facilitar a consulta entre bancos de dados do Entity Framework ou de outros ambientes de ORM.An elastic query allows easy access to an entire collection of databases through queries issued by SQL Server Management Studio or Visual Studio, and facilitates cross-database querying from Entity Framework or other ORM environments. A Figura 1 mostra um cenário em que um aplicativo de nuvem existente (que usa a biblioteca de clientes do banco de dados elástico) se baseia em uma camada de dados escalonável, e uma consulta elástica é usada para os relatórios entre bancos de dados.Figure 1 shows a scenario where an existing cloud application (which uses the elastic database client library) builds on a scaled-out data tier, and an elastic query is used for cross-database reporting.

Figura 1 Consulta elástica usada na camada de dados escalada horizontalmenteFigure 1 Elastic query used on scaled-out data tier

Consulta elástica usada na camada de dados escalada horizontalmente

Os cenários do cliente para a consulta elástica são caracterizados pelas seguintes topologias:Customer scenarios for elastic query are characterized by the following topologies:

  • Particionamento vertical - consultas entre banco de dados (Topologia 1): Os dados são particionados verticalmente entre vários bancos de dados em uma camada de dados.Vertical partitioning - Cross-database queries (Topology 1): The data is partitioned vertically between a number of databases in a data tier. Geralmente, diferentes conjuntos de tabelas residem em bancos de dados diferentes.Typically, different sets of tables reside on different databases. Isso significa que o esquema é diferente em bancos de dados diferentes.That means that the schema is different on different databases. Por exemplo, todas as tabelas de inventário estão em um banco de dados, enquanto todas as tabelas relacionadas à contabilidade estão em um segundo banco de dados.For instance, all tables for inventory are on one database while all accounting-related tables are on a second database. Casos de uso comuns com esta topologia exigem uma consulta ou compilação de relatórios entre tabelas em vários bancos de dados.Common use cases with this topology require one to query across or to compile reports across tables in several databases.
  • Particionamento Horizontal - Fragmentação (Topologia 2): Os dados são particionados horizontalmente para distribuir as linhas em uma camada de dados escalada horizontalmente.Horizontal Partitioning - Sharding (Topology 2): Data is partitioned horizontally to distribute rows across a scaled out data tier. Com essa abordagem, o esquema é idêntico em todos os bancos de dados participantes.With this approach, the schema is identical on all participating databases. Essa abordagem também é chamada de “fragmentação”.This approach is also called “sharding”. A fragmentação pode ser executada e gerenciada com (1) as bibliotecas de ferramentas do banco de dados elástico ou com (2) a autofragmentação.Sharding can be performed and managed using (1) the elastic database tools libraries or (2) self-sharding. Uma consulta elástica é usada para consultar ou compilar relatórios em vários fragmentos.An elastic query is used to query or compile reports across many shards.

Observação

A consulta elástica funciona melhor em cenários de relatórios em que a maior parte do processamento (filtragem, agregação) pode ser executada no lado externo de origem.Elastic query works best for reporting scenarios where most of the processing (filtering, aggregation) can be performed on the external source side. Não é adequado para operações de ETL onde grande quantidade de dados está sendo transferida do banco de dados remoto.It is not suitable for ETL operations where large amount of data is being transferred from remote database(s). Para os cenários de cargas de trabalho de relatórios pesadas ou data warehouse com consultas mais complexas, considere também usar o SQL Data Warehouse do Azure.For heavy reporting workloads or data warehousing scenarios with more complex queries, also consider using Azure SQL Data Warehouse.

Particionamento vertical - consultas entre bancos de dadosVertical partitioning - cross-database queries

Para começar a codificar, veja Introdução à consulta entre bancos de dados (particionamento vertical).To begin coding, see Getting started with cross-database query (vertical partitioning).

Uma consulta elástica pode ser usada para disponibilizar os dados localizados em um Banco de Dados SQL para outros Bancos de Dados SQL.An elastic query can be used to make data located in a SQL database available to other SQL databases. Isso permite que consultas de um banco de dados façam referência a tabelas em qualquer outro Banco de Dados SQL remoto.This allows queries from one database to refer to tables in any other remote SQL database. A primeira etapa é definir uma fonte de dados externa para cada banco de dados remoto.The first step is to define an external data source for each remote database. A fonte de dados externa é definida no banco de dados local do qual você deseja obter acesso às tabelas localizadas no banco de dados remoto.The external data source is defined in the local database from which you want to gain access to tables located on the remote database. Não são necessárias alterações no banco de dados remoto.No changes are necessary on the remote database. Para cenários típicos de particionamento vertical em que bancos de dados diferentes têm esquemas diferentes, as consultas elásticas podem ser usadas para implementar casos de uso comuns, como o acesso aos dados de referência e consulta entre bancos de dados.For typical vertical partitioning scenarios where different databases have different schemas, elastic queries can be used to implement common use cases such as access to reference data and cross-database querying.

Importante

Você deve ter a permissão para ALTERAR QUALQUER FONTE DE DADOS EXTERNA.You must possess ALTER ANY EXTERNAL DATA SOURCE permission. Essa permissão está incluída na permissão ALTERAR BANCO DE DADOS.This permission is included with the ALTER DATABASE permission. As permissões para ALTERAR QUALQUER FONTE DE DADOS EXTERNA são necessárias para referenciar a fonte de dados subjacente.ALTER ANY EXTERNAL DATA SOURCE permissions are needed to refer to the underlying data source.

Dados de referência: A topologia é usada para o gerenciamento de dados de referência.Reference data: The topology is used for reference data management. Na figura abaixo, as duas tabelas (T1 e T2) com dados de referência são mantidas em um banco de dados dedicado.In the figure below, two tables (T1 and T2) with reference data are kept on a dedicated database. Com uma consulta elástica, agora você pode acessar as tabelas T1 e T2 remotamente em outros bancos de dados, como mostrado na figura.Using an elastic query, you can now access tables T1 and T2 remotely from other databases, as shown in the figure. Use a topologia 1 se as tabelas de referência forem pequenas ou se as consultas remotas na tabela de referência tiverem predicados seletivos.Use topology 1 if reference tables are small or remote queries into reference table have selective predicates.

Figura 2 Particionamento vertical - Usando a consulta elástica para consultar dados de referênciaFigure 2 Vertical partitioning - Using elastic query to query reference data

Particionamento vertical - Usando a consulta elástica para consultar dados de referência

Consultas entre bancos de dados: As consultas elásticas habilitam casos de uso que exigem consultas em vários Bancos de Dados SQL.Cross-database querying: Elastic queries enable use cases that require querying across several SQL databases. A Figura 3 mostra quatro bancos de dados diferentes: CRM, Inventário, RH e Produtos.Figure 3 shows four different databases: CRM, Inventory, HR, and Products. As consultas executadas em um banco de dados também precisam ter acesso a um ou todos os outros bancos de dados.Queries performed in one of the databases also need access to one or all the other databases. Com uma consulta elástica, é possível configurar o banco de dados para esse caso, executando algumas instruções DDL simples em cada um dos quatro bancos de dados.Using an elastic query, you can configure your database for this case by running a few simple DDL statements on each of the four databases. Após essa configuração única, o acesso a uma tabela remota é tão simples quanto fazer referência a uma tabela local de suas consultas T-SQL ou de suas ferramentas de BI.After this one-time configuration, access to a remote table is as simple as referring to a local table from your T-SQL queries or from your BI tools. Essa abordagem é recomendada se as consultas remotas não retornam grandes resultados.This approach is recommended if the remote queries do not return large results.

Figura 3 Particionamento vertical - Usando a consulta elástica para consultar vários bancos de dadosFigure 3 Vertical partitioning - Using elastic query to query across various databases

Particionamento vertical - Usando a consulta elástica para consultar vários bancos de dados

As seguintes etapas configuram consultas de banco de dados elástico para cenários de particionamento vertical que exigem o acesso a uma tabela localizada em um Banco de Dados SQL remoto com o mesmo esquema:The following steps configure elastic database queries for vertical partitioning scenarios that require access to a table located on remote SQL databases with the same schema:

Depois de executar as instruções DDL, você pode acessar a tabela remota “mytable” como se ela fosse uma tabela local.After running the DDL statements, you can access the remote table “mytable” as though it were a local table. O Banco de Dados SQL do Azure automaticamente abre uma conexão com o banco de dados remoto, processa a solicitação no banco de dados remoto e retorna os resultados.Azure SQL Database automatically opens a connection to the remote database, processes your request on the remote database, and returns the results.

Particionamento horizontal - fragmentaçãoHorizontal partitioning - sharding

O uso de uma consulta elástica para executar tarefas de relatórios em uma camada de dados fragmentados, ou seja, particionados horizontalmente requer um mapa de fragmentos de banco de dados elástico para representar os bancos de dados da camada de dados.Using elastic query to perform reporting tasks over a sharded, that is, horizontally partitioned, data tier requires an elastic database shard map to represent the databases of the data tier. Normalmente, apenas um único mapa de fragmentos é usado neste cenário, e um banco de dados dedicado com recursos de consulta elástica (nó de cabeçalho) serve como o ponto de entrada para consultas de relatórios.Typically, only a single shard map is used in this scenario and a dedicated database with elastic query capabilities (head node) serves as the entry point for reporting queries. Somente este banco de dados dedicado precisa ter acesso ao mapa de fragmentos.Only this dedicated database needs access to the shard map. A Figura 4 ilustra essa topologia e sua configuração com o banco de dados de consulta elástica e o mapa de fragmentos.Figure 4 illustrates this topology and its configuration with the elastic query database and shard map. Os bancos de dados na camada de dados podem ser de qualquer versão ou edição do Banco de Dados SQL do Azure.The databases in the data tier can be of any Azure SQL Database version or edition. Para obter mais informações sobre a biblioteca de clientes do banco de dados elástico e sobre como criar mapas de fragmentos, veja Gerenciamento do mapa de fragmentos.For more information about the elastic database client library and creating shard maps, see Shard map management.

Figura 4 Particionamento horizontal - Usando a consulta elástica para relatórios de camadas de dados fragmentadosFigure 4 Horizontal partitioning - Using elastic query for reporting over sharded data tiers

Particionamento horizontal - Usando a consulta elástica para relatórios de camadas de dados fragmentados

Observação

Consulta de banco de dados Elástico (nó principal) pode ser separado do banco de dados, ou pode ser o mesmo banco de dados que hospeda o mapa do fragmento.Elastic Query Database (head node) can be separate database, or it can be the same database that hosts the shard map. Seja qual for a configuração que você escolher, verifique se a camada de serviço e o tamanho da computação do banco de dados é alta o suficiente para lidar com o valor esperado de solicitações de logon/consulta.Whatever configuration you choose, make sure that service tier and compute size of that database is high enough to handle the expected amount of login/query requests.

As seguintes etapas configuram consultas de banco de dados elástico para cenários de particionamento horizontal que exigem o acesso a um conjunto de tabelas que estão localizadas (normalmente) em vários Bancos de Dados SQL remotos:The following steps configure elastic database queries for horizontal partitioning scenarios that require access to a set of tables located on (typically) several remote SQL databases:

Depois de realizar essas etapas, você pode acessar a tabela particionada horizontalmente “mytable” como se ela fosse uma tabela local.Once you have performed these steps, you can access the horizontally partitioned table “mytable” as though it were a local table. O Banco de Dados SQL do Azure automaticamente abre várias conexões paralelas com os bancos de dados remotos nos quais as tabelas estão armazenadas fisicamente, processa as solicitações nos bancos de dados remotos e retorna os resultados.Azure SQL Database automatically opens multiple parallel connections to the remote databases where the tables are physically stored, processes the requests on the remote databases, and returns the results. Mais informações sobre as etapas necessárias para o cenário de particionamento horizontal podem ser encontradas em consulta elástica para o particionamento horizontal.More information on the steps required for the horizontal partitioning scenario can be found in elastic query for horizontal partitioning.

Para começar a codificar, veja Introdução à consulta elástica para particionamento horizontal (fragmentação).To begin coding, see Getting started with elastic query for horizontal partitioning (sharding).

Consultas T-SQLT-SQL querying

Depois de definir as fontes de dados externas e as tabelas externas, é possível usar cadeias de conexão regulares do SQL Server para se conectar aos bancos de dados em que você definiu as tabelas externas.Once you have defined your external data sources and your external tables, you can use regular SQL Server connection strings to connect to the databases where you defined your external tables. Você pode então executar instruções T-SQL em suas tabelas externas nessa conexão com as limitações descritas abaixo.You can then run T-SQL statements over your external tables on that connection with the limitations outlined below. Você pode encontrar mais informações e exemplos de consultas do T-SQL em tópicos da documentação para particionamento horizontal e particionamento vertical.You can find more information and examples of T-SQL queries in the documentation topics for horizontal partitioning and vertical partitioning.

Conectividade de ferramentasConnectivity for tools

Você pode usar cadeias de conexão regulares do SQL Server para conectar seus aplicativos e ferramentas de BI ou de integração de dados a bancos de dados que têm tabelas externas.You can use regular SQL Server connection strings to connect your applications and BI or data integration tools to databases that have external tables. Certifique-se de que o SQL Server tem suporte como uma fonte de dados para a ferramenta.Make sure that SQL Server is supported as a data source for your tool. Depois de conectado, consulte o banco de dados de consulta elástica e as tabelas externas nesse banco de dados exatamente como você faria com qualquer outro banco de dados do SQL Server ao qual você se conecta com a sua ferramenta.Once connected, refer to the elastic query database and the external tables in that database just like you would do with any other SQL Server database that you connect to with your tool.

Importante

Atualmente não há suporte para a autenticação usando o Azure Active Directory com consultas elásticas.Authentication using Azure Active Directory with elastic queries is not currently supported.

CustoCost

A consulta elástica está incluída no custo dos bancos de dados do Banco de Dados SQL do Azure.Elastic query is included into the cost of Azure SQL Database databases. Observe que há suporte para as topologias nas quais os bancos de dados remotos residem em um datacenter diferente que o ponto de extremidade da consulta elástica, mas a saída de dados dos bancos de dados remotos é cobrada às taxas normais do Azure.Note that topologies where your remote databases are in a different data center than the elastic query endpoint are supported, but data egress from remote databases is charged regularly Azure rates.

Limitações de visualizaçãoPreview limitations

  • A execução da primeira consulta elástica pode levar alguns minutos na camada de serviço Standard.Running your first elastic query can take up to a few minutes on the Standard service tier. Esse tempo é necessário para carregar a funcionalidade de consulta elástica. O desempenho do carregamento melhora com as camadas de serviço e os tamanhos da computação mais altos.This time is necessary to load the elastic query functionality; loading performance improves with higher service tiers and compute sizes.
  • Ainda não há suporte para scripts de fontes de dados externas ou de tabelas externas do SSMS ou SSDT.Scripting of external data sources or external tables from SSMS or SSDT is not yet supported.
  • A Importação/Exportação do Banco de Dados SQL ainda não dá suporte a tabelas externas e fontes de dados externas.Import/Export for SQL DB does not yet support external data sources and external tables. Se precisar usar a função Importação/Exportação, remova esses objetos antes da exportação e depois recrie-os após a importação.If you need to use Import/Export, drop these objects before exporting and then re-create them after importing.
  • Atualmente, a consulta elástica dá suporte apenas ao acesso somente leitura para tabelas externas.Elastic query currently only supports read-only access to external tables. Você pode, no entanto, usar a funcionalidade completa do T-SQL no banco de dados no qual a tabela externa é definida.You can, however, use full T-SQL functionality on the database where the external table is defined. Isso pode ser útil para, por exemplo, manter os resultados temporários usando, por exemplo, SELECT <column_list> INTO <local_table>, ou para definir os procedimentos armazenados no banco de dados de consulta elástica que se referem a tabelas externas.This can be useful to, e.g., persist temporary results using, for example, SELECT <column_list> INTO <local_table>, or to define stored procedures on the elastic query database that refer to external tables.
  • Exceto nvarchar (max), os tipos LOB (incluindo tipos espaciais) não são suportados em definições de tabela externa.Except for nvarchar(max), LOB types (including spatial types) are not supported in external table definitions. Como uma solução alternativa, você pode criar uma exibição no banco de dados remoto que converte o tipo LOB em nvarchar(max), definir sua tabela externa na exibição em vez da tabela base e, em seguida, convertê-la novamente no tipo LOB original em suas consultas.As a workaround, you can create a view on the remote database that casts the LOB type into nvarchar(max), define your external table over the view instead of the base table and then cast it back into the original LOB type in your queries.
  • Colunas do tipo de dados nvarchar (max) no resultado configuram técnicas de envio de lote avançadas desabiliadas e podem afetar o desempenho da consulta para uma ordem de magnitude ou até mesmo duas ordens de magnitude no não canônicos casos de uso nos quais grandes quantidade de dados não agregados estão sendo transferidos como resultado da consulta.Columns of nvarchar(max) data type in result set disable advanced batching technics used in Elastic Query implementation and may affect performance of query for an order of magnitude, or even two orders of magnitude in non-canonical use cases where large amount of non-aggregated data is being transferred as a result of query.
  • Atualmente, não há suporte para estatísticas de coluna em tabelas externas.Column statistics over external tables are currently not supported. Há suporte para as estatísticas de tabelas, mas elas precisam ser criadas manualmente.Table statistics are supported, but need to be created manually.
  • A consulta elástica funciona apenas com o banco de dados SQL.Elastic query works with Azure SQL Database only. Você não pode usá-lo para consultar o SQL Server no local ou do SQL Server em uma VM.You cannot use it for querying on-premises SQL Server, or SQL Server in a VM.

ComentáriosFeedback

Compartilhe conosco seus comentários sobre sua experiência com as consultas elásticas abaixo, nos fóruns do MSDN ou no Stack Overflow.Share feedback on your experience with elastic queries with us below, on the MSDN forums, or on Stack Overflow. Estamos interessados em todos os tipos de comentários sobre o serviço (defeitos, pontos em aberto, lacunas do recurso).We are interested in all kinds of feedback about the service (defects, rough edges, feature gaps).

Próximas etapasNext steps