Conecte-se ao conteúdo do Banco de Dados SQL do Azure e indexe-o usando indexadores do Azure SearchConnect to and index Azure SQL Database content using Azure Search indexers

Antes de consultar um índice do Azure Search, você deve populá-lo com seus dados.Before you can query an Azure Search index, you must populate it with your data. Se os dados residirem em um banco de dados SQL do Azure, um indexador do Azure Search para o Banco de Dados SQL do Azure (ou em um indexador do SQL do Azure, para abreviar) poderá automatizar o processo de indexação, o que significa menos código para escrever e menos infraestrutura com a qual se preocupar.If the data lives in an Azure SQL database, an Azure Search indexer for Azure SQL Database (or Azure SQL indexer for short) can automate the indexing process, which means less code to write and less infrastructure to care about.

Este artigo aborda a mecânica do uso de indexadores, mas também descreve os recursos disponíveis apenas nos bancos de dados SQL do Azure (por exemplo, o controle de alterações integrado).This article covers the mechanics of using indexers, but also describes features only available with Azure SQL databases (for example, integrated change tracking).

Além dos bancos de dados SQL do Azure, o Azure Search fornece indexadores para o Azure Cosmos DB, o armazenamento de Blobs do Azure e o armazenamento de tabelas do Azure.In addition to Azure SQL databases, Azure Search provides indexers for Azure Cosmos DB, Azure Blob storage, and Azure table storage. Para solicitar suporte para outras fontes de dados, forneça seus comentários no fórum de comentários do Azure Search.To request support for other data sources, provide your feedback on the Azure Search feedback forum.

Indexadores e fontes de dadosIndexers and data sources

Uma fonte de dados especifica quais dados indexar, as credenciais para o acesso a dados e as políticas que identificam com eficiência as alterações nos dados (linhas novas, modificadas ou excluídas).A data source specifies which data to index, credentials for data access, and policies that efficiently identify changes in the data (new, modified, or deleted rows). Ela é definida como um recurso independente para que possa ser usada por vários indexadores.It's defined as an independent resource so that it can be used by multiple indexers.

Um indexador é um recurso que conecta uma fonte de dados individual a um índice de pesquisa de destino.An indexer is a resource that connects a single data source with a targeted search index. Um indexador é usado para as seguintes finalidades:An indexer is used in the following ways:

  • Executar uma cópia única dos dados para preenchimento de um índice.Perform a one-time copy of the data to populate an index.
  • Atualizar um índice com as alterações feitas na fonte de dados com base em uma agenda.Update an index with changes in the data source on a schedule.
  • Executar sob demanda para atualização de um índice, conforme necessário.Run on-demand to update an index as needed.

Um único indexador pode consumir apenas uma tabela ou exibição, mas você poderá criar vários indexadores, se desejar popular vários índices de pesquisa.A single indexer can only consume one table or view, but you can create multiple indexers if you want to populate multiple search indexes. Para obter mais informações sobre os conceitos, confira Operações do indexador: Fluxo de trabalho típico.For more information on concepts, see Indexer Operations: Typical workflow.

Você pode definir e configurar um indexador do SQL Azure usando:You can set up and configure an Azure SQL indexer using:

Neste artigo, usaremos a API REST para criar indexadores e fontes de dados.In this article, we'll use the REST API to create indexers and data sources.

Quando usar o Indexador SQL do AzureWhen to use Azure SQL Indexer

O uso do indexador do SQL Azure pode ou não ser apropriado dependendo de vários fatores relacionados aos seus dados.Depending on several factors relating to your data, the use of Azure SQL indexer may or may not be appropriate. Se os dados atenderem aos requisitos a seguir, você poderá usar o indexador SQL do Azure.If your data fits the following requirements, you can use Azure SQL indexer.

CritériosCriteria DetalhesDetails
Os dados são originados de uma única tabela ou exibiçãoData originates from a single table or view Se os dados estiverem espalhados por várias tabelas, você poderá criar uma única exibição dos dados.If the data is scattered across multiple tables, you can create a single view of the data. No entanto, se você usar uma exibição, não poderá usar a detecção de alteração integrada do SQL Server para atualizar um índice com alterações incrementais.However, if you use a view, you won’t be able to use SQL Server integrated change detection to refresh an index with incremental changes. Para obter mais informações, consulte Capturando linhas alteradas e excluídas abaixo.For more information, see Capturing Changed and Deleted Rows below.
Os tipos de dados são compatíveisData types are compatible Há suporte para a maioria, mas nem para todos os tipos SQL, em um índice do Azure Search.Most but not all the SQL types are supported in an Azure Search index. Para obter uma lista, consulte Mapeando tipos de dados.For a list, see Mapping data types.
A sincronização de dados em tempo real não é necessáriaReal-time data synchronization is not required Um indexador pode reindexar a tabela, no máximo, a cada cinco minutos.An indexer can reindex your table at most every five minutes. Se os dados forem alterados com frequência e as alterações precisarem ser refletidas no índice em questão de segundos ou minutos, recomendamos o uso da API REST ou do SDK do .NET para enviar por push as linhas atualizadas diretamente.If your data changes frequently, and the changes need to be reflected in the index within seconds or single minutes, we recommend using the REST API or .NET SDK to push updated rows directly.
A indexação incremental é possívelIncremental indexing is possible Se você tiver um conjunto de dados grande e um plano para executar o indexador com base em um agendamento, o Azure Search deverá poder identificar com eficiência as linhas novas, alteradas ou excluídas.If you have a large data set and plan to run the indexer on a schedule, Azure Search must be able to efficiently identify new, changed, or deleted rows. A indexação não incremental só será permitida se você estiver indexando sob demanda (não com base em um agendamento) ou menos de 100.000 linhas.Non-incremental indexing is only allowed if you're indexing on demand (not on schedule), or indexing fewer than 100,000 rows. Para obter mais informações, consulte Capturando linhas alteradas e excluídas abaixo.For more information, see Capturing Changed and Deleted Rows below.

Observação

O Azure Search somente dá suporte para a Autenticação do SQL Server.Azure Search supports SQL Server authentication only. Se você precisar de suporte para a Autenticação da Senha do Microsoft Azure Active Directory, votar nesta sugestão do UserVoice.If you require support for Azure Active Directory Password authentication, please vote for this UserVoice suggestion.

Criar um Indexador SQL do AzureCreate an Azure SQL Indexer

  1. Crie a fonte de dados:Create the data source:

     POST https://myservice.search.windows.net/datasources?api-version=2019-05-06
     Content-Type: application/json
     api-key: admin-key
    
     {
         "name" : "myazuresqldatasource",
         "type" : "azuresql",
         "credentials" : { "connectionString" : "Server=tcp:<your server>.database.windows.net,1433;Database=<your database>;User ID=<your user name>;Password=<your password>;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;" },
         "container" : { "name" : "name of the table or view that you want to index" }
     }
    

    Obtenha a cadeia de conexão no portal do Azure; use a opção ADO.NET connection string.You can get the connection string from the Azure portal; use the ADO.NET connection string option.

  2. Crie o índice de destino do Azure Search, caso ainda não tenha criado um.Create the target Azure Search index if you don’t have one already. Crie um índice usando o portal ou a API de Criação de Índices.You can create an index using the portal or the Create Index API. Verifique se o esquema de seu índice de destino é compatível com o esquema da tabela de origem – consulte mapeamento entre tipos de dados do Azure Search e SQL.Ensure that the schema of your target index is compatible with the schema of the source table - see mapping between SQL and Azure search data types.

  3. Crie o indexador dando um nome a ele e referenciando a fonte de dados e o índice de destino:Create the indexer by giving it a name and referencing the data source and target index:

    POST https://myservice.search.windows.net/indexers?api-version=2019-05-06
    Content-Type: application/json
    api-key: admin-key
    
    {
        "name" : "myindexer",
        "dataSourceName" : "myazuresqldatasource",
        "targetIndexName" : "target index name"
    }
    

Um indexador criado dessa maneira não tem um agenda.An indexer created in this way doesn’t have a schedule. Ele é executado automaticamente assim que é criado.It automatically runs once when it’s created. Você pode executá-lo novamente a qualquer momento usando uma solicitação executar indexador :You can run it again at any time using a run indexer request:

POST https://myservice.search.windows.net/indexers/myindexer/run?api-version=2019-05-06
api-key: admin-key

Você pode personalizar vários aspectos do comportamento do indexador, como tamanho do lote e quantos documentos podem ser ignorados antes de uma execução do indexador falhar.You can customize several aspects of indexer behavior, such as batch size and how many documents can be skipped before an indexer execution fails. Para obter mais informações, consulte Criar API do indexador.For more information, see Create Indexer API.

Talvez seja necessário permitir a conexão dos serviços do Azure ao banco de dados.You may need to allow Azure services to connect to your database. Confira Conexão a partir do Azure para obter instruções sobre como fazer isso.See Connecting From Azure for instructions on how to do that.

Para monitorar o status do indexador e o histórico de execução (número de itens indexados, falhas etc.), use uma solicitação status do indexador :To monitor the indexer status and execution history (number of items indexed, failures, etc.), use an indexer status request:

GET https://myservice.search.windows.net/indexers/myindexer/status?api-version=2019-05-06
api-key: admin-key

A resposta deve parecer com a seguinte:The response should look similar to the following:

{
    "\@odata.context":"https://myservice.search.windows.net/$metadata#Microsoft.Azure.Search.V2015_02_28.IndexerExecutionInfo",
    "status":"running",
    "lastResult": {
        "status":"success",
        "errorMessage":null,
        "startTime":"2015-02-21T00:23:24.957Z",
        "endTime":"2015-02-21T00:36:47.752Z",
        "errors":[],
        "itemsProcessed":1599501,
        "itemsFailed":0,
        "initialTrackingState":null,
        "finalTrackingState":null
    },
    "executionHistory":
    [
        {
            "status":"success",
            "errorMessage":null,
            "startTime":"2015-02-21T00:23:24.957Z",
            "endTime":"2015-02-21T00:36:47.752Z",
            "errors":[],
            "itemsProcessed":1599501,
            "itemsFailed":0,
            "initialTrackingState":null,
            "finalTrackingState":null
        },
        ... earlier history items
    ]
}

O histórico de execução contém até 50 execuções mais recentes, classificadas em ordem cronológica inversa (de modo que a execução mais recente apareça em primeiro lugar na resposta).Execution history contains up to 50 of the most recently completed executions, which are sorted in the reverse chronological order (so that the latest execution comes first in the response). Informações adicionais sobre a resposta podem ser encontradas em Obter o status do indexadorAdditional information about the response can be found in Get Indexer Status

Executar indexadores de acordo com uma agendaRun indexers on a schedule

Você também pode organizar o indexador para que execute periodicamente com base em uma agenda.You can also arrange the indexer to run periodically on a schedule. Para fazer isso, adicione a propriedade schedule ao criar ou atualizar o indexador.To do this, add the schedule property when creating or updating the indexer. O exemplo a seguir mostra uma solicitação PUT para atualização do indexador:The example below shows a PUT request to update the indexer:

PUT https://myservice.search.windows.net/indexers/myindexer?api-version=2019-05-06
Content-Type: application/json
api-key: admin-key

{
    "dataSourceName" : "myazuresqldatasource",
    "targetIndexName" : "target index name",
    "schedule" : { "interval" : "PT10M", "startTime" : "2015-01-01T00:00:00Z" }
}

O parâmetro interval é necessário.The interval parameter is required. O intervalo refere-se ao tempo entre o início de duas execuções consecutivas do indexador.The interval refers to the time between the start of two consecutive indexer executions. O menor intervalo permitido é de cinco minutos, e o maior é de um dia.The smallest allowed interval is 5 minutes; the longest is one day. Ele deve ser formatado como um valor XSD de "dayTimeDuration" (um subconjunto restrito de um valor de duração ISO 8601 ).It must be formatted as an XSD "dayTimeDuration" value (a restricted subset of an ISO 8601 duration value). O padrão para isso é: P(nD)(T(nH)(nM)).The pattern for this is: P(nD)(T(nH)(nM)). Exemplos: PT15M para cada 15 minutos, PT2H para cada 2 horas.Examples: PT15M for every 15 minutes, PT2H for every 2 hours.

Para obter mais informações sobre como definir agendas do indexador, consulte como programar indexadores para o Azure Search.For more information about defining indexer schedules see How to schedule indexers for Azure Search.

Capturar linhas novas, alteradas e excluídasCapture new, changed, and deleted rows

O Azure Search usa a indexação incremental para evitar a reindexação de toda a tabela ou exibição sempre que um indexador é executado.Azure Search uses incremental indexing to avoid having to reindex the entire table or view every time an indexer runs. O Azure Search fornece duas políticas de detecção de alteração para dar suporte à indexação incremental.Azure Search provides two change detection policies to support incremental indexing.

Política de controle integrado de alterações do SQLSQL Integrated Change Tracking Policy

Se o banco de dados SQL oferece suporte ao controle de alterações, recomendamos o uso da Política de controle integrado de alterações do SQL.If your SQL database supports change tracking, we recommend using SQL Integrated Change Tracking Policy. Essa é a política mais eficiente.This is the most efficient policy. Além disso, ela permite que o Azure Search identifique linhas excluídas sem precisar adicionar uma coluna explícita de "exclusão reversível" à tabela.In addition, it allows Azure Search to identify deleted rows without you having to add an explicit "soft delete" column to your table.

RequisitosRequirements

  • Requisitos de versão do banco de dados:Database version requirements:
    • O SQL Server 2012 SP3 e posterior, se você estiver usando o SQL Server em VMs do Azure.SQL Server 2012 SP3 and later, if you're using SQL Server on Azure VMs.
    • Banco de Dados SQL do Azure V12, se você estiver usando o Banco de Dados SQL do Azure.Azure SQL Database V12, if you're using Azure SQL Database.
  • Apenas tabelas (sem exibições).Tables only (no views).
  • No banco de dados, habilite o controle de alterações na tabela.On the database, enable change tracking for the table.
  • Sem chave primária de composição (uma chave primária que contém mais de uma coluna) na tabela.No composite primary key (a primary key containing more than one column) on the table.

UsoUsage

Para usar essa política, crie ou atualize a fonte de dados da seguinte maneira:To use this policy, create or update your data source like this:

{
    "name" : "myazuresqldatasource",
    "type" : "azuresql",
    "credentials" : { "connectionString" : "connection string" },
    "container" : { "name" : "table or view name" },
    "dataChangeDetectionPolicy" : {
       "@odata.type" : "#Microsoft.Azure.Search.SqlIntegratedChangeTrackingPolicy"
  }
}

Ao usar a política de controle integrado de alterações do SQL, não especifique uma política separada de detecção de exclusão de dados, pois essa política tem suporte interno para identificação de linhas excluídas.When using SQL integrated change tracking policy, do not specify a separate data deletion detection policy - this policy has built-in support for identifying deleted rows. No entanto, para que as exclusões sejam detectadas “de forma mágica”, a chave de documento no índice de pesquisa deve ser o mesmo da chave primária na tabela SQL.However, for the deletes to be detected "automagically", the document key in your search index must be the same as the primary key in the SQL table.

Observação

Ao usar TRUNCATE TABLE para remover um grande número de linhas de uma tabela SQL, o indexador precisa ser redefinido para também redefinir o estado de acompanhamento de alterações para coletar exclusões de linhas.When using TRUNCATE TABLE to remove a large number of rows from a SQL table, the indexer needs to be reset to reset the change tracking state to pick up row deletions.

Política de detecção de alteração de marca d’água altaHigh Water Mark Change Detection policy

Essa política de detecção de alteração se baseia em uma coluna de “marca d'água alta” que captura a versão ou a hora em que uma linha foi atualizada pela última vez.This change detection policy relies on a "high water mark" column capturing the version or time when a row was last updated. Se você estiver usando uma exibição, deverá usar uma política de marca d'água alta.If you're using a view, you must use a high water mark policy. A coluna de marca d'água alta deve atender aos requisitos a seguir.The high water mark column must meet the following requirements.

RequisitosRequirements

  • Todas as inserções especificam um valor para a coluna.All inserts specify a value for the column.
  • Todas as atualizações de um item também alteram o valor da coluna.All updates to an item also change the value of the column.
  • O valor dessa coluna aumenta com cada inserção ou atualização.The value of this column increases with each insert or update.
  • Consultas com as seguintes cláusulas WHERE e ORDER BY podem ser executadas com eficiência: WHERE [High Water Mark Column] > [Current High Water Mark Value] ORDER BY [High Water Mark Column]Queries with the following WHERE and ORDER BY clauses can be executed efficiently: WHERE [High Water Mark Column] > [Current High Water Mark Value] ORDER BY [High Water Mark Column]

Importante

É altamente recomendável usar o tipo de dados rowversion para a coluna de marca d'água alta.We strongly recommend using the rowversion data type for the high water mark column. Se qualquer outro tipo de dados for usado, não será possível assegurar a captura, pelo acompanhamento de alterações, de todas as alterações na presença de transações em execução simultaneamente com uma consulta do indexador.If any other data type is used, change tracking is not guaranteed to capture all changes in the presence of transactions executing concurrently with an indexer query. Ao usar rowversion em uma configuração com réplicas somente leitura, você deve apontar o indexador para a réplica primária.When using rowversion in a configuration with read-only replicas, you must point the indexer at the primary replica. Apenas uma réplica primária pode ser usada para cenários de sincronização de dados.Only a primary replica can be used for data sync scenarios.

UsoUsage

Para usar uma política de marca d'água alta, crie ou atualize a fonte de dados da seguinte maneira:To use a high water mark policy, create or update your data source like this:

{
    "name" : "myazuresqldatasource",
    "type" : "azuresql",
    "credentials" : { "connectionString" : "connection string" },
    "container" : { "name" : "table or view name" },
    "dataChangeDetectionPolicy" : {
       "@odata.type" : "#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy",
       "highWaterMarkColumnName" : "[a rowversion or last_updated column name]"
  }
}

Aviso

Se a tabela de origem não tiver um índice na coluna de marca d'água alta, as consultas usadas pelo indexador SQL poderão atingir o tempo limite. Em particular, a cláusula ORDER BY [High Water Mark Column] requer um índice para executar de forma eficiente quando a tabela contém muitas linhas.If the source table does not have an index on the high water mark column, queries used by the SQL indexer may time out. In particular, the ORDER BY [High Water Mark Column] clause requires an index to run efficiently when the table contains many rows.

Se você encontrar erros de tempo limite, use a definição da configuração do indexador queryTimeout para definir o tempo limite da consulta como um valor maior que o tempo limite padrão de 5 minutos.If you encounter timeout errors, you can use the queryTimeout indexer configuration setting to set the query timeout to a value higher than the default 5-minute timeout. Por exemplo, para definir o tempo limite de 10 minutos, crie ou atualize o indexador com a seguinte configuração:For example, to set the timeout to 10 minutes, create or update the indexer with the following configuration:

{
  ... other indexer definition properties
 "parameters" : {
        "configuration" : { "queryTimeout" : "00:10:00" } }
}

Você também pode desabilitar a cláusula ORDER BY [High Water Mark Column].You can also disable the ORDER BY [High Water Mark Column] clause. No entanto, isso não é recomendado porque, se a execução do indexador for interrompida por um erro, o indexador deverá processar novamente todas as linhas se ele for executado mais tarde – mesmo se o indexador já tiver processado quase todas as linhas no momento em que foi interrompido.However, this is not recommended because if the indexer execution is interrupted by an error, the indexer has to re-process all rows if it runs later - even if the indexer has already processed almost all the rows by the time it was interrupted. Para desabilitar a cláusula ORDER BY, use a configuração disableOrderByHighWaterMarkColumn na definição do indexador:To disable the ORDER BY clause, use the disableOrderByHighWaterMarkColumn setting in the indexer definition:

{
 ... other indexer definition properties
 "parameters" : {
        "configuration" : { "disableOrderByHighWaterMarkColumn" : true } }
}

Política de detecção de exclusão de coluna por exclusão reversívelSoft Delete Column Deletion Detection policy

Quando as linhas são excluídas da tabela de origem, provavelmente você deseja excluí-las também do índice de pesquisa.When rows are deleted from the source table, you probably want to delete those rows from the search index as well. Se você usar a política de controle integrado de alterações do SQL, isso será resolvido para você.If you use the SQL integrated change tracking policy, this is taken care of for you. No entanto, a política de controle de alterações de marca d'água alta não ajuda você com relação às linhas excluídas.However, the high water mark change tracking policy doesn’t help you with deleted rows. O que fazer?What to do?

Se as linhas forem fisicamente removidas da tabela, o Azure Search não terá como inferir a presença de registros que não existem mais.If the rows are physically removed from the table, Azure Search has no way to infer the presence of records that no longer exist. No entanto, você pode usar a técnica de "exclusão reversível" para excluir logicamente linhas sem removê-las da tabela.However, you can use the “soft-delete” technique to logically delete rows without removing them from the table. Adicione uma coluna à sua tabela ou exiba e marque as linhas como excluídas usando essa coluna.Add a column to your table or view and mark rows as deleted using that column.

Ao usar a técnica de exclusão reversível, você pode especificar a política de exclusão reversível da seguinte maneira ao criar ou atualizar a fonte de dados:When using the soft-delete technique, you can specify the soft delete policy as follows when creating or updating the data source:

{
    …,
    "dataDeletionDetectionPolicy" : {
       "@odata.type" : "#Microsoft.Azure.Search.SoftDeleteColumnDeletionDetectionPolicy",
       "softDeleteColumnName" : "[a column name]",
       "softDeleteMarkerValue" : "[the value that indicates that a row is deleted]"
    }
}

O softDeleteMarkerValue deve ser uma cadeia de caracteres – use a representação de cadeia de caracteres de seu valor real.The softDeleteMarkerValue must be a string – use the string representation of your actual value. Por exemplo, se você tiver uma coluna de inteiros na qual as linhas excluídas são marcadas com o valor 1, use "1".For example, if you have an integer column where deleted rows are marked with the value 1, use "1". Se você tiver uma coluna BIT na qual as linhas excluídas são marcadas com o valor true booliano, use a cadeia de caracteres literal True ou true, o caso não importa.If you have a BIT column where deleted rows are marked with the Boolean true value, use the string literal True or true, the case doesn't matter.

Mapeamento entre tipos de dados SQL e do Azure SearchMapping between SQL and Azure Search data types

Tipo de dados SQLSQL data type Tipos de campos de índice de destino permitidosAllowed target index field types ObservaçõesNotes
bitbit Edm.Boolean, Edm.StringEdm.Boolean, Edm.String
int, smallint, tinyintint, smallint, tinyint Edm.Int32, Edm.Int64, Edm.StringEdm.Int32, Edm.Int64, Edm.String
bigintbigint Edm.Int64, Edm.StringEdm.Int64, Edm.String
real, floatreal, float Edm.Double, Edm.StringEdm.Double, Edm.String
smallmoney, numérico decimal dinheirosmallmoney, money decimal numeric Edm.StringEdm.String O Azure Search não dá suporte à conversão de tipos decimais em Edm.Double porque isso causaria a perda de precisãoAzure Search does not support converting decimal types into Edm.Double because this would lose precision
char, nchar, varchar, nvarcharchar, nchar, varchar, nvarchar Edm.StringEdm.String
Collection(Edm.String)Collection(Edm.String)
Uma cadeia de caracteres SQL poderá ser usada para preencher um campo Collection(Edm.String) se a cadeia de caracteres representar uma matriz JSON de cadeias de caracteres: ["red", "white", "blue"]A SQL string can be used to populate a Collection(Edm.String) field if the string represents a JSON array of strings: ["red", "white", "blue"]
smalldatetime, datetime, datetime2, date, datetimeoffsetsmalldatetime, datetime, datetime2, date, datetimeoffset Edm.DateTimeOffset, Edm.StringEdm.DateTimeOffset, Edm.String
uniqueidentiferuniqueidentifer Edm.StringEdm.String
geografiageography Edm.GeographyPointEdm.GeographyPoint Há suporte apenas para instâncias de Geografia do tipo POINT com SRID 4326 (que é o padrão)Only geography instances of type POINT with SRID 4326 (which is the default) are supported
rowversionrowversion N/DN/A Colunas de linha-versão não podem ser armazenadas no índice de pesquisa, mas podem ser usadas para o controle de alteraçõesRow-version columns cannot be stored in the search index, but they can be used for change tracking
tempo, timespan, binário, varbinário, imagem, xml, geometria, tipos CLRtime, timespan, binary, varbinary, image, xml, geometry, CLR types N/DN/A Sem suporteNot supported

Definições de configuraçãoConfiguration Settings

O indexador do SQL expõe várias definições de configuração:SQL indexer exposes several configuration settings:

ConfiguraçãoSetting Tipo de dadosData type FinalidadePurpose Valor padrãoDefault value
queryTimeoutqueryTimeout cadeia de caracteresstring Define o tempo limite de execução da consulta SQLSets the timeout for SQL query execution 5 minutos ("00:05:00")5 minutes ("00:05:00")
disableOrderByHighWaterMarkColumndisableOrderByHighWaterMarkColumn boolbool Faz com que a consulta SQL usada pela política de marca d'água alta omita a cláusula ORDER BY.Causes the SQL query used by the high water mark policy to omit the ORDER BY clause. Consulte Política de marca d'água altaSee High Water Mark policy falsofalse

Essas configurações são usadas no objeto parameters.configuration na definição do indexador.These settings are used in the parameters.configuration object in the indexer definition. Por exemplo, para definir o tempo limite da consulta para 10 minutos, crie ou atualize o indexador com a seguinte configuração:For example, to set the query timeout to 10 minutes, create or update the indexer with the following configuration:

{
  ... other indexer definition properties
 "parameters" : {
        "configuration" : { "queryTimeout" : "00:10:00" } }
}

Perguntas frequentesFAQ

P: Posso usar o indexador SQL do Azure com bancos de dados SQL executados em VMs IaaS no Azure?Q: Can I use Azure SQL indexer with SQL databases running on IaaS VMs in Azure?

Sim.Yes. No entanto, você precisa permitir que o serviço de pesquisa se conecte ao banco de dados.However, you need to allow your search service to connect to your database. Para obter mais informações, consulte Configurar uma conexão de um indexador do Azure Search ao SQL Server em uma VM do Azure.For more information, see Configure a connection from an Azure Search indexer to SQL Server on an Azure VM.

P: Posso usar o indexador SQL do Azure com bancos de dados SQL executados localmente?Q: Can I use Azure SQL indexer with SQL databases running on-premises?

Não diretamente.Not directly. Não recomendamos nem damos suporte a uma conexão direta, pois isso exigirá a abertura dos bancos de dados ao tráfego da Internet.We do not recommend or support a direct connection, as doing so would require you to open your databases to Internet traffic. Os clientes tiveram sucesso com esse cenário usando tecnologias de ponte como o Azure Data Factory.Customers have succeeded with this scenario using bridge technologies like Azure Data Factory. Para obter mais informações, consulte Enviar dados por push para um índice do Azure Search usando o Azure Data Factory.For more information, see Push data to an Azure Search index using Azure Data Factory.

P: Posso usar o indexador SQL do Azure com outros bancos de dados que não sejam o SQL Server executados no IaaS do Azure?Q: Can I use Azure SQL indexer with databases other than SQL Server running in IaaS on Azure?

Não.No. Não damos suporte a esse cenário, pois não testamos o indexador com nenhum outro banco de dados que não o SQL Server.We don’t support this scenario, because we haven’t tested the indexer with any databases other than SQL Server.

P: Posso criar vários indexadores executados com base em um agendamento?Q: Can I create multiple indexers running on a schedule?

Sim.Yes. No entanto, somente um indexador pode ser executado por vez em um nó.However, only one indexer can be running on one node at one time. Se você precisar de vários indexadores em execução simultaneamente, considere o aumento de seu serviço de pesquisa para mais de uma unidade de pesquisa.If you need multiple indexers running concurrently, consider scaling up your search service to more than one search unit.

P: A execução de um indexador afeta minha carga de trabalho de consulta?Q: Does running an indexer affect my query workload?

Sim.Yes. O indexador é executado em um dos nós em seu serviço de pesquisa, e os recursos do nó são compartilhados entre a indexação e o atendimento ao tráfego de consultas e outras solicitações da API.Indexer runs on one of the nodes in your search service, and that node’s resources are shared between indexing and serving query traffic and other API requests. Se você executar cargas de trabalho de indexação e consulta intensivas e receber uma alta taxa de erros 503 ou tempos de resposta maiores, considere a possibilidade de dimensionar o serviço de pesquisa.If you run intensive indexing and query workloads and encounter a high rate of 503 errors or increasing response times, consider scaling up your search service.

P: Posso usar uma réplica secundária em um cluster de failover como fonte de dados?Q: Can I use a secondary replica in a failover cluster as a data source?

Isso depende.It depends. Para a indexação completa de uma tabela ou exibição, você pode usar uma réplica secundária.For full indexing of a table or view, you can use a secondary replica.

Para a indexação incremental, o Azure Search dá suporte a duas políticas de detecção de alterações: Controle de alterações integrado ao SQL e Marca D'água Alta.For incremental indexing, Azure Search supports two change detection policies: SQL integrated change tracking and High Water Mark.

Em réplicas somente leitura, o banco de dados SQL não dá suporte ao controle de alterações integrado.On read-only replicas, SQL database does not support integrated change tracking. Portanto, você deve usar a política de Marca D'água Alta.Therefore, you must use High Water Mark policy.

Nossa recomendação padrão é usar o tipo de dados rowversion para a coluna de marca d'água alta.Our standard recommendation is to use the rowversion data type for the high water mark column. No entanto, o uso de rowversion depende da função MIN_ACTIVE_ROWVERSION do Banco de Dados SQL, para a qual não há suporte em réplicas somente leitura.However, using rowversion relies on SQL Database's MIN_ACTIVE_ROWVERSION function, which is not supported on read-only replicas. Portanto, você deve apontar o indexador para uma réplica primária se estiver usando rowversion.Therefore, you must point the indexer to a primary replica if you are using rowversion.

Se você tentar usar rowversion em uma réplica somente leitura, verá o seguinte erro:If you attempt to use rowversion on a read-only replica, you will see the following error:

"Using a rowversion column for change tracking is not supported on secondary (read-only) availability replicas. Please update the datasource and specify a connection to the primary availability replica.Current database 'Updateability' property is 'READ_ONLY'".

P: Posso usar uma coluna não rowversion alternativa para o controle de alterações de marca d'água alta?Q: Can I use an alternative, non-rowversion column for high water mark change tracking?

Isso não é recomendável.It's not recommended. Somente rowversion permite a sincronização de dados confiável.Only rowversion allows for reliable data synchronization. No entanto, dependendo da lógica do aplicativo, isso poderá ser seguro se:However, depending on your application logic, it may be safe if:

  • Você puder garantir que, quando o indexador for executado, não existem transações pendentes na tabela que está sendo indexada (por exemplo, todas as atualizações de tabela ocorrem como um lote com base em um agendamento e o agendamento do indexador do Azure Search estiver definido para evitar a sobreposição com o agendamento da atualização de tabela).You can ensure that when the indexer runs, there are no outstanding transactions on the table that’s being indexed (for example, all table updates happen as a batch on a schedule, and the Azure Search indexer schedule is set to avoid overlapping with the table update schedule).

  • Periodicamente, você fizer uma reindexação completa para selecionar as linhas ausentes.You periodically do a full reindex to pick up any missed rows.