Push dei dati in un indice di Ricerca di Azure con Azure Data Factory

Questo articolo descrive come usare l'attività di copia per eseguire il push dei dati da un archivio dati di origine supportato nell'indice di Ricerca di Azure. Gli archivi dati di origine supportati sono elencati nella colonna Origine della tabella Origini e sink supportati. Questo articolo si basa sull'articolo Spostamento di dati e attività di copia , che offre una panoramica generale dello spostamento dei dati con attività di copia e delle combinazioni di archivi dati supportati.

Abilitazione della connettività

Per consentire la connessione del servizio Data Factory a un archivio dati locale, installare Gateway di gestione dati nell'ambiente locale. È possibile installare il gateway nello stesso computer che ospita l'archivio dati di origine oppure in un computer diverso per evitare che si verifichi un conflitto con l'archivio dati per le risorse.

Gateway di gestione dati consente di connettere le origini dati locali ai servizi cloud in modo sicuro e gestito. Vedere l’articolo Spostare dati tra cloud e locale per informazioni dettagliate sui Gateway di Gestione dati.

Introduzione

È possibile creare una pipeline con un'attività di copia che esegue il push dei dati da un archivio dati di origine all'indice di Ricerca di Azure usando diversi strumenti/API.

Il modo più semplice per creare una pipeline è usare la Copia guidata. Vedere Esercitazione: Creare una pipeline usando la Copia guidata per la procedura dettagliata sulla creazione di una pipeline attenendosi alla procedura guidata per copiare i dati.

È possibile anche usare gli strumenti seguenti per creare una pipeline: portale di Azure, Visual Studio, Azure PowerShell, modello di Azure Resource Manager, API .NET e API REST. Vedere l'esercitazione sull'attività di copia per le istruzioni dettagliate sulla creazione di una pipeline con un'attività di copia.

Se si usano gli strumenti o le API, eseguire la procedura seguente per creare una pipeline che sposta i dati da un archivio dati di origine a un archivio dati sink:

  1. Creare i servizi collegati per collegare gli archivi di dati di input e output alla data factory.
  2. Creare i set di dati per rappresentare i dati di input e di output per le operazioni di copia.
  3. Creare una pipeline con un'attività di copia che accetti un set di dati come input e un set di dati come output.

Quando si usa la procedura guidata, le definizioni JSON per queste entità di data factory (servizi, set di dati e pipeline collegati) vengono create automaticamente. Quando si usano gli strumenti o le API, ad eccezione delle API .NET, usare il formato JSON per definire le entità di data factory. Per un esempio con definizioni JSON per entità di data factory utilizzate per copiare dati nell'indice di Ricerca di Azure, vedere la sezione Esempio JSON: Copiare dati da un'istanza di SQL Server locale all'indice di Ricerca di Azure di questo articolo.

Le sezioni seguenti riportano le informazioni dettagliate sulle proprietà JSON che vengono usate per definire entità di data factory specifiche dell'indice di Ricerca di Azure:

Proprietà del servizio collegato

La tabella seguente include le descrizioni degli elementi JSON specifici del servizio collegato Ricerca di Azure.

Proprietà Descrizione Obbligatorio
type La proprietà type deve essere impostata su AzureSearch.
URL URL del servizio Ricerca di Azure.
key Chiave amministratore del servizio Ricerca di Azure.

Proprietà dei set di dati

Per un elenco completo delle sezioni e delle proprietà disponibili per la definizione di set di dati, vedere l'articolo Set di dati in Azure Data Factory . Le sezioni come struttura, disponibilità e criteri di un set di dati JSON sono simili per tutti i tipi di set di dati. La sezione typeProperties è diversa per ogni tipo di set di dati. Le proprietà della sezione typeProperties per un set di dati di tipo AzureSearchIndex sono le seguenti:

Proprietà Descrizione Obbligatorio
type La proprietà type deve essere impostata su AzureSearchIndex.
indexName Nome dell'indice di Ricerca di Azure. Il servizio Data Factory non crea l'indice. L'indice deve essere presente in Ricerca di Azure.

Proprietà dell'attività di copia

Per un elenco completo delle sezioni e delle proprietà disponibili per la definizione delle attività, vedere l'articolo relativo alla creazione di pipeline . Proprietà come nome, descrizione, tabelle di input e output e criteri diversi sono disponibili per tutti i tipi di attività. Le proprietà disponibili nella sezione typeProperties variano invece in base al tipo di attività. Per l'attività di copia variano in base ai tipi di origine e sink.

Per l'attività di copia, quando il sink è del tipo AzureSearchIndexSink, nella sezione typeProperties sono disponibili le proprietà seguenti:

Proprietà Descrizione Valori consentiti Obbligatorio
WriteBehavior Specifica se eseguire un'unione o una sostituzione quando nell'indice esiste già un documento. Vedere la proprietà WriteBehavior. Merge (impostazione predefinita)
Carica
No
WriteBatchSize Consente di caricare dati nell'indice di Ricerca di Azure quando le dimensioni del buffer raggiungono il valore indicato da writeBatchSize. Per informazioni dettagliate, vedere la proprietà WriteBatchSize. Da 1 a 1000. Il valore predefinito è 1000. No

Proprietà WriteBehavior

Durante la scrittura di dati, AzureSearchSink esegue operazioni di upsert. In altre parole, quando si scrive un documento il servizio Ricerca di Azure aggiorna il documento esistente anziché generare un'eccezione di conflitto se la chiave relativa esiste già nell'indice di Ricerca di Azure.

Le operazioni di upsert eseguite da AzureSearchSink sono le seguenti (con AzureSearch SDK):

  • Merge: le colonne del nuovo documento vengono unite con quelle del documento esistente. Per le colonne del nuovo documento con valore Null, viene mantenuto il valore del documento esistente.
  • Upload: il nuovo documento sostituisce quello esistente. Per le colonne del nuovo documento non specificate, il valore è impostato su Null indipendentemente dalla presenza o meno di un valore diverso da Null nel documento esistente.

L'operazione predefinita è Merge.

Proprietà WriteBatchSize

Il servizio Ricerca di Azure supporta la scrittura di documenti come batch. Un batch può contenere da 1 a 1000 azioni e un'azione gestisce un documento per eseguire l'operazione di caricamento/unione.

Supporto dei tipi di dati

La tabella seguente indica se un tipo di dati di Ricerca di Azure è supportato o meno.

Tipo di dati di Ricerca di Azure Supportato nel sink di Ricerca di Azure
String S
Int32 S
Int64 S
Double S
Boolean S
DataTimeOffset S
String Array N
GeographyPoint N

Esempio JSON: Copiare dati da un'istanza di SQL Server locale all'indice di Ricerca di Azure

L'esempio seguente mostra:

  1. Un servizio collegato di tipo AzureSearch.
  2. Un servizio collegato di tipo OnPremisesSqlServer.
  3. Un set di dati di tipo SqlServerTable.
  4. Un set di dati di output di tipo AzureSearchIndex.
  5. Una pipeline con un'attività di copia che usa SqlSource e AzureSearchIndexSink.

Nell'esempio i dati della serie temporale vengono copiati ogni ora da un database di SQL Server locale in un indice di Ricerca di Azure. Le proprietà JSON usate in questo esempio sono descritte nelle sezioni riportate dopo gli esempi.

Come primo passaggio è necessario configurare Gateway di gestione dati nel computer locale. Le istruzioni sono disponibili nell'articolo Spostare dati tra origini locali e il cloud con Gateway di gestione dati .

Servizio collegato Ricerca di Azure

{
    "name": "AzureSearchLinkedService",
       "properties": {
        "type": "AzureSearch",
           "typeProperties": {
            "url": "https://<service>.search.windows.net",
            "key": "<AdminKey>"
        }
       }
}

Servizio collegato di SQL Server

{
  "Name": "SqlServerLinkedService",
  "properties": {
    "type": "OnPremisesSqlServer",
    "typeProperties": {
      "connectionString": "Data Source=<servername>;Initial Catalog=<databasename>;Integrated Security=False;User ID=<username>;Password=<password>;",
      "gatewayName": "<gatewayname>"
    }
  }
}

Set di dati input di SQL Server

L'esempio presuppone che sia stata creata una tabella "MyTable" in SQL Server e che contenga una colonna denominata "timestampcolumn" per i dati di una serie temporale. È possibile eseguire query su più tabelle all'interno dello stesso database usando un singolo set di dati, ma come typeProperty tableName del set di dati deve essere usata una sola tabella.

Impostando "external" su "true" si comunica al servizio Data Factory che il set di dati è esterno a Data Factory e non è prodotto da un'attività al suo interno.

{
  "name": "SqlServerDataset",
  "properties": {
    "type": "SqlServerTable",
    "linkedServiceName": "SqlServerLinkedService",
    "typeProperties": {
      "tableName": "MyTable"
    },
    "external": true,
    "availability": {
      "frequency": "Hour",
      "interval": 1
    },
    "policy": {
      "externalData": {
        "retryInterval": "00:01:00",
        "retryTimeout": "00:10:00",
        "maximumRetry": 3
      }
    }
  }
}

Set di dati di output di Ricerca di Azure

Nell'esempio i dati vengono copiati in un indice di Ricerca di Azure denominato products. Il servizio Data Factory non crea l'indice. Per eseguire il test dell'esempio, creare un indice con questo nome. Creare l'indice di Ricerca di Azure con lo stesso numero di colonne presente nel set di dati di input. Le nuove voci vengono aggiunte all'indice di Ricerca di Azure ogni ora.

{
    "name": "AzureSearchIndexDataset",
    "properties": {
        "type": "AzureSearchIndex",
        "linkedServiceName": "AzureSearchLinkedService",
         "typeProperties" : {
            "indexName": "products",
        },
        "availability": {
            "frequency": "Minute",
            "interval": 15
        }
   }
}

Attività di copia in una pipeline con un'origine SQL e il sink dell'indice di Ricerca di Azure:

La pipeline contiene un'attività di copia configurata per usare i set di dati di input e output ed è programmata per essere eseguita ogni ora. Nella definizione JSON della pipeline il tipo source è impostato su SqlSource e il tipo sink è impostato su AzureSearchIndexSink. La query SQL specificata per la proprietà SqlReaderQuery consente di selezionare i dati da copiare nell'ultima ora.

{  
    "name":"SamplePipeline",
    "properties":{  
    "start":"2014-06-01T18:00:00",
    "end":"2014-06-01T19:00:00",
    "description":"pipeline for copy activity",
    "activities":[  
      {
        "name": "SqlServertoAzureSearchIndex",
        "description": "copy activity",
        "type": "Copy",
        "inputs": [
          {
            "name": " SqlServerInput"
          }
        ],
        "outputs": [
          {
            "name": "AzureSearchIndexDataset"
          }
        ],
        "typeProperties": {
          "source": {
            "type": "SqlSource",
            "SqlReaderQuery": "$$Text.Format('select * from MyTable where timestampcolumn >= \\'{0:yyyy-MM-dd HH:mm}\\' AND timestampcolumn < \\'{1:yyyy-MM-dd HH:mm}\\'', WindowStart, WindowEnd)"
          },
          "sink": {
            "type": "AzureSearchIndexSink"
          }
        },
       "scheduler": {
          "frequency": "Hour",
          "interval": 1
        },
        "policy": {
          "concurrency": 1,
          "executionPriorityOrder": "OldestFirst",
          "retry": 0,
          "timeout": "01:00:00"
        }
      }
     ]
   }
}

Se si copiano dati da un archivio dati cloud a Ricerca di Azure, la proprietà executionLocation è obbligatoria. Il frammento JSON seguente mostra la modifica necessaria nell'attività di copia typeProperties come esempio. Per informazioni sui valori supportati e altri dettagli, vedere la sezione Copiare dati tra archivi dati cloud.

"typeProperties": {
  "source": {
    "type": "BlobSource"
  },
  "sink": {
    "type": "AzureSearchIndexSink"
  },
  "executionLocation": "West US"
}

Copiare da un'origine cloud

Se si copiano dati da un archivio dati cloud a Ricerca di Azure, la proprietà executionLocation è obbligatoria. Il frammento JSON seguente mostra la modifica necessaria nell'attività di copia typeProperties come esempio. Per informazioni sui valori supportati e altri dettagli, vedere la sezione Copiare dati tra archivi dati cloud.

"typeProperties": {
  "source": {
    "type": "BlobSource"
  },
  "sink": {
    "type": "AzureSearchIndexSink"
  },
  "executionLocation": "West US"
}

È anche possibile eseguire il mapping delle colonne del set di dati di origine alle colonne del set di dati sink nella definizione dell'attività di copia. Per altre informazioni, vedere Mapping delle colonne del set di dati in Azure Data Factory.

Prestazioni e ottimizzazione

Per informazioni sui fattori chiave che influiscono sulle prestazioni dello spostamento dei dati (attività di copia) e sui vari modi per ottimizzarle, vedere la Guida alle prestazioni delle attività di copia e all'ottimizzazione.

Passaggi successivi

Vedere gli articoli seguenti: