Copiare dati in e da Archiviazione tabelle di Azure usando Azure Data Factory

SI APPLICA A: Azure Data Factory Azure Synapse Analytics

Questo articolo illustra come usare l'attività di copia in Azure Data Factory per copiare dati in e da Archiviazione tabelle di Azure. Si basa sull'articolo di panoramica dell'attività di copia che presenta informazioni generali sull'attività di copia.

Nota

Questo articolo è stato aggiornato per usare il modulo Az di Azure PowerShell. Il modulo Az di PowerShell è ora il modulo di PowerShell consigliato per l'interazione con Azure. Per iniziare a usare il modulo Az PowerShell, vedere Installare Azure PowerShell. Per informazioni su come eseguire la migrazione al modulo AZ PowerShell, vedere Eseguire la migrazione di Azure PowerShell da AzureRM ad Az.

Funzionalità supportate

Il connettore di Archiviazione tabelle di Azure è supportato per le attività seguenti:

È possibile copiare dati da qualsiasi archivio di dati di origine supportato in Archiviazione tabelle. È anche possibile copiare dati da Archiviazione tabelle in qualsiasi archivio dati di sink supportato. Per un elenco degli archivi dati supportati come origini o sink dall'attività di copia, vedere la tabella relativa agli archivi dati supportati.

In particolare, il connettore Tabella di Azure supporta la copia dei dati usando sia l'autenticazione basata sulla chiave dell'account sia l'autenticazione basata sulla firma di accesso condiviso del servizio.

Introduzione

Per eseguire l'attività di copia con una pipeline, è possibile usare uno degli strumenti o SDK seguenti:

Le sezioni seguenti riportano informazioni dettagliate sulle proprietà usate per definire entità di Data Factory specifiche per Archiviazione tabelle.

Proprietà del servizio collegato

Usare una chiave dell'account

È possibile creare un servizio collegato di Archiviazione di Azure usando la chiave dell'account, che garantisce l'accesso globale all'archiviazione dalla data factory. Sono supportate le proprietà seguenti.

Proprietà Descrizione Obbligatoria
type La proprietà type deve essere impostata su: AzureTableStorage.
connectionString Specificare le informazioni necessarie per connettersi all'archiviazione per la proprietà connectionString.
È anche possibile inserire la chiave dell'account in Azure Key Vault e rimuovere la configurazione di accountKey dalla stringa di connessione. Vedere gli esempi seguenti e l'articolo Archiviare le credenziali in Azure Key Vault per altri dettagli.
connectVia Runtime di integrazione da usare per la connessione all'archivio dati. È possibile usare il runtime di integrazione di Azure o il runtime di integrazione self-hosted (se l'archivio dati si trova in una rete privata). Se non specificato, viene usato il runtime di integrazione di Azure predefinito. No

Nota

L'uso di un servizio collegato di tipo "AzureStorage", è ancora supportato così com'è, tuttavia in futuro verrà consigliato di usare il nuovo tipo di servizio collegato "AzureTableStorage".

Esempio:

{
    "name": "AzureTableStorageLinkedService",
    "properties": {
        "type": "AzureTableStorage",
        "typeProperties": {
            "connectionString": "DefaultEndpointsProtocol=https;AccountName=<accountname>;AccountKey=<accountkey>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Esempio: archiviare la chiave dell'account in Azure Key Vault

{
    "name": "AzureTableStorageLinkedService",
    "properties": {
        "type": "AzureTableStorage",
        "typeProperties": {
            "connectionString": "DefaultEndpointsProtocol=https;AccountName=<accountname>;",
            "accountKey": { 
                "type": "AzureKeyVaultSecret", 
                "store": { 
                    "referenceName": "<Azure Key Vault linked service name>", 
                    "type": "LinkedServiceReference" 
                }, 
                "secretName": "<secretName>" 
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Uso dell'autenticazione con firma di accesso condiviso

È anche possibile creare un servizio collegato di archiviazione tramite una firma di accesso condiviso. Consente alla data factory l'accesso con restrizioni o limiti di tempo a tutte le risorse o a risorse specifiche nell'archiviazione.

Una firma di accesso condiviso fornisce accesso delegato controllato alle risorse dell'account di archiviazione. È possibile usarla per concedere a un client autorizzazioni limitate per gli oggetti nell'account di archiviazione per un periodo di tempo e con un set di autorizzazioni specificati. Non è necessario condividere le chiavi di accesso degli account. La firma di accesso condiviso è un URI che racchiude nei parametri di query tutte le informazioni necessarie per l'accesso autenticato a una risorsa di archiviazione. Per accedere alle risorse di archiviazione con la firma di accesso condiviso, il client deve solo passare la firma di accesso condiviso al costruttore o al metodo appropriato. Per altre informazioni sulle firme di accesso condiviso, vedere Uso delle firme di accesso condiviso.

Nota

Data Factory supporta attualmente sia le firme di accesso condiviso del servizio che le firme di accesso condiviso dell'account. Per altre informazioni sulle firme di accesso condiviso, vedere Concedere accesso limitato alle risorse di archiviazione di Azure tramite firme di accesso condiviso.

Suggerimento

Per generare una firma di accesso condiviso del servizio per l'account di archiviazione, è possibile eseguire i comandi di PowerShell seguenti. Sostituire i segnaposto e concedere l'autorizzazione necessaria. $context = New-AzStorageContext -StorageAccountName <accountName> -StorageAccountKey <accountKey> New-AzStorageContainerSASToken -Name <containerName> -Context $context -Permission rwdl -StartTime <startTime> -ExpiryTime <endTime> -FullUri

Per usare l'autenticazione basata sulla firma di accesso condiviso, sono supportate le proprietà seguenti.

Proprietà Descrizione Obbligatoria
type La proprietà type deve essere impostata su: AzureTableStorage.
sasUri Specificare l'URI SAS dell'URI della firma di accesso condiviso alla tabella.
Contrassegnare questo campo come SecureString per archiviare la chiave in modo sicuro in Data Factory. È anche possibile inserire il token di firma di accesso condiviso in Azure Key Vault per sfruttare la rotazione automatica e rimuovere la parte del token. Vedere gli esempi seguenti e l'articolo Archiviare le credenziali in Azure Key Vault per altri dettagli.
connectVia Runtime di integrazione da usare per la connessione all'archivio dati. È possibile usare Azure Integration Runtime o il runtime di integrazione self-hosted (se l'archivio dati si trova in una rete privata). Se non specificato, viene usato il runtime di integrazione di Azure predefinito. No

Nota

L'uso di un servizio collegato di tipo "AzureStorage", è ancora supportato così com'è, tuttavia in futuro verrà consigliato di usare il nuovo tipo di servizio collegato "AzureTableStorage".

Esempio:

{
    "name": "AzureTableStorageLinkedService",
    "properties": {
        "type": "AzureTableStorage",
        "typeProperties": {
            "sasUri": {
                "type": "SecureString",
                "value": "<SAS URI of the Azure Storage resource e.g. https://<account>.table.core.windows.net/<table>?sv=<storage version>&amp;st=<start time>&amp;se=<expire time>&amp;sr=<resource>&amp;sp=<permissions>&amp;sip=<ip range>&amp;spr=<protocol>&amp;sig=<signature>>"
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Esempio: archiviare la chiave dell'account in Azure Key Vault

{
    "name": "AzureTableStorageLinkedService",
    "properties": {
        "type": "AzureTableStorage",
        "typeProperties": {
            "sasUri": {
                "type": "SecureString",
                "value": "<SAS URI of the Azure Storage resource without token e.g. https://<account>.table.core.windows.net/<table>>"
            },
            "sasToken": { 
                "type": "AzureKeyVaultSecret", 
                "store": { 
                    "referenceName": "<Azure Key Vault linked service name>", 
                    "type": "LinkedServiceReference" 
                }, 
                "secretName": "<secretName>" 
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Quando si crea un URI di firma di accesso condiviso, tenere presente quanto segue:

  • Impostare le autorizzazioni appropriate di lettura o scrittura per gli oggetti in base al modo in cui il servizio collegato (lettura, scrittura, lettura/scrittura) viene usato nella data factory.
  • Impostare Ora di scadenza in modo appropriato. Assicurarsi che l'accesso agli oggetti di archiviazione non scada nel periodo attivo della pipeline.
  • L'URI deve essere creato al giusto livello di tabella, in base alle necessità.

Proprietà del set di dati

Per un elenco completo delle sezioni e delle proprietà disponibili per la definizione dei set di dati, vedere l'articolo Set di dati. Questa sezione presenta un elenco delle proprietà supportate dal set di dati Tabella di Azure.

Per copiare dati in e da Tabella di Azure, impostare la proprietà type del set di dati su AzureTable. Sono supportate le proprietà seguenti.

Proprietà Descrizione Obbligatoria
type La proprietà type del set di dati deve essere impostata su AzureTable.
tableName Nome della tabella nell'istanza del database di Archiviazione tabelle a cui fa riferimento il servizio collegato.

Esempio:

{
    "name": "AzureTableDataset",
    "properties":
    {
        "type": "AzureTable",
        "typeProperties": {
            "tableName": "MyTable"
        },
        "schema": [],
        "linkedServiceName": {
            "referenceName": "<Azure Table storage linked service name>",
            "type": "LinkedServiceReference"
        }
    }
}

Schema da Data Factory

Per gli archivi di dati privi di schema, ad esempio Tabella di Azure, Data Factory deduce lo schema in uno dei modi seguenti:

  • Se si specifica il mapping delle colonne nell'attività di copia, Data Factory l'elenco di colonne sul lato origine per recuperare i dati. In questo caso, se una riga non contiene un valore per una colonna, viene inserito un valore null.
  • Se non si specifica il mapping delle colonne nell'attività di copia, Data Factory deduce lo schema usando la prima riga dei dati. In questo caso, se la prima riga non contiene lo schema completo (ad es. alcune colonne hanno un valore null), alcune colonne risultano mancanti nel risultato dell'operazione di copia.

Proprietà dell'attività di copia

Per un elenco completo delle sezioni e delle proprietà disponibili per la definizione delle attività, vedere l'articolo sulle pipeline. Questa sezione presenta un elenco delle proprietà supportate dall'origine e dal sink Tabella di Azure.

Tabelle di Azure come tipo di origine

Per copiare dati da Tabella di Azure, impostare il tipo di origine nell'attività di copia su AzureTableSource. Nella sezione source dell'attività di copia sono supportate le proprietà seguenti.

Proprietà Descrizione Obbligatoria
type La proprietà type dell'origine dell'attività di copia deve essere impostata su AzureTableSource.
AzureTableSourceQuery Usare la query di Archiviazione tabelle personalizzata per leggere i dati.
La query di origine è una mappa diretta dall'opzione di query supportata da Archiviazione tabelle di Azure, altre informazioni sulla sintassi in questo documento e gli esempi nella sezione seguente relativa agli esempi $filter di azureTableSourceQuery.
No
azureTableSourceIgnoreTableNotFound Indica se consentire l'eccezione di tabella non esistente.
I valori consentiti sono True e False (predefinito).
No

esempi di azureTableSourceQuery

Nota

Il timeout dell'operazione di query di Tabella di Azure è di 30 secondi, secondo quanto applicato dal servizio tabelle di Azure. Per informazioni su come ottimizzare la query, vedere l'articolo Progettazione per le query.

In Azure Data Factory, se si vuole filtrare i dati in base a una colonna di tipo DateTime, fare riferimento a questo esempio:

"azureTableSourceQuery": "LastModifiedTime gt datetime'2017-10-01T00:00:00' and LastModifiedTime le datetime'2017-10-02T00:00:00'"

Se invece si vuole filtrare i dati in base a una colonna di tipo stringa, fare riferimento a questo esempio:

"azureTableSourceQuery": "LastModifiedTime ge '201710010000_0000' and LastModifiedTime le '201710010000_9999'"

Se si usa un parametro della pipeline, eseguire il cast del valore datetime al formato corretto come illustrato negli esempi precedenti.

Tabelle di Azure come tipo di sink

Per copiare dati in Tabella di Azure, impostare il tipo di sink nell'attività di copia su AzureTableSink. Nella sezione sink dell'attività di copia sono supportate le proprietà seguenti.

Proprietà Descrizione Obbligatoria
type La proprietà type del sink dell'attività di copia deve essere impostata su AzureTableSink.
azureTableDefaultPartitionKeyValue Valore predefinito della chiave di partizione che può essere usato dal sink. No
azureTablePartitionKeyName Specificare il nome della colonna i cui valori vengono usati come chiavi di partizione. Se non specificato, viene usato "AzureTableDefaultPartitionKeyValue" come chiave di partizione. No
azureTableRowKeyName Specificare il nome della colonna i cui valori vengono usati come chiave di riga. Se non specificato, usare un GUID per ogni riga. No
azureTableInsertType Modalità di inserimento dei dati in una tabella di Azure. Questa proprietà verifica se per le righe esistenti nella tabella di output con chiavi di partizione e di riga corrispondenti i valori vengono sostituiti o uniti.

I valori consentiti sono: merge (predefinito) e replace.

Questa impostazione si applica a livello di riga e non a livello di tabella. Nessuna delle due opzioni consente di eliminare righe nella tabella di output che non esistono nell'input. Per scoprire come funzionano le impostazioni merge e replace, vedereInsert or Merge Entity (Inserire o unire un'entità) e Insert or Replace Entity (Inserire o sostituire un'entità).
No
writeBatchSize Inserisce dati in Tabella di Azure quando viene raggiunto il valore di writeBatchSize o writeBatchTimeout.
I valori consentiti sono integer (numero di righe).
No (il valore predefinito è 10.000)
writeBatchTimeout Inserisce dati in Tabella di Azure quando viene raggiunto il valore di writeBatchSize o writeBatchTimeout.
I valori consentiti sono un intervallo di tempo. Ad esempio "00:20:00" (20 minuti).
No (il valore predefinito è 90 secondi, il timeout predefinito del client di archiviazione)
maxConcurrentConnections Limite superiore di connessioni simultanee stabilite all'archivio dati durante l'esecuzione dell'attività. Specificare un valore solo quando si desidera limitare le connessioni simultanee. No

Esempio:

"activities":[
    {
        "name": "CopyToAzureTable",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<Azure Table output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "AzureTableSink",
                "azureTablePartitionKeyName": "<column name>",
                "azureTableRowKeyName": "<column name>"
            }
        }
    }
]

azureTablePartitionKeyName

È necessario eseguire il mapping di una colonna di origine a una colonna di destinazione usando la proprietà translator prima di poter usare la colonna di destinazione come azureTablePartitionKeyName.

Nell'esempio seguente viene eseguito il mapping della colonna di origine DivisionID alla colonna di destinazione DivisionID:

"translator": {
    "type": "TabularTranslator",
    "columnMappings": "DivisionID: DivisionID, FirstName: FirstName, LastName: LastName"
}

"DivisionID" è specificato come chiave di partizione.

"sink": {
    "type": "AzureTableSink",
    "azureTablePartitionKeyName": "DivisionID"
}

Mapping dei tipi di dati per Tabella di Azure

Quando si copiano dati da e in Tabella di Azure, vengono usati i mapping seguenti tra i tipi di dati di Tabella di Azure e i tipi di dati provvisori di Data Factory. Per informazioni su come l'attività di copia esegue il mapping dello schema di origine e del tipo di dati al sink, vedere Mapping dello schema e del tipo di dati.

Quando si spostano i dati da e verso Tabella di Azure, i seguenti mapping definiti da Tabella di Azure vengono usati dai tipi OData di Tabella di Azure al tipo .NET e viceversa.

Tipo di dati di Tabella di Azure Tipo di dati provvisorio di Data Factory Dettagli
Edm.Binary byte[] Una matrice di byte di dimensioni fino a 64 KB.
Edm.Boolean bool Valore booleano.
Edm.DateTime Datetime Un valore a 64 bit espresso come Coordinated Universal Time (UTC). L'intervallo DateTime supportato inizia a mezzanotte del 1 gennaio 1601 D.C. (C.E.), UTC. L'intervallo termina il 31 dicembre 9999.
Edm.Double double Un valore a virgola mobile a 64 bit.
Edm.Guid Guid Un identificatore univoco globale a 128 bit.
Edm.Int32 Int32 Un valore integer a 32 bit.
Edm.Int64 Int64 Un valore integer a 64 bit.
Edm.String string Un valore con codifica UTF-16. I valori string possono avere dimensioni fino a 64 KB.

Proprietà dell'attività Lookup

Per altre informazioni sulle proprietà, vedere Attività Lookup.

Passaggi successivi

Per un elenco degli archivi dati supportati come origini e sink dall'attività di copia in Data Factory, vedere gli archivi dati supportati.