Copiare dati da e verso Azure Databricks Delta Lake usando Azure Data Factory

SI APPLICA A: Azure Data Factory Azure Synapse Analytics

Questo articolo illustra come usare il attività Copy in Azure Data Factory copiare dati da e verso Azure Databricks Delta Lake. Si basa sull'attività Copy in Azure Data Factory, che presenta una panoramica generale dell'attività di copia.

Funzionalità supportate

Questo Azure Databricks connettore Delta Lake è supportato per le attività seguenti:

In generale, Azure Data Factory Supporta Delta Lake con le funzionalità seguenti per soddisfare le diverse esigenze.

  • attività Copy supporta il Azure Databricks Delta Lake per copiare dati da qualsiasi archivio dati di origine supportato Azure Databricks una tabella delta lake e da una tabella delta lake Azure Databricks qualsiasi archivio dati sink supportato. Sfrutta il cluster Databricks per eseguire lo spostamento dei dati, vedere i dettagli nella sezione Prerequisiti.
  • Mapping Flusso di dati supporta il formato Delta generico su Archiviazione di Azure come origine e sink per la lettura e la scrittura di file Delta per ETL senza codice e viene eseguito in Azure Integration Runtime.
  • Le attività di Databricks supportano l'orchestrazione del carico di lavoro ETL o machine learning incentrato sul codice in delta lake.

Prerequisiti

Per usare questo Azure Databricks connettore Delta Lake, è necessario configurare un cluster in Azure Databricks.

  • Per copiare i dati in delta lake, attività Copy richiama un cluster Azure Databricks per leggere i dati da un Archiviazione di Azure, ovvero l'origine originale o un'area di staging in cui Data Factory scrive innanzitutto i dati di origine tramite una copia predefinita a fasi. Per altre informazioni, vedere Delta lake come sink.
  • Analogamente, per copiare dati da Delta Lake, attività Copy richiama un cluster Azure Databricks per scrivere dati in un Archiviazione di Azure, ovvero il sink originale o un'area di gestione temporanea da cui Data Factory continua a scrivere dati nel sink finale tramite la copia di staging predefinita. Per altre informazioni, vedere Delta Lake come origine.

Il cluster Databricks deve avere accesso al BLOB di Azure o all'account Azure Data Lake Storage Gen2, sia al contenitore di archiviazione/file system usato per l'origine/sink/staging che al contenitore/file system in cui si vogliono scrivere le tabelle Delta Lake.

  • Per usare Azure Data Lake Storage Gen2, è possibile configurare un'entità servizio nel cluster Databricks come parte della Apache Spark configurazione. Seguire i passaggi descritti in Accedere direttamente con l'entità servizio.

  • Per usare l'archiviazione BLOB di Azure, è possibile configurare una chiave di accesso dell'account di archiviazione o un token di firma di accesso condiviso nel cluster Databricks come parte della configurazione Apache Spark archiviazione. Seguire la procedura descritta in Accedere all'archiviazione BLOB di Azure usando l'API RDD.

Durante l'esecuzione dell'attività di copia, se il cluster configurato è stato terminato, Data Factory lo avvia automaticamente. Se si crea una pipeline usando l'interfaccia utente di creazione Data Factory, per operazioni come l'anteprima dei dati, è necessario avere un cluster attivo, Data Factory non avvia il cluster per conto dell'utente.

Specificare la configurazione del cluster

  1. Nell'elenco a discesa Modalità cluster selezionare Standard.

  2. Nell'Databricks Runtime a discesa Versione selezionare una versione del runtime di Databricks.

  3. Attivare l'ottimizzazione automatica aggiungendo le proprietà seguenti alla configurazione di Spark:

    spark.databricks.delta.optimizeWrite.enabled true
    spark.databricks.delta.autoCompact.enabled true
    
  4. Configurare il cluster in base alle esigenze di integrazione e scalabilità.

Per informazioni dettagliate sulla configurazione del cluster, vedere Configurare i cluster.

Introduzione

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

Le sezioni seguenti forniscono informazioni dettagliate sulle proprietà che Data Factory entità specifiche di un Azure Databricks Delta Lake.

Proprietà del servizio collegato

Le proprietà seguenti sono supportate per un Azure Databricks collegato Delta Lake.

Proprietà Descrizione Obbligatoria
type La proprietà type deve essere impostata su AzureDatabricksDeltaLake.
dominio Specificare l'AZURE DATABRICKS dell'area di lavoro, ad esempio https://adb-xxxxxxxxx.xx.azuredatabricks.net .
clusterId Specificare l'ID cluster di un cluster esistente. Deve trattarsi di un cluster interattivo già creato.
È possibile trovare l'ID cluster di un cluster interattivo nell'area di lavoro di Databricks -> Cluster -> Interactive Cluster Name (Nome cluster interattivo) -> Configurazione -> Tag. Altre informazioni
accessToken Il token di accesso è obbligatorio per l'autenticazione del data factory con Azure Databricks. Deve essere generato dall'area di lavoro di Databricks. I passaggi più dettagliati per trovare il token di accesso sono disponibili qui.
connectVia Runtime di integrazione utilizzato per connettersi all'archivio dati. È possibile usare il runtime di integrazione di Azure o un runtime di integrazione self-hosted (se l'archivio dati si trova in una rete privata). Se non viene specificato, usa il runtime di integrazione di Azure predefinito. No

Esempio:

{
    "name": "AzureDatabricksDeltaLakeLinkedService",
    "properties": {
        "type": "AzureDatabricksDeltaLake",
        "typeProperties": {
            "domain": "https://adb-xxxxxxxxx.xx.azuredatabricks.net",
            "clusterId": "<cluster id>",
            "accessToken": {
                "type": "SecureString", 
                "value": "<access token>"
            }
        }
    }
}

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.

Le proprietà seguenti sono supportate per il set di dati Azure Databricks Delta Lake.

Proprietà Descrizione Obbligatoria
type La proprietà type del set di dati deve essere impostata su AzureDatabricksDeltaLakeDataset.
database Nome del database. No per l'origine, sì per il sink
table Nome della tabella differenziale. No per l'origine, sì per il sink

Esempio:

{
    "name": "AzureDatabricksDeltaLakeDataset",
    "properties": {
        "type": "AzureDatabricksDeltaLakeDataset",
        "typeProperties": {
            "database": "<database name>",
            "table": "<delta table name>"
        },
        "schema": [ < physical schema, optional, retrievable during authoring > ],
        "linkedServiceName": {
            "referenceName": "<name of linked service>",
            "type": "LinkedServiceReference"
        }
    }
}

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 fornisce un elenco delle proprietà supportate dall'origine e dal sink Azure Databricks Delta Lake.

Delta lake come origine

Per copiare dati Azure Databricks Delta Lake, le proprietà seguenti sono supportate nella attività Copy di origine.

Proprietà Descrizione Obbligatoria
type La proprietà type dell'origine attività Copy deve essere impostata su AzureDatabricksDeltaLakeSource.
query Specificare la query SQL per leggere i dati. Per il controllo dei viaggi nel tempo, seguire il modello seguente:
- SELECT * FROM events TIMESTAMP AS OF timestamp_expression
- SELECT * FROM events VERSION AS OF version
No
exportSettings Impostazioni avanzate usate per recuperare i dati dalla tabella differenziale. No
In exportSettings :
tipo Tipo di comando di esportazione, impostato su AzureDatabricksDeltaLakeExportCommand.
Dateformat Formattare il tipo di data in stringa con un formato di data. I formati di data personalizzati seguono i formati in base al modello datetime. Se non specificato, viene utilizzato il valore predefinito yyyy-MM-dd . No
timestampFormat Formatta il tipo di timestamp in stringa con un formato timestamp. I formati di data personalizzati seguono i formati in base al modello datetime. Se non specificato, viene utilizzato il valore predefinito yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX] . No

Copia diretta da Delta Lake

Se l'archivio dati sink e il formato soddisfano i criteri descritti in questa sezione, è possibile usare l'attività Copy per copiare direttamente da Azure Databricks delta al sink. Data Factory controlla le impostazioni e non riesce attività Copy'esecuzione se non vengono soddisfatti i criteri seguenti:

  • Il servizio collegato sink è archiviazione BLOB di Azure o Azure Data Lake Storage Gen2. Le credenziali dell'account devono essere preconfigurati Azure Databricks configurazione del cluster. Per altre informazioni, vedere Prerequisiti.

  • Il formato dei dati sink è Parquet, testo delimitato o Avro con le configurazioni seguenti e punta a una cartella anziché a un file.

    • Per il formato Parquet, il codec di compressione è none, snappy o gzip.
    • Per il formato di testo delimitato:
      • rowDelimiter è qualsiasi carattere singolo.
      • compression può essere none, bzip2, gzip.
      • encodingName UTF-7 non è supportato.
    • Per il formato Avro, il codec di compressione è none, deflate o snappy.
  • Nell'attività Copy non additionalColumns è specificato.

  • Se si copiano dati in testo delimitato, nel sink dell'attività di copia deve fileExtension essere ".csv".

  • Nel mapping attività Copy, la conversione dei tipi non è abilitata.

Esempio:

"activities":[
    {
        "name": "CopyFromDeltaLake",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<Delta lake input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "AzureDatabricksDeltaLakeSource",
                "sqlReaderQuery": "SELECT * FROM events TIMESTAMP AS OF timestamp_expression"
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

Copia a fasi da delta lake

Quando il formato o l'archivio dati sink non corrisponde ai criteri di copia diretta, come indicato nell'ultima sezione, abilitare la copia predefinita a fasi usando un'istanza di archiviazione di Azure provvisoria. La funzionalità copia di staging assicura inoltre una migliore velocità effettiva, Data Factory esporta i dati da Azure Databricks Delta Lake nell'archiviazione di staging, quindi copia i dati nel sink e infine pulisce i dati temporanei dall'archiviazione di staging. Per informazioni dettagliate sulla copia dei dati tramite staging, vedere Copia a fasi.

Per usare questa funzionalità, creare un servizio collegato di archiviazione BLOB di Azure o un Azure Data Lake Storage Gen2 collegato che faccia riferimento all'account di archiviazione come staging provvisorio. Specificare quindi le enableStaging proprietà stagingSettings e nel attività Copy.

Nota

Le credenziali dell'account di archiviazione di staging devono essere preconfigurati Azure Databricks configurazione del cluster, vedere Prerequisiti.

Esempio:

"activities":[
    {
        "name": "CopyFromDeltaLake",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<Delta lake input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "AzureDatabricksDeltaLakeSource",
                "sqlReaderQuery": "SELECT * FROM events TIMESTAMP AS OF timestamp_expression"
            },
            "sink": {
                "type": "<sink type>"
            },
            "enableStaging": true,
            "stagingSettings": {
                "linkedServiceName": {
                    "referenceName": "MyStagingStorage",
                    "type": "LinkedServiceReference"
                },
                "path": "mystagingpath"
            }
        }
    }
]

Delta lake come sink

Per copiare dati Azure Databricks Delta Lake, le proprietà seguenti sono supportate nella sezione attività Copy sink.

Proprietà Descrizione Obbligatoria
type Proprietà type del sink attività Copy, impostata su AzureDatabricksDeltaLakeSink.
preCopyScript Specificare una query SQL per l'attività Copy prima di scrivere dati nella tabella differenziale di Databricks in ogni esecuzione. È possibile usare questa proprietà per pulire i dati precaricati o aggiungere una tabella troncata o un'istruzione Vacuum. No
importSettings Impostazioni avanzate usate per scrivere dati nella tabella differenziale. No
In importSettings :
tipo Tipo di comando di importazione, impostato su AzureDatabricksDeltaLakeImportCommand.
Dateformat Stringa di formato per il tipo di data con un formato di data. I formati di data personalizzati seguono i formati nel modello datetime. Se non viene specificato, usa il valore predefinito yyyy-MM-dd . No
timestampFormat Stringa di formato in tipo timestamp con formato timestamp. I formati di data personalizzati seguono i formati nel modello datetime. Se non viene specificato, usa il valore predefinito yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX] . No

Copia diretta in delta lake

Se l'archivio dati di origine e il formato soddisfano i criteri descritti in questa sezione, è possibile usare il attività Copy per copiare direttamente dall'origine Azure Databricks Delta Lake. Azure Data Factory verifica le impostazioni e non riesce attività Copy'esecuzione se non vengono soddisfatti i criteri seguenti:

  • Il servizio collegato di origine è l'archiviazione BLOB di Azure o Azure Data Lake Storage Gen2. Le credenziali dell'account devono essere preconfigurati Azure Databricks configurazione del cluster, vedere Prerequisiti.

  • Il formato dei dati di origine è Parquet, testo delimitato o Avro con le configurazioni seguenti e punta a una cartella anziché a un file.

    • Per il formato Parquet, il codec di compressione è none, snappy o gzip.
    • Per il formato testo delimitato:
      • rowDelimiter è il valore predefinito o qualsiasi carattere singolo.
      • compression può essere none, bzip2, gzip.
      • encodingName UTF-7 non è supportato.
    • Per il formato Avro, il codec di compressione è none, deflate o snappy.
  • Nell'attività Copy seguente:

    • wildcardFileName contiene solo caratteri * jolly ma non e non è ? wildcardFolderName specificato.
    • prefix, modifiedDateTimeStart, modifiedDateTimeEnd e enablePartitionDiscovery non sono specificati.
    • additionalColumns non specificato.
  • Nel mapping attività Copy, la conversione del tipo non è abilitata.

Esempio:

"activities":[
    {
        "name": "CopyToDeltaLake",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<Delta lake output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "AzureDatabricksDeltaLakeSink"
            }
        }
    }
]

Copia di stage in Delta Lake

Quando l'archivio dati o il formato di origine non corrisponde ai criteri di copia diretta, come indicato nell'ultima sezione, abilitare la copia di gestione locale predefinita usando un'istanza di archiviazione di Azure provvisoria. La funzionalità copia di staging assicura inoltre una migliore velocità effettiva, Data Factory converte automaticamente i dati per soddisfare i requisiti di formato dei dati nell'archiviazione di staging, quindi carica i dati in Delta Lake da questa posizione. Infine, pulisce i dati temporanei dalla memoria. Per informazioni dettagliate sulla copia dei dati tramite gestione temporanea, vedere Copia di staging.

Per usare questa funzionalità, creare un servizio collegato di archiviazione BLOB di Azure o un servizio collegato Azure Data Lake Storage Gen2 che fa riferimento all'account di archiviazione come staging provvisorio. Specificare quindi le enableStaging proprietà stagingSettings e nella attività Copy.

Nota

Le credenziali dell'account di archiviazione di staging devono essere preconfigurati Azure Databricks configurazione del cluster. Per altre informazioni, vedere Prerequisiti.

Esempio:

"activities":[
    {
        "name": "CopyToDeltaLake",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<Delta lake output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "AzureDatabricksDeltaLakeSink"
            },
            "enableStaging": true,
            "stagingSettings": {
                "linkedServiceName": {
                    "referenceName": "MyStagingBlob",
                    "type": "LinkedServiceReference"
                },
                "path": "mystagingpath"
            }
        }
    }
]

Monitoraggio

Azure Data Factory offre la stessa esperienza di monitoraggio dell'attività di copia degli altri connettori. Inoltre, poiché il caricamento dei dati da/in Delta Lake è in esecuzione nel cluster Azure Databricks, è possibile visualizzare ulteriormente i log dettagliati del cluster e monitorare le prestazioni.

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 attività Copy in Data Factory, vedere Archivi dati e formati supportati.