Formatos de arquivo e codecs de compactação compatíveis no Azure Data Factory e no Synapse Analytics (herdado)
APLICA-SE A: Azure Data Factory Azure Synapse Analytics
Dica
Experimente o Data Factory no Microsoft Fabric, uma solução de análise tudo-em-um para empresas. O Microsoft Fabric abrange desde movimentação de dados até ciência de dados, análise em tempo real, business intelligence e relatórios. Saiba como iniciar uma avaliação gratuita!
Este artigo aplica-se aos seguintes conectores: Amazon S3, Blob do Azure, Azure Data Lake Storage Gen1, Azure Data Lake Storage Gen2, Arquivos do Azure, Sistema de Arquivos, FTP, Google Cloud Storage, HDFS, HTTP e SFTP.
Importante
O serviço introduziu um novo modelo de conjunto de dados baseado em formato, veja o artigo do formato correspondente com detalhes:
- Formato Avro
- Formato binário
- Formato de texto delimitado
- Formato JSON
- Formato ORC
- Formato Parquet
As configurações REST mencionados neste artigo ainda têm compatibilidade com versões anteriores no estado em que se encontram. A sugestão é que você use o novo modelo no futuro.
Formato de texto (herdado)
Observação
Conheça o artigo novo modelo do artigo Formato de texto delimitado. As configurações a seguir no conjunto de dados de armazenamento de dados ainda têm compatibilidade com versões anteriores no estado em que se encontram. A sugestão é que você use o novo modelo no futuro.
Se você quiser ler um arquivo de texto ou gravar em um arquivo de texto, defina a propriedade type
na seção format
do conjunto de dados para TextFormat. Você também pode especificar as seguintes propriedades opcionais na seção format
. Veja a seção Exemplo de TextFormat sobre a configuração.
Propriedade | Descrição | Valores permitidos | Obrigatório |
---|---|---|---|
columnDelimiter | O caractere usado para separar as colunas em um arquivo. Você pode considerar o uso de um caractere não imprimível raro que não exista em seus dados. Por exemplo, especifique "\u0001", que representa o SOH (início do título). | É permitido somente um caractere. O valor padrão é vírgula (‘,’) . Para usar um caractere Unicode, consulte Caracteres Unicode para obter o código correspondente. |
Não |
rowDelimiter | o caractere usado para separar linhas em um arquivo. | É permitido somente um caractere. O valor padrão é um dos seguintes valores na leitura: ["\r\n", "\r" e "\n"] e "\r\n" na gravação. | Não |
escapeChar | o caractere especial usado para escapar um delimitador de coluna no conteúdo do arquivo de entrada. Não é possível especificar escapeChar e quoteChar para uma tabela. |
É permitido somente um caractere. Sem valor padrão. Por exemplo, se você tiver a vírgula (,) como o delimitador de coluna, mas quiser ter o caractere de vírgula no texto (exemplo: "Hello, world"), você poderá definir '$' como o caractere de escape e usar a cadeia de caracteres "Hello$, world" na fonte. |
Não |
quoteChar | o caractere usado para colocar um valor de cadeia de caracteres entre aspas. Os delimitadores de coluna e linha que ficam dentro dos caracteres de aspas seriam tratados como parte do valor da cadeia de caracteres. Essa propriedade se aplica aos conjuntos de dados de entrada e de saída. Não é possível especificar escapeChar e quoteChar para uma tabela. |
É permitido somente um caractere. Sem valor padrão. Por exemplo, se tiver a vírgula (,) como o delimitador de coluna, mas quiser ter o caractere de vírgula no texto (exemplo: <Hello, world>), você poderá definir " (aspas duplas) como o caractere de citação e usar a cadeia de caracteres "Hello, world" na origem. |
Não |
nullValue | um ou mais caracteres usados para representar um valor nulo. | Um ou mais caracteres. Os valores padrão são "\N" e "NULL" na leitura e "\N" na gravação. | Não |
encodingName | especifica o nome de codificação. | Um nomes de codificação válido. Consulte Propriedade Encoding.EncodingName. Por exemplo: windows-1250 ou shift_jis. O valor padrão é UTF-8. | Não |
firstRowAsHeader | Especifica se a primeira linha será considerada como cabeçalho. Para um conjunto de dados de entrada, o serviço lê a primeira linha como cabeçalho. Para um conjunto de dados de saída, o serviço lê a primeira linha como cabeçalho. Veja Cenários para usar o firstRowAsHeader e o skipLineCount para cenários de exemplo. |
True False (padrão) |
Não |
skipLineCount | Indica o número de linhas não vazias a serem ignoradas ao ler dados de arquivos de entrada. Se skipLineCount e firstRowAsHeader forem especificados, primeiro as linhas serão ignoradas e, em seguida, as informações de cabeçalho serão lidas no arquivo de entrada. Veja Cenários para usar o firstRowAsHeader e o skipLineCount para cenários de exemplo. |
Integer | Não |
treatEmptyAsNull | especifica se é necessário tratar uma cadeia de caracteres nula ou vazia como um valor nulo ao ler dados de um arquivo de entrada. | True (padrão) Falso |
Não |
Exemplo de TextFormat
Na definição de JSON a seguir para um conjunto de dados, algumas das propriedades opcionais são especificadas.
"typeProperties":
{
"folderPath": "mycontainer/myfolder",
"fileName": "myblobname",
"format":
{
"type": "TextFormat",
"columnDelimiter": ",",
"rowDelimiter": ";",
"quoteChar": "\"",
"NullValue": "NaN",
"firstRowAsHeader": true,
"skipLineCount": 0,
"treatEmptyAsNull": true
}
},
Para usar um escapeChar
em vez de quoteChar
, substitua a linha com quoteChar
por este escapeChar:
"escapeChar": "$",
Cenários de uso de firstRowAsHeader e skipLineCount
- Você está copiando de uma fonte que não é de arquivo para um arquivo de texto e deseja adicionar uma linha de cabeçalho que contém os metadados de esquema (por exemplo: esquema SQL). Especifique
firstRowAsHeader
como true no conjunto de dados de saída para esse cenário. - Você está copiando de um arquivo de texto contendo uma linha de cabeçalho para um coletor que não é em arquivo e gostaria de remover essa linha. Especifique
firstRowAsHeader
como true no conjunto de dados de entrada. - Você está copiando de um arquivo de texto e deseja ignorar algumas linhas no início que não são informações de dados nem de cabeçalho. Especifique
skipLineCount
para indicar o número de linhas a serem ignoradas. Se o restante do arquivo contiver uma linha de cabeçalho, você também poderá especificarfirstRowAsHeader
. SeskipLineCount
efirstRowAsHeader
forem especificados, as linhas serão ignoradas pela primeira vez e, em seguida, as informações de cabeçalho serão lidas do arquivo de entrada
Formato JSON (herdado)
Observação
Conheça o novo modelo do artigo Formato JSON. As configurações a seguir no conjunto de dados de armazenamento de dados ainda têm compatibilidade com versões anteriores no estado em que se encontram. A sugestão é que você use o novo modelo no futuro.
Para importar/exportar um arquivo JSON no estado em que se encontra de/para o Azure Cosmos DB, consulte a seção Importar/exportar documentos JSON do artigo Move data to/from Azure Cosmos DB (Mover dados de/para o Azure Cosmos DB).
Se você quiser analisar os arquivos de JSON ou gravar os dados no formato JSON, defina a propriedade type
na seção format
como JsonFormat. Você também pode especificar as seguintes propriedades opcionais na seção format
. Veja a seção Exemplo de JsonFormat sobre como configurar.
Propriedade | Descrição | Obrigatório |
---|---|---|
filePattern | Indique o padrão de dados armazenados em cada arquivo JSON. Os valores permitidos são: setOfObjects e arrayOfObjects. O valor padrão é setOfObjects. Veja a seção Padrões de arquivo JSON para obter detalhes sobre esses padrões. | Não |
jsonNodeReference | Se você quiser fazer uma iteração e extrair dados de objetos dentro de um campo de matriz com o mesmo padrão, especifique o caminho JSON da matriz. Esta propriedade só terá suporte na cópia de dados de arquivos JSON. | Não |
jsonPathDefinition | Especifique a expressão de caminho JSON para cada mapeamento de coluna com um nome de coluna personalizado (iniciar com letra minúscula). Esta propriedade só terá suporte na cópia de dados de arquivos JSON, e você pode extrair dados de objeto ou de matriz. Para os campos sob o objeto root, comece com root $; para os campos dentro da matriz escolhidos pela propriedade jsonNodeReference , comece do elemento de matriz. Veja a seção Exemplo de JsonFormat sobre como configurar. |
Não |
encodingName | especifica o nome de codificação. Para obter a lista de nomes de codificação válidos, consulte: Propriedade Encoding.EncodingName . Por exemplo: windows-1250 ou shift_jis. O valor padrão é UTF-8. | Não |
nestingSeparator | Caractere que é usado para separar os níveis de aninhamento. O valor padrão é '.' (ponto). | Não |
Observação
Para o caso de aplicação cruzada de dados na matriz em várias linhas (caso 1 –> amostra 2 em exemplos de JsonFormat), você pode optar apenas por expandir uma matriz usando a propriedade jsonNodeReference
.
Padrões de arquivo JSON
A atividade de cópia pode analisar os padrões de arquivos JSON a seguir:
Tipo I: setOfObjects
Cada arquivo contém um único objeto ou vários objetos concatenados/delimitados por linhas. Quando essa opção é escolhida em um conjunto de dados de saída, a atividade de cópia produz um único arquivo JSON com cada objeto por linha (delimitados por linha).
Exemplo de JSON de objeto único
{ "time": "2015-04-29T07:12:20.9100000Z", "callingimsi": "466920403025604", "callingnum1": "678948008", "callingnum2": "567834760", "switch1": "China", "switch2": "Germany" }
Exemplo de JSON delimitado por linha
{"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"}
Exemplo de JSON concatenado
{ "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
Cada arquivo contém uma matriz de objetos.
[ { "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" } ]
Exemplo de JsonFormat
Caso 1: copiar dados de arquivos JSON
Exemplo 1: extrair dados de objeto e de matriz
Neste exemplo, você espera que um objeto JSON de raiz seja mapeado para um único registro no resultado tabular. Se você tiver um arquivo JSON com o seguinte conteúdo:
{
"id": "ed0e4960-d9c5-11e6-85dc-d7996816aad3",
"context": {
"device": {
"type": "PC"
},
"custom": {
"dimensions": [
{
"TargetResourceType": "Microsoft.Compute/virtualMachines"
},
{
"ResourceManagementProcessRunId": "827f8aaa-ab72-437c-ba48-d8917a7336a3"
},
{
"OccurrenceTime": "1/13/2017 11:24:37 AM"
}
]
}
}
}
e quiser copiá-lo para uma tabela SQL do Azure no formato a seguir, ao extrair dados dos objetos e da matriz:
ID | deviceType | targetResourceType | resourceManagementProcessRunId | occurrenceTime |
---|---|---|---|---|
ed0e4960-d9c5-11e6-85dc-d7996816aad3 | Computador | Microsoft.Compute/virtualMachines | 827f8aaa-ab72-437c-ba48-d8917a7336a3 | 13/01/2017 11:24:37 |
O conjunto de dados de entrada com o tipo JsonFormat é definido da seguinte maneira: (definição parcial com apenas as partes relevantes). Mais especificamente:
- A seção
structure
define os nomes de coluna personalizada e o tipo de dados correspondente ao converter em dados tabulares. Esta seção é opcional, a menos que você tenha de fazer o mapeamento de colunas. Para obter mais informações, consulte Mapear colunas de conjunto de dados de origem para colunas de conjunto de dados de destino. jsonPathDefinition
especifica o caminho JSON para cada coluna que indica de onde extrair os dados. Para copiar dados de matriz, você pode usararray[x].property
para extrair o valor da determinada propriedade do objetoxth
ou usararray[*].property
para localizar o valor de qualquer objeto que contenha essa propriedade.
"properties": {
"structure": [
{
"name": "id",
"type": "String"
},
{
"name": "deviceType",
"type": "String"
},
{
"name": "targetResourceType",
"type": "String"
},
{
"name": "resourceManagementProcessRunId",
"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", "resourceManagementProcessRunId": "$.context.custom.dimensions[1].ResourceManagementProcessRunId", "occurrenceTime": " $.context.custom.dimensions[2].OccurrenceTime"}
}
}
}
Exemplo 2: cruzar aplicar vários objetos com o mesmo padrão da matriz
Neste exemplo, você espera transformar um objeto JSON de raiz em vários registros no resultado tabular. Se você tiver um arquivo JSON com o seguinte conteúdo:
{
"ordernumber": "01",
"orderdate": "20170122",
"orderlines": [
{
"prod": "p1",
"price": 23
},
{
"prod": "p2",
"price": 13
},
{
"prod": "p3",
"price": 231
}
],
"city": [ { "sanmateo": "No 1" } ]
}
e você deseja copiá-lo para uma tabela do Azure SQL no formato a seguir, ao nivelar os dados de dentro da matriz e fazer uma união cruzada com as informações comuns de root:
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"}] |
O conjunto de dados de entrada com o tipo JsonFormat é definido da seguinte maneira: (definição parcial com apenas as partes relevantes). Mais especificamente:
- A seção
structure
define os nomes de coluna personalizada e o tipo de dados correspondente ao converter em dados tabulares. Esta seção é opcional, a menos que você tenha de fazer o mapeamento de colunas. Para obter mais informações, consulte Mapear colunas de conjunto de dados de origem para colunas de conjunto de dados de destino. jsonNodeReference
indica iterar e extrair dados dos objetos com o mesmo padrão da matrizorderlines
.jsonPathDefinition
especifica o caminho JSON para cada coluna que indica de onde extrair os dados. Neste exemplo,ordernumber
,orderdate
ecity
estão sob o objeto raiz com o caminho do JSON começando com$.
, enquantoorder_pd
eorder_price
estão definidos com um caminho derivado do elemento da matriz sem$.
.
"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"}
}
}
}
Observe os seguintes pontos:
- Se
structure
ejsonPathDefinition
não forem definidos no conjunto de dados, a atividade de cópia detectará o esquema do primeiro objeto e mesclará todo o objeto. - Se a entrada JSON tiver uma matriz por padrão, a atividade de cópia converterá o valor da matriz inteira em uma cadeia de caracteres. Você pode optar por extrair dados dele usando o
jsonNodeReference
e/ou ojsonPathDefinition
ou ignorá-lo ao não especificá-lo nojsonPathDefinition
. - Se houver nomes duplicados no mesmo nível, a atividade de cópia selecionará o último entre eles.
- Os nomes de propriedade diferenciam maiúsculas de minúsculas. Duas propriedades com o mesmo nome, mas com maiúsculas e minúsculas diferentes são tratadas como duas propriedades separadas.
Caso 2: gravação de dados no arquivo JSON
Se você tiver a tabela a seguir no Banco de Dados SQL:
ID | order_date | order_price | order_by |
---|---|---|---|
1 | 20170119 | 2000 | Davi |
2 | 20170120 | 3500 | Pedro |
3 | 20170121 | 4000 | Jason |
e, para cada registro, você espera gravar em um objeto JSON neste formato:
{
"id": "1",
"order": {
"date": "20170119",
"price": 2000,
"customer": "David"
}
}
O conjunto de dados de saída com o tipo JsonFormat é definido da seguinte maneira: (definição parcial com apenas as partes relevantes). Mais especificamente, a seção structure
define os nomes de propriedade personalizada no arquivo de destino, nestingSeparator
(o padrão é ".") que são usados para identificar a camada de aninhamento do nome. Esta seção é opcional, a menos que você queira alterar o nome da propriedade em comparação ao nome da coluna de origem ou aninhar algumas das propriedades.
"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"
}
}
}
Formato Parquet (herdado)
Observação
Conheça o novo modelo do artigo Formato Parquet. As configurações a seguir no conjunto de dados de armazenamento de dados ainda têm compatibilidade com versões anteriores no estado em que se encontram. A sugestão é que você use o novo modelo no futuro.
Se você quiser analisar os arquivos Parquet ou gravar os dados no formato Parquet, defina a propriedade format
type
como ParquetFormat. Não será necessário especificar nenhuma propriedade na seção Formato dentro da seção typeProperties. Exemplo:
"format":
{
"type": "ParquetFormat"
}
Observe os seguintes pontos:
- Não há suporte para tipos de dados complexos (MAP, LIST).
- Não há suporte para o espaço em branco no nome da coluna.
- O arquivo Parquet tem as seguintes opções relacionadas à compactação: NONE, SNAPPY, GZIP e LZO. O serviço dá suporte à leitura de dados do arquivo Parquet em qualquer um desses formatos compactados, exceto LZO: ele usa o codec de compactação nos metadados para ler os dados. No entanto, ao gravar um arquivo Parquet, o serviço escolhe SNAPPY, que é o padrão para o formato Parquet. Não há nenhuma opção para substituir esse comportamento neste momento.
Importante
Para cópias autorizadas pelo Integration Runtime (auto-hospedado), por exemplo, entre repositórios de dados locais e na nuvem, se você não estiver copiando arquivos Parquet como são, precisará instalar o JRE (Java Runtime Environment) 8 de 64 bits ou o OpenJDK no IR de seu computador. Confira o próximo parágrafo para obter mais detalhes.
Para cópia em execução no IR auto-hospedado com serialização/desserialização de arquivo Parquet, o serviço encontra o runtime do Java verificando o registro (SOFTWARE\JavaSoft\Java Runtime Environment\{Current Version}\JavaHome)
para JRE, em primeiro lugar e, se não encontrado, realiza, em segundo lugar, a verificação na variável do sistema JAVA_HOME
para o OpenJDK.
- Para usar JRE: o IR de 64 bits requer JRE de 64 bits. É possível encontrá-lo aqui.
- Para usar o OpenJDK: ele tem suporte desde a versão do IR 3.13. Empacote o jvm.dll com todos os outros assemblies necessários do OpenJDK no IR auto-hospedado do computador e defina a variável de ambiente JAVA_HOME adequadamente.
Dica
Se você copiar os dados para/do formato Parquet usando o IR auto-hospedado e ocorrências de erro informando que "Ocorreu um erro ao chamar o java, mensagem: espaço de heap java.lang.OutOfMemoryError:Java", poderá adicionar uma variável de ambiente _JAVA_OPTIONS
na máquina que hospeda o IR auto-hospedado para ajustar o tamanho mín/máx do heap para JVM para capacitar a cópia e executar novamente o pipeline.
Exemplo: defina a variável _JAVA_OPTIONS
com o valor -Xms256m -Xmx16g
. O sinalizador Xms
especifica o pool de alocação de memória inicial para uma JVM (Máquina Virtual Java), enquanto Xmx
especifica o pool de alocação de memória máxima. Isso significa que a JVM será iniciada com Xms
quantidade de memória e será capaz de usar um máximo de Xmx
quantidade de memória. Por padrão, o serviço usa no mínimo 64 MB e no máximo 1 G.
Mapeamento de tipo de dados para arquivos Parquet
Tipo de dados provisório do serviço | Tipo Primitivo Parquet | Tipo Original Parquet (Desserializar) | Tipo Original Parquet (Serializar) |
---|---|---|---|
Booliano | Booliano | N/D | N/D |
SByte | Int32 | Int8 | Int8 |
Byte | Int32 | UInt8 | Int16 |
Int16 | Int32 | Int16 | Int16 |
UInt16 | Int32 | UInt16 | Int32 |
Int32 | Int32 | Int32 | Int32 |
UInt32 | Int64 | UInt32 | Int64 |
Int64 | Int64 | Int64 | Int64 |
UInt64 | Int64/Binário | UInt64 | Decimal |
Single | Float | N/D | N/D |
Double | Double | N/D | N/D |
Decimal | Binário | Decimal | Decimal |
String | Binário | Utf8 | Utf8 |
DateTime | Int96 | N/D | N/D |
TimeSpan | Int96 | N/D | N/D |
DateTimeOffset | Int96 | N/D | N/D |
ByteArray | Binário | N/D | N/D |
Guid | Binário | Utf8 | Utf8 |
Char | Binário | Utf8 | Utf8 |
CharArray | Sem suporte | N/D | N/D |
Formato ORC (herdado)
Observação
Conheça o novo modelo do artigo Formato ORC. As configurações a seguir no conjunto de dados de armazenamento de dados ainda têm compatibilidade com versões anteriores no estado em que se encontram. A sugestão é que você use o novo modelo no futuro.
Se você quiser analisar os arquivos ORC ou gravar os dados no formato ORC, defina a propriedade format
type
como OrcFormat. Não será necessário especificar nenhuma propriedade na seção Formato dentro da seção typeProperties. Exemplo:
"format":
{
"type": "OrcFormat"
}
Observe os seguintes pontos:
- Não há suporte para tipos de dados complexos (STRUCT, MAP, LIST e UNION).
- Não há suporte para o espaço em branco no nome da coluna.
- O arquivo ORC tem três opções de compactação: NONE, ZLIB e SNAPPY. O serviço dá suporte à leitura de dados de arquivo ORC em qualquer um dos formatos compactados acima. Ele usa o codec de compactação nos metadados para ler os dados. No entanto, ao gravar um arquivo ORC, o serviço escolhe ZLIB, que é o padrão para ORC. Não há nenhuma opção para substituir esse comportamento neste momento.
Importante
Para cópias autorizadas pelo Integration Runtime (auto-hospedado), por exemplo, entre repositórios de dados locais e na nuvem, se você não estiver copiando arquivos ORC como são, precisará instalar o JRE (Java Runtime Environment) 8 de 64 bits ou o OpenJDK no IR de seu computador. Confira o próximo parágrafo para obter mais detalhes.
Para cópia em execução no IR auto-hospedado com serialização/desserialização de arquivo ORC, o serviço encontra o runtime do Java verificando o registro (SOFTWARE\JavaSoft\Java Runtime Environment\{Current Version}\JavaHome)
para JRE, em primeiro lugar e, se não encontrado, realiza, em segundo lugar, a verificação na variável do sistema JAVA_HOME
para o OpenJDK.
- Para usar JRE: o IR de 64 bits requer JRE de 64 bits. É possível encontrá-lo aqui.
- Para usar o OpenJDK: ele tem suporte desde a versão do IR 3.13. Empacote o jvm.dll com todos os outros assemblies necessários do OpenJDK no IR auto-hospedado do computador e defina a variável de ambiente JAVA_HOME adequadamente.
Mapeamento de tipo de dados para arquivos ORC
Tipo de dados provisório do serviço | Tipos ORC |
---|---|
Booliano | Booliano |
SByte | Byte |
Byte | Short |
Int16 | Short |
UInt16 | int |
Int32 | int |
UInt32 | long |
Int64 | long |
UInt64 | Cadeia de caracteres |
Single | Float |
Double | Double |
Decimal | Decimal |
String | String |
Datetime | Timestamp |
DateTimeOffset | Timestamp |
TimeSpan | Timestamp |
ByteArray | Binário |
Guid | Cadeia de caracteres |
Char | Char(1) |
Formato AVRO (herdado)
Observação
Conheça o novo modelo do artigo Formato Avro. As configurações a seguir no conjunto de dados de armazenamento de dados ainda têm compatibilidade com versões anteriores no estado em que se encontram. A sugestão é que você use o novo modelo no futuro.
Se você quiser analisar os arquivos Avro ou gravar os dados no formato Avro, defina a propriedade format
type
como AvroFormat. Não será necessário especificar nenhuma propriedade na seção Formato dentro da seção typeProperties. Exemplo:
"format":
{
"type": "AvroFormat",
}
Para usar o formato Avro em uma tabela do Hive, confira Tutorial do Apache Hive.
Observe os seguintes pontos:
- Não há suporte para tipos de dados complexos (registros, enumerações, matrizes, mapas, uniões e fixo).
Suporte à compactação (herdado)
O serviço dá suporte para compactar/descompactar dados durante a cópia. Quando você especifica a propriedade compression
em um conjunto de dados de entrada, a atividade de cópia lê os dados compactados da origem e descompacta-os e, quando você especifica a propriedade em um conjunto de dados de saída, a atividade de cópia compacta e grava os dados no coletor. Aqui estão alguns exemplos de cenários:
- Ler dados compactados em GZIP de um blob do Azure, descompactá-los e gravar os dados resultantes em um Banco de Dados SQL do Azure. Você define o conjunto de dados de Blob do Azure de entrada com a propriedade
compression
type
como GZIP. - Ler dados de um arquivo de texto sem formatação do Sistema de arquivos local, compactá-los usando o formato GZip e gravar os dados compactados em um blob do Azure. Você define um conjunto de dados de Blob do Azure de saída com a propriedade
compression
type
como GZip. - Leia o arquivo .zip do servidor FTP, descompacte-o para obter os arquivos e inclua-os no Azure Data Lake Store. Você define um conjunto de dados FTP de entrada com a propriedade
compression
type
como ZipDeflate. - Ler dados compactados em GZIP de um blob do Azure, descompactá-los, compactá-los usando BZIP2 e gravar os dados de resultado em um blob do Azure. Você define o conjunto de dados de Blob do Azure de entrada com
compression
type
definido como GZIP e o conjunto de dados de saída comcompression
type
definido como BZIP2.
Para especificar a compactação de um conjunto de dados, use a propriedade compactação no conjunto de dados JSON, como no exemplo a seguir:
{
"name": "AzureBlobDataSet",
"properties": {
"type": "AzureBlob",
"linkedServiceName": {
"referenceName": "StorageLinkedService",
"type": "LinkedServiceReference"
},
"typeProperties": {
"fileName": "pagecounts.csv.gz",
"folderPath": "compression/file/",
"format": {
"type": "TextFormat"
},
"compression": {
"type": "GZip",
"level": "Optimal"
}
}
}
}
A seção compactação tem duas propriedades:
Tipo: o codec de compactação, que pode ser GZIP, Deflate, BZIP2 ou ZipDeflate. Observação ao usar a atividade de cópia para descompactar arquivo(s) ZipDeflate e gravar no armazenamento de dados de coletor baseado em arquivo, os arquivos serão extraídos para a pasta:
<path specified in dataset>/<folder named as source zip file>/
.Nível: a taxa de compactação, que pode ser Ideal ou Mais rápida.
Mais rápida: a operação de compactação deve ser concluída o mais rápido possível, mesmo se o arquivo resultante não for compactado da maneira ideal.
Ideal: a operação de compactação deve ser concluída da maneira ideal, mesmo se a operação demorar mais tempo para ser concluída.
Para saber mais, veja o tópico Nível de compactação .
Observação
Não há suporte para configurações de compactação de dados no AvroFormat, OrcFormat ou ParquetFormat. Ao ler arquivos nesses formatos, o serviço detecta e usa o codec de compactação nos metadados. Ao gravar em arquivos em um desses formatos, o serviço escolhe o codec de compactação padrão para esse formato. Por exemplo, ZLIB para OrcFormat e SNAPPY para ParquetFormat.
Formatos de compactação e tipos de arquivo não compatíveis
Você pode usar os recursos de extensibilidade para transformar arquivos que não são compatíveis. Duas opções incluem o Azure Functions e tarefas personalizadas com o uso do Lote do Azure.
Você pode ver uma amostra que usa uma função do Azure para extrair o conteúdo de um arquivo tar. Para obter mais informações, veja Atividade do Azure Functions.
Você também pode criar essa funcionalidade usando uma atividade dotnet personalizada. Informações adicionais estão disponíveis aqui
Conteúdo relacionado
Conheça as compactações e os formatos de arquivo compatíveis mais recentes em Compactações e formatos de arquivo compatíveis.