Azure Data Factory - Domande frequenti

Domande generali

Che cos'è Azure Data Factory?

Data Factory è un servizio di integrazione dei dati basato sul cloud che automatizza lo spostamento e la trasformazione dei dati. Analogamente a quanto avviene in uno stabilimento di produzione, in cui vengono usate attrezzature per trasformare le materie prime in prodotti finiti, Data Factory orchestra i servizi esistenti che raccolgono i dati non elaborati e li trasforma in informazioni pronte per l'uso.

Data Factory consente di creare flussi di lavoro basati sui dati per spostare dati dagli archivi locali a quelli sul cloud e viceversa, nonché per elaborare o trasformare i dati usando servizi di calcolo come Azure HDInsight e Azure Data Lake Analytics. Dopo aver creato una pipeline che esegue l'azione necessaria, è possibile pianificarne l'esecuzione periodica, ad esempio ogni ora, giorno, settimana e così via.

Per altre informazioni, vedere Cenni preliminari e concetti chiave.

Dove posso trovare informazioni dettagliate sui prezzi di Azure Data Factory?

Per saperne di più, vedere la pagina Dettagli prezzi di Data Factory.

In che modo è possibile iniziare a usare Azure Data Factory?

In quali paesi è disponibile Data Factory?

Data Factory è disponibile negli Stati Uniti occidentali e in Europa settentrionale. I servizi di calcolo e di archiviazione usati dalle istanze di Data Factory possono essere disponibili in altri paesi. Vedere Aree supportate.

Quali sono i limiti sul numero di Data Factory/pipeline/attività/set di dati?

Vedere la sezione Limiti di Azure Data Factory dell'articolo Sottoscrizione di Azure e limiti dei servizi, quote e vincoli .

Quale esperienza di creazione/sviluppo offre il servizio Azure Data Factory?

È possibile creare data factory con uno degli strumenti/SDK seguenti:

È possibile rinominare una data factory?

No. Come per le altre risorse di Azure, non è possibile modificare il nome di una data factory di Azure.

È possibile trasferire una data factory da una sottoscrizione di Azure a un'altra?

Sì. Usare il pulsante Sposta nel pannello della data factory come mostrato nel diagramma seguente:

Spostare una data factory

Quali sono gli ambienti di calcolo supportati da Data Factory?

La seguente tabella presenta un elenco degli ambienti di calcolo supportati da Data Factory e le attività eseguibili in tali ambienti.

Ambiente di calcolo attività
Cluster HDInsight su richiesta o il proprio cluster HDInsight DotNet, Hive, Pig, MapReduce, Hadoop Streaming
Azure Batch DotNet
Azure Machine Learning Attività di Machine Learning: esecuzione batch e aggiornamento risorse
Azure Data Lake Analytics. Attività U-SQL di Data Lake Analytics
Azure SQL, Azure SQL Data Warehouse, SQL Server Stored procedure

Come si confronta Azure Data Factory con SQL Server Integration Services (SSIS)?

Vedere la presentazione Azure Data Factory e SSIS di uno dei nostri MVP (Most Valued Professional): Reza Rad. Alcune delle modifiche recenti in Data Factory potrebbero non essere elencate della presentazione. Continuiamo ad aggiungere altre funzionalità ad Azure Data Factory. Continuiamo ad aggiungere altre funzionalità ad Azure Data Factory. Questi aggiornamenti verranno incorporati nel confronto delle tecnologie di integrazione di dati da Microsoft nel corso di quest'anno.

Attività - Domande frequenti

Quali sono i diversi tipi di attività che si possono usare in una pipeline di Data Factory?

Quando viene eseguita un'attività?

L'impostazione di configurazione availability della tabella dati di output determina quando viene eseguita l'attività. Se vengono specificati set di dati di input, prima dell'esecuzione l'attività verifica se sono soddisfatte tutte le dipendenze dei dati di input, ad esempio lo stato Pronto .

Attività di copia - Domande frequenti

È consigliabile avere una pipeline con più attività o una pipeline distinta per ogni attività?

Le pipeline sono state progettate per aggregare attività correlate. Se i set di dati che si interconnettono non vengono usati da altre attività esterne alla pipeline, è possibile mantenere le attività in un'unica pipeline. In questo modo non sarà necessario concatenare periodi attivi della pipeline per allinearli reciprocamente. Ciò consentirà anche di mantenere meglio l'integrità dei dati delle tabelle interne alla pipeline durante l'aggiornamento di quest'ultima. Essenzialmente, l'aggiornamento arresta tutte le attività nella pipeline, le rimuove e le crea di nuovo. Dal punto di vista della creazione, potrebbe anche risultare più semplice visualizzare il flusso di dati entro le attività correlate in un file JSON per la pipeline.

Quali sono gli archivi dati supportati?

L'attività di copia in Data Factory esegue la copia dei dati da un archivio dati di origine a un archivio dati sink. Data Factory supporta gli archivi dati seguenti. I dati da qualsiasi origine possono essere scritti in qualsiasi sink. Fare clic su un archivio dati per informazioni su come copiare dati da e verso tale archivio.

Categoria Archivio dati Supportato come origine Supportato come sink
Azure Archivio BLOB di Azure
  Azure Cosmos DB (API di DocumentDB)
  Archivio Data Lake di Azure
  Database SQL di Azure
  Azure SQL Data Warehouse
  Indice di Ricerca di Azure
  Archivio tabelle di Azure
Database Amazon Redshift
  DB2*
  MySQL*
  Oracle*
  PostgreSQL*
  SAP Business Warehouse*
  SAP HANA*
  SQL Server*
  Sybase*
  Teradata*
NoSQL Cassandra*
  MongoDB*
File Amazon S3
  File system*
  FTP
  HDFS*
  SFTP
Altro HTTP generico
  OData generico
  ODBC generico*
  Salesforce
  Tabella Web (tabella da HTML)
  GE Historian*
Nota

Gli archivi dati contrassegnati da un asterisco (*) possono essere locali o in IaaS di Azure e richiederanno l'installazione del Gateway di gestione dati in un computer IaaS locale o in Azure.

Quali sono i formati di file supportati?

Specifica dei formati

Azure Data Factory supporta i tipi di formato seguenti:

Specifica di TextFormat

Per analizzare i file di testo o scrivere i dati in formato testo, impostare la proprietà format type su TextFormat. È anche possibile specificare le proprietà facoltative seguenti nella sezione format. Vedere la sezione Esempio di TextFormat sulla configurazione.

Proprietà Descrizione Valori consentiti Obbligatorio
columnDelimiter Il carattere usato per separare le colonne in un file. È possibile prendere in considerazione la possibilità di usare un carattere raro non stampabile che probabilmente non esiste nei dati: ad esempio, specificare "\u0001" che rappresenta Start of Heading (SOH). È consentito un solo carattere. Il valore predefinito è la virgola (",").

Per usare un carattere Unicode, vedere i caratteri Unicode per ottenere il codice corrispondente.
No
rowDelimiter Il carattere usato per separare le righe in un file. È consentito un solo carattere. Sono consentiti i seguenti valori predefiniti in lettura: ["\r\n", "\r", "\n"] e "\r\n" in scrittura. No
escapeChar Carattere speciale usato per eseguire l'escape di un delimitatore di colonna nel contenuto del file di input.

Per una tabella, è possibile specificare sia escapeChar che quoteChar.
È consentito un solo carattere. Nessun valore predefinito.

Ad esempio, se è presente una virgola (",") come delimitatore di colonna, ma si desidera inserire un carattere virgola nel testo (ad esempio: "Hello, world"), è possibile definire "$" come carattere di escape e usare la stringa "Hello$, world" nell'origine.
No
quoteChar Carattere usato per delimitare tra virgolette un valore stringa. I delimitatori di colonne e righe tra virgolette sono considerati parte del valore stringa. Questa proprietà è applicabile sia ai set di dati di input che a quelli di output.

Per una tabella, è possibile specificare sia escapeChar che quoteChar.
È consentito un solo carattere. Nessun valore predefinito.

Ad esempio, se è presente una virgola (",") come delimitatore di colonna, ma si desidera inserire un carattere virgola nel testo (ad esempio: ), è possibile definire " (virgolette doppie) come carattere di virgolette e usare la stringa "Hello, world" nell'origine.
No
nullValue Uno o più caratteri usati per rappresentare un valore null. Uno o più caratteri. I valori predefiniti sono "\N" e "NULL" in lettura e "\N" in scrittura. No
encodingName Specificare il nome della codifica. Un nome di codifica valido. Vedere Proprietà Encoding.EncodingName. Esempio: windows-1250 o shift_jis. Il valore predefinito è UTF-8. No
firstRowAsHeader Specifica se considerare la prima riga come intestazione. In un set di dati di input Data factory legge la prima riga come intestazione. In un set di dati di output Data factory scrive la prima riga come intestazione.

Vedere Scenari per l'uso di firstRowAsHeader e skipLineCount per gli scenari di esempio.
True
False (impostazione predefinita)
No
skipLineCount Indica il numero di righe da ignorare durante la lettura di dati da file di input. Se sono specificati sia skipLineCount che firstRowAsHeader, le righe vengono ignorate e le informazioni di intestazione vengono lette dal file di input.

Vedere Scenari per l'uso di firstRowAsHeader e skipLineCount per gli scenari di esempio.
Integer No
treatEmptyAsNull Specifica se considerare una stringa vuota o null come valore null durante la lettura di dati da un file di input. True (impostazione predefinita)
False
No

Esempio di TextFormat

L'esempio seguente illustra alcune delle proprietà del formato per TextFormat.

"typeProperties":
{
    "folderPath": "mycontainer/myfolder",
    "fileName": "myblobname",
    "format":
    {
        "type": "TextFormat",
        "columnDelimiter": ",",
        "rowDelimiter": ";",
        "quoteChar": "\"",
        "NullValue": "NaN",
        "firstRowAsHeader": true,
        "skipLineCount": 0,
        "treatEmptyAsNull": true
    }
},

Per usare escapeChar invece di quoteChar, sostituire la riga con quoteChar con l'elemento escapeChar seguente:

"escapeChar": "$",

Scenari di utilizzo di firstRowAsHeader e skipLineCount

  • Si desidera copiare da un'origine non basata su file in un file di testo e aggiungere una riga di intestazione contenente i metadati dello schema (ad esempio: schema SQL). Per questo scenario specificare firstRowAsHeader come true nel set di dati di output.
  • Si desidera copiare da un file di testo contenente una riga di intestazione a un sink non basato su file ed eliminare tale riga. Specificare firstRowAsHeader come true nel set di dati di input.
  • Si desidera copiare da un file di testo e ignorare alcune righe all'inizio che non contengono né dati né un'intestazione. Specificare skipLineCount per indicare il numero di righe da ignorare. Se il resto del file contiene una riga di intestazione, è anche possibile specificare firstRowAsHeader. Se sono specificati sia skipLineCount che firstRowAsHeader, le righe vengono ignorate e le informazioni di intestazione vengono lette dal file di input.

Impostazione di JsonFormat

Per importare/esportare i file JSON senza modifiche in/da Azure Cosmos DB, vedere la sezione Importare/esportare documenti JSON nell'articolo sul connettore di Azure Cosmos DB per ottenere informazioni dettagliate.

Per analizzare i file JSON o scrivere i dati in formato JSON, impostare la proprietà format type su JsonFormat. È anche possibile specificare le proprietà facoltative seguenti nella sezione format. Vedere la sezione Esempio JsonFormat sulla configurazione.

Proprietà Descrizione Obbligatoria
filePattern Indicare il modello dei dati archiviati in ogni file JSON. I valori consentiti sono: setOfObjects e arrayOfObjects. Il valore predefinito è setOfObjects. Vedere la sezione Modelli di file JSON per i dettagli su questi modelli. No
jsonNodeReference Per eseguire l'iterazione dei dati ed estrarli dagli oggetti presenti nel campo di una matrice con lo stesso modello, specificare il percorso JSON di tale matrice. Questa proprietà è supportata solo quando si copiano i dati dai file JSON. No
jsonPathDefinition Specificare l'espressione del percorso JSON per ogni mapping colonne con un nome di colonna personalizzato. Iniziare con una lettera minuscola. Questa proprietà è supportata solo quando si copiano i dati dai file JSON ed è possibile estrarre i dati dall'oggetto o dalla matrice.

Per i campi sotto l'oggetto radice, iniziare con la radice $. Per i campi nella matrice scelta dalla proprietà jsonNodeReference, iniziare dall'elemento matrice. Vedere la sezione Esempio JsonFormat sulla configurazione.
No
encodingName Specificare il nome della codifica. Per l'elenco di nomi di codifica validi, vedere: Proprietà Encoding.EncodingName . Ad esempio: windows-1250 o shift_jis. Il valore predefinito è UTF-8. No
nestingSeparator Carattere utilizzato per separare i livelli di nidificazione. Il valore predefinito è "." (punto). No

Modelli di file JSON

L'attività di copia può eseguire l'analisi al di sotto dei modelli di file JSON:

  • Tipo I: setOfObjects

    Ogni file contiene un solo oggetto o più oggetti con delimitatori di riga/concatenati. Quando si sceglie questa opzione in un set di dati di output, l'attività di copia produce un singolo file JSON con un oggetto per riga (delimitato da riga).

    • Esempio di JSON a oggetto singolo

      {
          "time": "2015-04-29T07:12:20.9100000Z",
          "callingimsi": "466920403025604",
          "callingnum1": "678948008",
          "callingnum2": "567834760",
          "switch1": "China",
          "switch2": "Germany"
      }
      
    • Esempio di JSON con delimitatori di riga

      {"time":"2015-04-29T07:12:20.9100000Z","callingimsi":"466920403025604","callingnum1":"678948008","callingnum2":"567834760","switch1":"China","switch2":"Germany"}
      {"time":"2015-04-29T07:13:21.0220000Z","callingimsi":"466922202613463","callingnum1":"123436380","callingnum2":"789037573","switch1":"US","switch2":"UK"}
      {"time":"2015-04-29T07:13:21.4370000Z","callingimsi":"466923101048691","callingnum1":"678901578","callingnum2":"345626404","switch1":"Germany","switch2":"UK"}
      
    • Esempio di JSON concatenati

      {
          "time": "2015-04-29T07:12:20.9100000Z",
          "callingimsi": "466920403025604",
          "callingnum1": "678948008",
          "callingnum2": "567834760",
          "switch1": "China",
          "switch2": "Germany"
      }
      {
          "time": "2015-04-29T07:13:21.0220000Z",
          "callingimsi": "466922202613463",
          "callingnum1": "123436380",
          "callingnum2": "789037573",
          "switch1": "US",
          "switch2": "UK"
      }
      {
          "time": "2015-04-29T07:13:21.4370000Z",
          "callingimsi": "466923101048691",
          "callingnum1": "678901578",
          "callingnum2": "345626404",
          "switch1": "Germany",
          "switch2": "UK"
      }
      
  • Tipo II: arrayOfObjects

    Ogni file contiene una matrice di oggetti.

    [
        {
            "time": "2015-04-29T07:12:20.9100000Z",
            "callingimsi": "466920403025604",
            "callingnum1": "678948008",
            "callingnum2": "567834760",
            "switch1": "China",
            "switch2": "Germany"
        },
        {
            "time": "2015-04-29T07:13:21.0220000Z",
            "callingimsi": "466922202613463",
            "callingnum1": "123436380",
            "callingnum2": "789037573",
            "switch1": "US",
            "switch2": "UK"
        },
        {
            "time": "2015-04-29T07:13:21.4370000Z",
            "callingimsi": "466923101048691",
            "callingnum1": "678901578",
            "callingnum2": "345626404",
            "switch1": "Germany",
            "switch2": "UK"
        }
    ]
    

Esempio JsonFormat

Caso 1: Copia di dati dai file JSON

Vedere sotto due tipi di esempi di quando si copiano dati dai file JSON e i punti generici da notare:

Esempio 1: Estrarre i dati dall'oggetto e dalla matrice

In questo esempio si prevede che un oggetto JSON radice esegua il mapping a un singolo record in un risultato tabulare. Se si dispone di un file JSON con il contenuto seguente:

{
    "id": "ed0e4960-d9c5-11e6-85dc-d7996816aad3",
    "context": {
        "device": {
            "type": "PC"
        },
        "custom": {
            "dimensions": [
                {
                    "TargetResourceType": "Microsoft.Compute/virtualMachines"
                },
                {
                    "ResourceManagmentProcessRunId": "827f8aaa-ab72-437c-ba48-d8917a7336a3"
                },
                {
                    "OccurrenceTime": "1/13/2017 11:24:37 AM"
                }
            ]
        }
    }
}

e lo si vuole copiare in una tabella SQL di Azure nel formato seguente, estraendo i dati sia dagli oggetti che dalla matrice:

id deviceType targetResourceType resourceManagmentProcessRunId occurrenceTime
ed0e4960-d9c5-11e6-85dc-d7996816aad3 PC Microsoft.Compute/virtualMachines 827f8aaa-ab72-437c-ba48-d8917a7336a3 1/13/2017 11:24:37 AM

Il set di dati di input con il tipo JsonFormat è definito come segue (definizione parziale che include solo le parti pertinenti). Più in particolare:

  • La sezione structure definisce i nomi di colonna personalizzati e il tipo di dati corrispondente durante la conversione in dati tabulari. Questa sezione è facoltativa a meno che non sia necessario eseguire il mapping colonne. Vedere la sezione Definizione della struttura per i set di dati rettangolari per altri dettagli.
  • jsonPathDefinition specifica il percorso JSON per ogni colonna indicante da dove estrarre i dati. Per copiare i dati dalla matrice, è possibile usare array[x].property per estrarre il valore della proprietà specificata dall'oggetto xth oppure è possibile usare array[*].property per trovare il valore in qualsiasi oggetto contenente tale proprietà.
"properties": {
    "structure": [
        {
            "name": "id",
            "type": "String"
        },
        {
            "name": "deviceType",
            "type": "String"
        },
        {
            "name": "targetResourceType",
            "type": "String"
        },
        {
            "name": "resourceManagmentProcessRunId",
            "type": "String"
        },
        {
            "name": "occurrenceTime",
            "type": "DateTime"
        }
    ],
    "typeProperties": {
        "folderPath": "mycontainer/myfolder",
        "format": {
            "type": "JsonFormat",
            "filePattern": "setOfObjects",
            "jsonPathDefinition": {"id": "$.id", "deviceType": "$.context.device.type", "targetResourceType": "$.context.custom.dimensions[0].TargetResourceType", "resourceManagmentProcessRunId": "$.context.custom.dimensions[1].ResourceManagmentProcessRunId", "occurrenceTime": " $.context.custom.dimensions[2].OccurrenceTime"}      
        }
    }
}

Esempio 2: applicazione incrociata di più oggetti con lo stesso modello dalla matrice

In questo esempio si prevede di trasformare un oggetto JSON radice in più record in risultato tabulare. Se si dispone di un file JSON con il contenuto seguente:

{
    "ordernumber": "01",
    "orderdate": "20170122",
    "orderlines": [
        {
            "prod": "p1",
            "price": 23
        },
        {
            "prod": "p2",
            "price": 13
        },
        {
            "prod": "p3",
            "price": 231
        }
    ],
    "city": [ { "sanmateo": "No 1" } ]
}

e lo si vuole copiare in una tabella SQL di Azure nel formato seguente, rendendo flat i dati nella matrice e nel crossjoin con le informazioni radice comuni:

ordernumber orderdate order_pd order_price city
01 20170122 P1 23 [{"sanmateo":"No 1"}]
01 20170122 P2 13 [{"sanmateo":"No 1"}]
01 20170122 P3 231 [{"sanmateo":"No 1"}]

Il set di dati di input con il tipo JsonFormat è definito come segue (definizione parziale che include solo le parti pertinenti). Più in particolare:

  • La sezione structure definisce i nomi di colonna personalizzati e il tipo di dati corrispondente durante la conversione in dati tabulari. Questa sezione è facoltativa a meno che non sia necessario eseguire il mapping colonne. Vedere la sezione Definizione della struttura per i set di dati rettangolari per altri dettagli.
  • jsonNodeReference indica di seguire l'iterazione dei dati e di estrarli dagli oggetti con lo stesso modello sotto le righe ordine della matrice.
  • jsonPathDefinition specifica il percorso JSON per ogni colonna indicante da dove estrarre i dati. In questo esempio "ordernumber", "orderdate" e "city" sono sotto l'oggetto radice con il percorso JSON che inizia con "$.", mentre "order_pd" e "order_price" sono definiti con il percorso derivato dall'elemento matrice senza "$.".
"properties": {
    "structure": [
        {
            "name": "ordernumber",
            "type": "String"
        },
        {
            "name": "orderdate",
            "type": "String"
        },
        {
            "name": "order_pd",
            "type": "String"
        },
        {
            "name": "order_price",
            "type": "Int64"
        },
        {
            "name": "city",
            "type": "String"
        }
    ],
    "typeProperties": {
        "folderPath": "mycontainer/myfolder",
        "format": {
            "type": "JsonFormat",
            "filePattern": "setOfObjects",
            "jsonNodeReference": "$.orderlines",
            "jsonPathDefinition": {"ordernumber": "$.ordernumber", "orderdate": "$.orderdate", "order_pd": "prod", "order_price": "price", "city": " $.city"}         
        }
    }
}

Tenere presente quanto segue:

  • Se structure e jsonPathDefinition non sono definite nel set di dati della data factory, l'attività di copia rileva lo schema dal primo oggetto e rende flat l'intero oggetto.
  • Se l'input JSON presenta una matrice, per impostazione predefinita, l'attività di copia converte l'intero valore della matrice in una stringa. È possibile scegliere di estrarre i dati usando jsonNodeReference e/o jsonPathDefinition oppure di ignorarlo non specificandolo in jsonPathDefinition.
  • Se ci sono nomi duplicati allo stesso livello, l'attività di copia sceglie quello più recente.
  • I nomi delle proprietà distinguono tra maiuscole e minuscole. Due proprietà con lo stesso nome ma con una combinazione differente di maiuscole e minuscole vengono considerate come due proprietà diverse.

Caso 2: Scrittura dei dati nel file JSON

Se nel database SQL è presente la tabella seguente:

id order_date order_price order_by
1 20170119 2000 David
2 20170120 3500 Patrick
3 20170121 4000 Jason

e per ogni record di prevede di scrivere in un oggetto JSON nel formato seguente:

{
    "id": "1",
    "order": {
        "date": "20170119",
        "price": 2000,
        "customer": "David"
    }
}

Il set di dati di output con il tipo JsonFormat è definito come segue (definizione parziale che include solo le parti pertinenti). Più in particolare, la sezione structure definisce i nomi di proprietà personalizzati nel file di destinazione e verrà usato nestingSeparator (il valore predefinito è ".") per identificare il livello di annidamento dal nome. Questa sezione è facoltativa a meno che non si voglia modificare il nome della proprietà confrontandolo con il nome della colonna di origine o annidare alcune delle proprietà.

"properties": {
    "structure": [
        {
            "name": "id",
            "type": "String"
        },
        {
            "name": "order.date",
            "type": "String"
        },
        {
            "name": "order.price",
            "type": "Int64"
        },
        {
            "name": "order.customer",
            "type": "String"
        }
    ],
    "typeProperties": {
        "folderPath": "mycontainer/myfolder",
        "format": {
            "type": "JsonFormat"
        }
    }
}

Specifica di AvroFormat

Per analizzare i file Avro o scrivere i dati in formato Avro, impostare la proprietà format type su AvroFormat. Non è necessario specificare le proprietà nella sezione Format all'interno della sezione typeProperties. Esempio:

"format":
{
    "type": "AvroFormat",
}

Per usare il formato Avro in una tabella Hive, fare riferimento all' esercitazione su Apache Hive.

Tenere presente quanto segue:

Impostazione di OrcFormat

Per analizzare i file ORC o scrivere i dati in formato ORC, impostare la proprietà format type su OrcFormat. Non è necessario specificare le proprietà nella sezione Format all'interno della sezione typeProperties. Esempio:

"format":
{
    "type": "OrcFormat"
}
Importante

Se non si esegue una copia identica dei file ORC tra l'archivio dati locale e quello nel cloud, nel computer gateway è necessario installare JRE 8 (Java Runtime Environment). Per un gateway a 64 bit è necessario JRE a 64 bit, mentre per un gateway a 32 bit è necessario JRE a 32 bit. Entrambe le versioni sono disponibili qui. Scegliere la versione appropriata.

Tenere presente quanto segue:

  • Tipi di dati complessi non sono supportati (STRUCT, MAP, LIST, UNION)
  • Il file ORC dispone di tre opzioni relative alla compressione: NONE, ZLIB, SNAPPY. Data Factory supporta la lettura dei dati dal file ORC in uno di questi formati compressi. Per leggere i dati, Data Factoy usa la compressione codec dei metadati. Tuttavia, durante la scrittura in un file ORC, Data Factory sceglie ZLIB che è il valore predefinito per ORC. Al momento non esiste alcuna opzione per ignorare tale comportamento.

Specificare ParquetFormat

Per analizzare i file Parquet o scrivere i dati in formato Parquet, impostare la proprietà format type su ParquetFormat. Non è necessario specificare le proprietà nella sezione Format all'interno della sezione typeProperties. Esempio:

"format":
{
    "type": "ParquetFormat"
}
Importante

Se non si esegue una copia identica dei file Parquet tra l'archivio dati locale e quello nel cloud, nel computer gateway è necessario installare JRE 8 (Java Runtime Environment). Per un gateway a 64 bit è necessario JRE a 64 bit, mentre per un gateway a 32 bit è necessario JRE a 32 bit. Entrambe le versioni sono disponibili qui. Scegliere la versione appropriata.

Tenere presente quanto segue:

  • Tipi di dati complessi non sono supportati (MAP, LIST)
  • Un file Parquet ha le seguenti opzioni relative alla compressione: NONE, SNAPPY, GZIP e LZO. Data Factory supporta la lettura dei dati dal file ORC in uno di questi formati compressi. Per la lettura dei dati usa il codec di compressione nei metadati. Tuttavia, durante la scrittura in un file Parquet, Data Factory sceglie SNAPPY, cioè il valore predefinito per il formato Parquet. Al momento non esiste alcuna opzione per ignorare tale comportamento.

Dove viene eseguita l'operazione di copia?

Per altre informazioni, vedere la sezione Spostamento dei dati disponibile a livello globale . In breve, quando è coinvolto un archivio dati locale, l'operazione di copia viene eseguita dal Gateway di gestione dati nell'ambiente locale. Quando lo spostamento dei dati avviene tra due archivi cloud, l'operazione di copia viene eseguita nell'area più vicina alla località del sink nella stessa area geografica.

Attività di HDInsight - Domande frequenti

Quali aree sono supportate da HDInsight?

Vedere la sezione sulla disponibilità a livello geografico nell'articolo in Dettagli dei prezzi di HDInsight.

Quale area geografica viene usata per un cluster HDInsight su richiesta?

Il cluster HDInsight su richiesta viene creato nella stessa area geografica in cui è presente l'archivio specificato per l'utilizzo con il cluster.

In che modo è possibile associare account di archiviazione aggiuntivi al cluster HDInsight?

Se si usa un cluster HDInsight personalizzato (BYOC - Bring Your Own Cluster), vedere gli argomenti seguenti:

Se si usa un cluster su richiesta creato dal servizio Data Factory, specificare altri account di archiviazione per il servizio collegato HDInsight, in modo che il servizio Data Factory li possa registrare automaticamente. Nella definizione JSON per il servizio collegato su richiesta, usare la proprietà additionalLinkedServiceNames per specificare account di archiviazione alternativi, come illustrato nel frammento di codice JSON seguente:

{
    "name": "MyHDInsightOnDemandLinkedService",
    "properties":
    {
        "type": "HDInsightOnDemandLinkedService",
        "typeProperties": {
            "version": "3.5",
            "clusterSize": 1,
            "timeToLive": "00:05:00",
            "osType": "Linux",
            "linkedServiceName": "LinkedService-SampleData",
            "additionalLinkedServiceNames": [ "otherLinkedServiceName1", "otherLinkedServiceName2" ]
        }
    }
}

Nell'esempio precedente otherLinkedServiceName1 e otherLinkedServiceName2 rappresentano servizi collegati le cui definizioni includono credenziali necessarie al cluster HDInsight per l'accesso ad account di archiviazione alternativi.

Sezioni - Domande frequenti

Perché le sezioni di input non sono in stato Pronto?

Un errore frequente è la mancata impostazione della proprietà external su true nel set di dati di input quando i dati di input sono esterni alla data factory, ovvero non prodotti dalla data factory.

Nell'esempio seguente è necessario soltanto impostare external su true in dataset1.

DataFactory1 Pipeline 1: dataset1 -> activity1 -> dataset2 -> activity2 -> dataset3 Pipeline 2: dataset3-> activity3 -> dataset4

Se si dispone di un'altra data factory con una pipeline che accetta dataset4 (prodotto dalla pipeline 2 nella data factory 1), contrassegnare dataset4 come set di dati esterno perché tale set di dati è prodotto da una data factory differente (DataFactory1, non DataFactory2).

DataFactory2
Pipeline 1: dataset4->activity4->dataset5

Se la proprietà esterna è impostata correttamente, verificare che i dati di input siano presenti nel percorso specificato nella definizione del set di dati di input.

In che modo è possibile eseguire una sezione in un momento diverso dalla mezzanotte quando tale sezione viene prodotta ogni giorno?

Usare la proprietà offset per specificare l'ora di produzione della sezione. Per altre informazioni su questa proprietà, vedere Disponibilità dei set di dati . Di seguito è riportato un rapido esempio:

"availability":
{
    "frequency": "Day",
    "interval": 1,
    "offset": "06:00:00"
}

Le sezioni giornaliere iniziano alle 6.00 anziché a mezzanotte, ovvero l'impostazione predefinita.

Come si riesegue una sezione?

È possibile rieseguire una sezione in uno dei modi seguenti:

  • Usare l'app di monitoraggio e gestione per eseguire di nuovo una finestra attività o una sezione. Per istruzioni, vedere la sezione Rieseguire finestre attività selezionate .
  • Fare clic su Esegui sulla barra dei comandi nel pannelloSEZIONE DATI per la sezione nel portale di Azure.
  • Eseguire il cmdlet Set-AzureRmDataFactorySliceStatus con lo stato impostato su Waiting per la sezione.

    Set-AzureRmDataFactorySliceStatus -Status Waiting -ResourceGroupName $ResourceGroup -DataFactoryName $df -TableName $table -StartDateTime "02/26/2015 19:00:00" -EndDateTime "02/26/2015 20:00:00"
    

    Per informazioni dettagliate sul cmdlet, vedere Set-AzureRmDataFactorySliceStatus.

Quanto tempo è stato necessario per elaborare una sezione?

Per conoscere la durata dell'elaborazione di una sezione di dati, usare Activity Window Explorer nell'app di monitoraggio e gestione. Per informazioni dettagliate, vedere la sezione Activity Window Explorer (Esplora finestre attività).

È possibile anche eseguire le operazioni seguenti nel portale di Azure:

  1. Fare clic sul riquadroSet di dati nel pannello DATA FACTORY per l'istanza di Data factory.
  2. Fare clic sul set di dati specifico nel pannello Set di dati .
  3. Selezionare la sezione a cui si è interessati dall'elenco Sezioni recenti nel pannello TABELLA.
  4. Fare clic sull'esecuzione di attività nell'elenco Esecuzioni attività nel pannello SEZIONE DATI.
  5. Fare clic sul riquadro Proprietà nel pannello DETTAGLI ESECUZIONE ATTIVA.
  6. Nel campo DURATA dovrebbe essere visualizzato un valore, ovvero il tempo impiegato per elaborare la sezione.

In che modo è possibile interrompere una sezione in esecuzione?

Se è necessario interrompere l'esecuzione della pipeline, è possibile usare il cmdlet Suspend-AzureRmDataFactoryPipeline . La sospensione della pipeline attualmente non interrompe le esecuzioni di sezioni in corso. Al termine delle esecuzioni in corso non verranno eseguite altre sezioni.

L'unica soluzione per interrompere immediatamente tutte le esecuzioni consiste nell'eliminare la pipeline e crearla di nuovo. Se si sceglie di eliminare la pipeline, NON sarà necessario eliminare le tabelle e i servizi collegati usati da essa.