Todos os produtos
Search
Central de documentação

DataWorks:OSS

Última atualização: Jun 27, 2026

A fonte de dados OSS fornece acesso de leitura e gravação ao OSS. Este tópico descreve como o DataWorks oferece suporte à sincronização de dados do OSS.

Tipos de campo suportados e limitações

Leitura de dados em lote

O OSS Reader lê dados do OSS e os converte em um formato processável pelo Data Integration. Como o OSS é um serviço de armazenamento de dados não estruturados, o reader oferece suporte aos seguintes recursos.

Suportado

Não suportado

  • Suporta arquivos TXT com esquema de tabela bidimensional.

  • Aceita arquivos semelhantes a CSV com delimitador personalizado.

    Nota

    Os formatos de texto (TXT e CSV) oferecem suporte às compactações gzip, bzip2 e zip.

    Não é possível empacotar vários arquivos em um único arquivo compactado.

  • Compatível com arquivos nos formatos ORC e Parquet.

  • Permite a leitura de vários tipos de dados (representados como STRING), poda de colunas e constantes de coluna.

  • Suporta leituras recursivas e filtragem por nome de objeto.

  • Permite leituras simultâneas de múltiplos objetos.

  • O reader não consegue ler um único objeto (arquivo) simultaneamente usando várias threads.

  • Um único objeto compactado não oferece suporte a leituras multithread simultâneas.

Importante
  • Ao preparar dados no OSS, garanta que os arquivos CSV estejam em conformidade com o formato CSV padrão. Por exemplo, escape qualquer aspa dupla (") em uma coluna substituindo-a por duas aspas duplas (""); caso contrário, podem ocorrer erros de análise. Se um arquivo contiver vários delimitadores, recomendamos o uso do tipo de arquivo TXT.

  • O OSS é uma fonte de dados não estruturados que armazena informações como arquivos. Antes de executar uma tarefa de sincronização, verifique se a estrutura de campos está configurada corretamente. Se a estrutura dos dados de origem mudar, atualize a configuração da tarefa para evitar corrupção de dados.

Gravação de dados em lote

O OSS Writer converte dados compatíveis com o Data Integration e os grava no OSS como arquivos de texto. Por ser um serviço de armazenamento de dados não estruturados, o writer oferece suporte aos seguintes recursos.

Suportado

Não suportado

  • Permite gravar dados em arquivos de texto com esquema de tabela bidimensional. Não há suporte para gravação de arquivos contendo objetos binários grandes (BLOBs), como vídeos e imagens.

  • Aceita arquivos semelhantes a CSV com delimitador personalizado.

  • Compatível com arquivos nos formatos ORC e Parquet.

    Nota

    No editor de código, há suporte para compactação SNAPPY.

  • Oferece suporte a gravações multithread, nas quais cada thread grava em um part-file separado.

  • Suporta rotação de arquivos e cria um novo arquivo para gravações subsequentes quando o arquivo atual excede um tamanho especificado.

  • Não há suporte para gravações simultâneas em um único arquivo.

  • Como o OSS não fornece tipos de dados nativos, o OSS Writer grava todos os dados como o tipo STRING nos objetos do OSS.

  • Não é possível gravar dados em um bucket do OSS cuja classe de armazenamento seja Cold Archive.

  • Um único objeto (arquivo) não pode exceder 100 GB.

Categoria

Tipo de coluna

Inteiro

LONG

String

STRING

Ponto flutuante

DOUBLE

Booleano

BOOLEAN

Data e hora

DATE

Gravação de dados em tempo real

  • Oferece suporte a gravação de dados em tempo real.

  • Permite gravações em tempo real de uma única tabela para os seguintes formatos de data lake: Hudi (0.12.x), Paimon e Iceberg.

Adicionar uma fonte de dados

Antes de desenvolver uma tarefa de sincronização no DataWorks, adicione a fonte de dados necessária seguindo as instruções em Gerenciamento de fontes de dados. Consulte as descrições de parâmetros no console do DataWorks para entender o significado de cada parâmetro ao adicionar uma fonte de dados.

Nota

Configurar tarefas de sincronização de dados

Para obter informações sobre o ponto de entrada e o procedimento de configuração de uma tarefa de sincronização, consulte os guias a seguir.

Sincronização em lote de tabela única

Sincronização em tempo real de tabela única

Consulte Configurar uma tarefa de sincronização em tempo real de tabela única.

Sincronização de banco de dados completo

Consulte Configurar uma tarefa de sincronização em lote de banco de dados completo e Configurar uma tarefa de sincronização em tempo real de banco de dados completo.

Perguntas frequentes

Existe um limite de arquivos para leitura do OSS?

Como lidar com dados incorretos ao ler arquivos CSV com múltiplos delimitadores?

Apêndice: Script de exemplo e parâmetros

Configurar uma tarefa de sincronização em lote usando o editor de código

Para configurar uma tarefa de sincronização em lote usando o editor de código, defina os parâmetros relacionados no script de acordo com os requisitos unificados de formato de script. Para mais informações, consulte Configuração no modo script. As informações a seguir descrevem os parâmetros obrigatórios para as fontes de dados ao utilizar o editor de código para tarefas de sincronização em lote.

Exemplo geral de script do reader

{
    "type":"job",
    "version":"2.0",// The version number.
    "steps":[
        {
            "stepType":"oss",// The plugin name.
            "parameter":{
                "nullFormat":"",// The string that represents a null value.
                "compress":"",// The compression type.
                "datasource":"",// The data source.
                "column":[// The column definitions.
                    {
                        "index":0,// The column index. Starts from 0.
                        "type":"string"// The data type.
                    },
                    {
                        "index":1,
                        "type":"long"
                    },
                    {
                        "index":2,
                        "type":"double"
                    },
                    {
                        "index":3,
                        "type":"boolean"
                    },
                    {
                        "format":"yyyy-MM-dd HH:mm:ss", // The time format. Required when 'type' is 'date'.
                        "index":4,
                        "type":"date"
                    }
                ],
                "skipHeader":"",// Whether to skip the header in CSV-like files.
                "encoding":"",// The encoding.
                "fieldDelimiter":",",// The field delimiter.
                "fileFormat": "",// The file format.
                "object":[]// Object prefixes for the files to read.
            },
            "name":"Reader",
            "category":"reader"
        },
        {
            "stepType":"stream",
            "parameter":{},
            "name":"Writer",
            "category":"writer"
        }
    ],
    "setting":{
        "errorLimit":{
            "record":""// The maximum number of allowed error records.
        },
        "speed":{
            "throttle":true,// If true, enables throttling. If false, the 'mbps' parameter is ignored.
            "concurrent":1, // The job concurrency.
            "mbps":"12"// The throttling speed limit in MB/s (1 mbps = 1 MB/s).
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}

Ler arquivos ORC ou Parquet do OSS

É possível ler arquivos ORC ou Parquet do OSS reutilizando o HDFS reader. Para isso, especifique os parâmetros padrão do OSS reader juntamente com os parâmetros path (para ORC) e fileFormat (para ORC e Parquet).

  • Este exemplo mostra como ler dados no formato ORC do OSS.

    {
    "stepType": "oss",
    "parameter": {
    "datasource": "",
    "fileFormat": "orc",
    "path": "/tests/case61/orc__691b6815_9260_4037_9899_****",
    "column": [
    {
    "index": 0,
    "type": "long"
    },
    {
    "index": "1",
    "type": "string"
    },
    {
    "index": "2",
    "type": "string"
    }
    ]
    }
    }
  • Este exemplo demonstra a leitura de dados no formato Parquet do OSS.

    {
      "type":"job",
        "version":"2.0",
        "steps":[
        {
          "stepType":"oss",
          "parameter":{
            "nullFormat":"",
            "compress":"",
            "fileFormat":"parquet",
            "path":"/*",
            "parquetSchema":"message m { optional BINARY registration_dttm (UTF8); optional Int64 id; optional BINARY first_name (UTF8); optional BINARY last_name (UTF8); optional BINARY email (UTF8); optional BINARY gender (UTF8); optional BINARY ip_address (UTF8); optional BINARY cc (UTF8); optional BINARY country (UTF8); optional BINARY birthdate (UTF8); optional DOUBLE salary; optional BINARY title (UTF8); optional BINARY comments (UTF8); }",
            "column":[
              {
                "index":"0",
                "type":"string"
              },
              {
                "index":"1",
                "type":"long"
              },
              {
                "index":"2",
                "type":"string"
              },
              {
                "index":"3",
                "type":"string"
              },
              {
                "index":"4",
                "type":"string"
              },
              {
                "index":"5",
                "type":"string"
              },
              {
                "index":"6",
                "type":"string"
              },
              {
                "index":"7",
                "type":"string"
              },
              {
                "index":"8",
                "type":"string"
              },
              {
                "index":"9",
                "type":"string"
              },
              {
                "index":"10",
                "type":"double"
              },
              {
                "index":"11",
                "type":"string"
              },
              {
                "index":"12",
                "type":"string"
              }
            ],
            "skipHeader":"false",
            "encoding":"UTF-8",
            "fieldDelimiter":",",
            "fieldDelimiterOrigin":",",
            "datasource":"wpw_demotest_oss",
            "envType":0,
            "object":[
              "wpw_demo/userdata1.parquet"
            ]
          },
          "name":"Reader",
          "category":"reader"
        },
        {
          "stepType":"odps",
          "parameter":{
            "partition":"dt=${bizdate}",
            "truncate":true,
            "datasource":"0_odps_wpw_demotest",
            "envType":0,
            "column":[
              "id"
            ],
            "emptyAsNull":false,
            "table":"wpw_0827"
          },
          "name":"Writer",
          "category":"writer"
        }
      ],
        "setting":{
        "errorLimit":{
          "record":""
        },
        "locale":"zh_CN",
          "speed":{
          "throttle":false,
            "concurrent":2
        }
      },
      "order":{
        "hops":[
          {
            "from":"Reader",
            "to":"Writer"
          }
        ]
      }
    }

Parâmetros do script do reader

Parâmetro

Descrição

Obrigatório

Padrão

datasource

Define o nome da fonte de dados. No modo script, este valor deve corresponder ao nome de uma fonte de dados configurada.

Sim

Nenhum

object

Especifica um ou mais objetos a serem sincronizados do OSS. É possível definir objetos usando caminhos explícitos, curingas ou parâmetros dinâmicos.

1. Métodos de configuração

  • Caminho explícito

    • Regra básica: Os caminhos devem começar no diretório raiz do bucket e não devem incluir o nome do bucket.

    • Especificar um único arquivo: Insira o caminho completo do arquivo. Por exemplo: my_folder/my_file.txt.

    • Especificar múltiplos objetos: Separe os caminhos de vários arquivos ou pastas com uma vírgula (,). Por exemplo: folder_a/file1.txt, folder_a/file2.txt.

  • Caminho com curinga

    • Use curingas para corresponder a vários arquivos com um padrão específico.

    • *: Corresponde a zero ou mais caracteres.

    • ?: Corresponde exatamente a um caractere.

    • Exemplos:

      • abc*[0-9].txt corresponde a arquivos como abc0.txt, abc10.txt e abc_test_9.txt.

      • abc?.txt corresponde a arquivos como abc1.txt e abcX.txt.

  • Caminho com parâmetro dinâmico

    • Incorpore parâmetros de agendamento no caminho para automatizar a sincronização de dados. Quando o job é executado, o sistema substitui esses parâmetros pelos seus valores reais.

    • Por exemplo, se você configurar o caminho como raw_data/${bizdate}/abc.txt, o job poderá sincronizar dinamicamente a pasta correspondente à data de negócios de cada dia.

    • Para mais informações sobre como usar parâmetros de agendamento, consulte Fontes de parâmetros de agendamento e suas expressões.

Importante
  • Utilize curingas com cautela. O uso de curingas, especialmente *, aciona uma varredura recursiva do caminho do OSS. Para um grande número de arquivos, isso pode consumir memória e tempo significativos, podendo causar um erro de falta de memória. Evite usar curingas amplos em ambiente de produção. Se encontrar esse problema, divida os arquivos em diretórios diferentes antes de sincronizar.

  • O sistema de sincronização de dados trata todos os objetos sincronizados em um único job como uma única tabela de dados. Certifique-se de que todos os objetos estejam em conformidade com o mesmo esquema.

2. Simultaneidade e desempenho

O método de configuração determina diretamente a simultaneidade da extração de dados:

  • Modo single-thread: Ao especificar um único arquivo descompactado com um caminho explícito, o job extrai dados no modo single-thread.

  • Modo multithread: Ao especificar vários arquivos explícitos ou corresponder a vários arquivos com um curinga, o job usa leituras simultâneas para melhorar significativamente o throughput de extração. Configure a simultaneidade nas configurações de Channel.

Sim

Nenhum

parquetSchema

Use este parâmetro para definir o esquema de arquivos no formato Parquet. Aplica-se apenas quando fileFormat está definido como parquet. Após especificar o parquetSchema, garanta que a configuração geral seja um JSON válido.

message MessageTypeName {
required/optional, data_type, column_name;
......................;
}

O formato para parquetSchema é o seguinte:

  • MessageTypeName: O nome do tipo de mensagem.

  • Required/Optional: 'required' significa que o campo não pode ser nulo, enquanto 'optional' significa que pode ser nulo. Recomendamos definir todos os campos como 'optional'.

  • Tipo de dados: Arquivos Parquet suportam os seguintes tipos de dados: BOOLEAN, Int32, Int64, Int96, FLOAT, DOUBLE, BINARY (use BINARY para tipos string) e fixed_len_byte_array.

  • Cada definição de coluna deve terminar com ponto e vírgula, incluindo a última.

Veja abaixo um exemplo de configuração:

"parquetSchema": "message m { optional int32 minute_id; optional int32 dsp_id; optional int32 adx_pid; optional int64 req; optional int64 res; optional int64 suc; optional int64 imp; optional double revenue; }"

Não

Nenhum

column

Especifica a lista de colunas a serem lidas. 'type' define o tipo de dados na origem. 'index' indica o índice baseado em zero da coluna no arquivo de texto. 'value' define um valor constante para a coluna e instrui o sistema a gerar o valor em vez de lê-lo do arquivo de origem.

Por padrão, é possível ler todas as colunas como o tipo de dados STRING, conforme mostrado no exemplo a seguir.

"column": ["*"]

Também é possível especificar detalhes para cada coluna, como no exemplo abaixo.

"column":
        {
           "type": "long",
           "index": 0    // Reads an integer from the first column of the OSS text file.
        },
        {
           "type": "string",
           "value": "alibaba"  // Generates a constant string 'alibaba' for the current column.
        }
Nota

Para cada coluna especificada, 'type' é obrigatório, e você deve definir 'index' ou 'value'.

Sim

Todas as colunas são lidas como o tipo de dados STRING.

fileFormat

O formato de arquivo dos objetos de origem no OSS. Os valores válidos são 'csv' e 'text'. Ambos os formatos aceitam delimitadores personalizados.

Sim

csv

fieldDelimiter

O delimitador de campo.

Nota

Um delimitador de campo é obrigatório. Se não for especificado, o parâmetro assume como padrão uma vírgula (,), que também é o padrão da interface.

Especifique um caractere invisível por sua representação Unicode (por exemplo, \u001b). Também é possível usar este formato para caracteres visíveis (por exemplo, \u007c para o símbolo pipe).

Sim

,

lineDelimiter

O delimitador de linha.

Nota

Este parâmetro se aplica apenas quando 'fileFormat' está definido como 'text'.

Não

Nenhum

compress

O tipo de compactação dos arquivos de origem. Se este parâmetro não for definido, os arquivos serão considerados descompactados. Tipos suportados: gzip, bzip2 e zip.

Não

Sem compactação

encoding

A codificação de caracteres dos arquivos de origem.

Não

utf-8

nullFormat

Define uma string nos dados de origem que representa um valor nulo. Isso é necessário porque arquivos de texto não possuem uma representação padrão para valores nulos. Por exemplo:

  • Se você definir nullFormat:"null", a string literal "null" nos dados de origem será tratada como um valor nulo.

  • Se você definir nullFormat:"\u0001", a string "\u0001" (um caractere invisível) nos dados de origem será tratada como um valor nulo.

  • Se omitir o parâmetro "nullFormat", o sistema gravará os dados de origem no destino tal como estão, sem nenhuma conversão de valor.

Não

Nenhum

skipHeader

Arquivos semelhantes a CSV podem ter uma linha de cabeçalho que serve como título e precisa ser ignorada. Por padrão, essa linha não é ignorada. O parâmetro skipHeader não é suportado no modo de arquivo compactado.

Não

false

csvReaderConfig

Um mapa de configurações adicionais para o CsvReader usado para analisar arquivos CSV. Se este parâmetro for omitido, o CsvReader usará suas configurações padrão.

Não

Nenhum

Exemplo de script do writer

{
    "type":"job",
    "version":"2.0",
    "steps":[
        {
            "stepType":"stream",
            "parameter":{},
            "name":"Reader",
            "category":"reader"
        },
        {
            "stepType":"oss",// The plugin name.
            "parameter":{
                "nullFormat":"",// Defines which strings are interpreted as null values.
                "dateFormat":"",// The date format.
                "datasource":"",// The datasource.
                "writeMode":"",// The write mode.
                "writeSingleObject":"false", // If true, writes all data to a single OSS file.
                "encoding":"",// The file encoding.
                "fieldDelimiter":",",// The field delimiter.
                "fileFormat":"",// The file format.
                "object":""// The object prefix.
            },
            "name":"Writer",
            "category":"writer"
        }
    ],
    "setting":{
        "errorLimit":{
            "record":"0"// The error limit.
        },
        "speed":{
            "throttle":true,// Enables throttling. If false, the 'mbps' parameter is ignored.
            "concurrent":1, // The job concurrency.
            "mbps":"12"// The throttling limit in MB/s (1 mbps = 1 MB/s).
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}

Script de exemplo: Gravar arquivos ORC ou Parquet no OSS

É possível gravar arquivos ORC ou Parquet no OSS usando o HDFS Writer. Além dos parâmetros existentes do OSS Writer, este método adiciona parâmetros de configuração estendidos, como path e fileFormat. Para descrições desses parâmetros, consulte HDFS Writer.

Os exemplos a seguir mostram como gravar arquivos ORC ou Parquet no OSS:

Importante

O código a seguir serve apenas para fins de demonstração. Modifique os parâmetros para corresponder aos nomes e tipos de colunas específicos do seu cenário. Não copie o código para uso em ambiente de produção.

  • Gravar arquivos ORC no OSS

    Atualmente, só é possível gravar arquivos ORC no editor de código. Alterne para o editor de código para configurar a tarefa. Defina o parâmetro fileFormat como orc, especifique o path do arquivo e defina cada column usando o formato {"name":"your column name","type": "your column type"}.

    Os seguintes tipos de coluna ORC são suportados para gravações offline:

    Tipo

    Status

    TINYINT

    Suportado

    SMALLINT

    Suportado

    INT

    Suportado

    BIGINT

    Suportado

    FLOAT

    Suportado

    DOUBLE

    Suportado

    TIMESTAMP

    Suportado

    DATE

    Suportado

    VARCHAR

    Suportado

    STRING

    Suportado

    CHAR

    Suportado

    BOOLEAN

    Suportado

    DECIMAL

    Suportado

    BINARY

    Suportado

    {
    "stepType": "oss",
    "parameter": {
    "datasource": "",
    "fileFormat": "orc",
    "path": "/tests/case61",
    "fileName": "orc",
    "writeMode": "append",
    "column": [
    {
    "name": "col1",
    "type": "BIGINT"
    },
    {
    "name": "col2",
    "type": "DOUBLE"
    },
    {
    "name": "col3",
    "type": "STRING"
    }
    ],
    "fieldDelimiter": "\t",
    "compress": "NONE",
    "encoding": "UTF-8"
    }
    }
  • Gravar arquivos Parquet no OSS

    {
    "stepType": "oss",
    "parameter": {
    "datasource": "",
    "fileFormat": "parquet",
    "path": "/tests/case61",
    "fileName": "test",
    "writeMode": "append",
    "fieldDelimiter": "\t",
    "compress": "SNAPPY",
    "encoding": "UTF-8",
    "parquetSchema": "message test { required int64 int64_col;\n required binary str_col (UTF8);\nrequired group params (MAP) {\nrepeated group key_value {\nrequired binary key (UTF8);\nrequired binary value (UTF8);\n}\n}\nrequired group params_arr (LIST) {\nrepeated group list {\nrequired binary element (UTF8);\n}\n}\nrequired group params_struct {\nrequired int64 id;\n required binary name (UTF8);\n }\nrequired group params_arr_complex (LIST) {\nrepeated group list {\nrequired group element {\n required int64 id;\n required binary name (UTF8);\n}\n}\n}\nrequired group params_complex (MAP) {\nrepeated group key_value {\nrequired binary key (UTF8);\nrequired group value {\nrequired int64 id;\n required binary name (UTF8);\n}\n}\n}\nrequired group params_struct_complex {\nrequired int64 id;\n required group detail {\nrequired int64 id;\n required binary name (UTF8);\n}\n}\n}",
    "dataxParquetMode": "fields"
    }
    }

Parâmetros do script do writer

Parâmetro

Descrição

Obrigatório

Padrão

datasource

O nome da fonte de dados. No editor de código, este valor deve corresponder ao nome da fonte de dados configurada.

Sim

Nenhum

object

O nome do objeto de saída no OSS. O OSS usa nomes de objetos para simular uma estrutura de diretórios. O nome do objeto segue as convenções abaixo:

  • Se você definir "object": "datax", o nome do objeto gravado começará com datax, e uma string aleatória será anexada como sufixo.

  • Se você definir "object": "cdo/datax", o nome do objeto gravado começará com /cdo/datax, e uma string aleatória será anexada como sufixo. O OSS usa a barra (/) como delimitador para simular diretórios.

Se não desejar um sufixo UUID aleatório, configure "writeSingleObject": "true". Para mais informações, consulte a descrição do parâmetro writeSingleObject.

Sim

Nenhum

ossBlockSize

O tamanho de uma parte do OSS. O valor padrão é 16 MB. Quando o formato de saída do arquivo for parquet ou ORC, configure este parâmetro no mesmo nível do parâmetro object.

Como um upload multipart do OSS é limitado a 10.000 partes, o tamanho padrão da parte restringe o tamanho máximo do arquivo a 160 GB. Para fazer upload de arquivos maiores, aumente o tamanho da parte.

Não

16

writeMode

Define como o OSS Writer lida com dados existentes antes da gravação:

  • truncate: Exclui todos os objetos que correspondem ao prefixo especificado no parâmetro object antes de gravar novos dados. Por exemplo, se você definir "object":"abc", todos os objetos com o prefixo abc serão excluídos.

  • append: Não realiza nenhuma limpeza. O OSS Writer grava novos dados usando o nome do objeto especificado como prefixo e anexando um UUID aleatório para garantir um nome exclusivo. Por exemplo, se especificar o nome do objeto como DataIntegration, o nome real do objeto será semelhante a DataIntegration_**__**.

  • nonConflict: Se já existir um objeto cujo nome corresponda ao prefixo especificado, o job de sincronização falhará. Por exemplo, se você definir "object":"abc" e existir um objeto chamado abc123, um erro será relatado.

Sim

Nenhum

writeSingleObject

Determina se todos os dados devem ser gravados em um único objeto.

  • true: Grava todos os dados em um único objeto. Se nenhum dado for lido da origem, um arquivo vazio não será criado.

  • false: Grava dados em vários objetos. Se nenhum dado for lido da origem e um cabeçalho estiver configurado, será criado um arquivo vazio contendo apenas o cabeçalho. Caso contrário, será criado um arquivo vazio de zero byte.

Nota
  • Este parâmetro não se aplica aos formatos ORC e Parquet. Não é possível usá-lo para gravar dados em um único arquivo para esses formatos quando a simultaneidade for maior que 1. Para gravar em um único arquivo, defina a simultaneidade como 1. No entanto, isso ainda anexará um sufixo aleatório ao nome do objeto e poderá reduzir o desempenho do job de sincronização.

  • Em alguns casos, como com uma origem Hologres, os dados são lidos por shard. Isso pode produzir vários arquivos de saída mesmo quando a simultaneidade está definida como 1.

Não

false

fileFormat

O formato de arquivo dos objetos de saída. Os seguintes formatos são suportados:

  • csv: Grava dados no formato CSV estrito. Se os dados incluírem o delimitador de campo, ele será escapado sendo colocado entre aspas duplas (") de acordo com as regras padrão de escape de CSV.

  • text: Grava dados como texto simples, usando o delimitador de campo especificado. Ao contrário de csv, este formato não escapa delimitadores que aparecem dentro dos dados.

  • parquet: Se usar este formato de arquivo, especifique o parâmetro parquetSchema para definir o esquema de dados.

    Importante
  • ORC: Para usar este formato, alterne para o editor de código.

Não

text

compress

Especifica o formato de compactação para os arquivos de dados gravados no OSS. Este parâmetro deve ser configurado no editor de código.

Importante

Este parâmetro aplica-se apenas aos formatos de arquivo Parquet e ORC, para os quais apenas a compactação SNAPPY é suportada. Os formatos csv e text não oferecem suporte a compactação.

Não

Nenhum

fieldDelimiter

O delimitador de campo para os dados de saída.

Não

,

encoding

Define a codificação de caracteres para os arquivos de saída.

Não

utf-8

parquetSchema

Obrigatório quando fileFormat está definido como parquet. Este parâmetro define o esquema do arquivo Parquet de saída. Use o seguinte formato:

message MessageTypeName {
modifier, data_type, column_name;
......................;
}

Os itens de configuração são descritos da seguinte forma:

  • MessageTypeName: O nome do tipo de mensagem.

  • modifier: required indica que o campo não pode conter um valor nulo. optional indica que o campo pode conter um valor nulo. Recomendamos definir todos os campos como optional.

  • data_type: Os tipos de dados Parquet suportados incluem BOOLEAN, INT32, INT64, INT96, FLOAT, DOUBLE, BINARY (para tipos string) e FIXED_LEN_BYTE_ARRAY.

Nota

Cada definição de coluna deve terminar com ponto e vírgula, incluindo a última.

Exemplo:

message m {
    optional int64 id;
    optional int64 date_id;
    optional binary datetimestring;
    optional int32 dspId;
    optional int32 advertiserId;
    optional int32 status;
    optional int64 bidding_req_num;
    optional int64 imp;
    optional int64 click_num;
    }

Não

Nenhum

nullFormat

Em arquivos de texto, não é possível usar uma string padrão para definir um valor nulo. O sistema de sincronização de dados fornece o parâmetro nullFormat para especificar uma string que representa um valor nulo. Por exemplo, se configurar nullFormat="null" e os dados de origem forem null, o sistema de sincronização de dados o tratará como um campo nulo.

Não

Nenhum

header

Especifica o cabeçalho a ser gravado nos arquivos de saída. O valor deve ser um array JSON de strings, como ["id", "name", "age"].

Não

Nenhum

maxFileSize (Configuração avançada, não suportada na interface sem código)

Controla o tamanho máximo de um único objeto de saída antes que o arquivo sofra rotação, semelhante à rotação de arquivos de log. Para uploads multipart, o tamanho da parte é de 10 MB, que também serve como granularidade mínima de rotação. Um valor de maxFileSize menor que 10 MB é tratado como 10 MB. Uma solicitação InitiateMultipartUploadRequest do OSS suporta no máximo 10.000 partes.

Quando um arquivo sofre rotação, o novo nome do objeto é criado anexando um número sequencial (como _1, _2 ou _3) ao nome base do objeto, que já inclui um prefixo e um UUID aleatório.

Nota
  • A unidade é megabytes (MB).

  • Exemplo: "maxFileSize": 300 define o tamanho máximo do arquivo como 300 MB.

  • O parâmetro maxFileSize aplica-se apenas aos formatos csv e text. Como o tamanho é calculado com base em dados na memória, o tamanho real do objeto no OSS pode ser impreciso.

Não

100.000

suffix (Configuração avançada, não suportada na interface sem código)

Especifica um sufixo a ser anexado aos nomes dos objetos de saída. Por exemplo, se definir suffix como .csv, os nomes finais dos objetos serão semelhantes a prefixo-do-objeto_uuid-aleatorio.csv.

Não

Nenhum

Apêndice: Conversão de tipos de dados Parquet

Se não configurar o parquetSchema, o DataWorks converterá automaticamente os tipos de dados de origem conforme mostrado abaixo.

Tipo de origem

Tipo Parquet

Tipo lógico Parquet

CHAR / VARCHAR / STRING

BINARY

UTF8

BOOLEAN

BOOLEAN

N/A

BINARY / VARBINARY

BINARY

N/A

DECIMAL

FIXED_LEN_BYTE_ARRAY

DECIMAL

TINYINT

INT32

INT_8

SMALLINT

INT32

INT_16

INT/INTEGER

INT32

N/A

BIGINT

INT64

N/A

FLOAT

FLOAT

N/A

DOUBLE

DOUBLE

N/A

DATE

INT32

DATE

TIME

INT32

TIME_MILLIS

TIMESTAMP/DATETIME

INT96

N/A