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 |
|
|
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 |
|
|
|
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.
Ao adicionar uma fonte de dados OSS entre contas diferentes, conceda as permissões necessárias. Para mais informações, consulte Usar uma política de bucket para conceder acesso entre contas ao OSS.
Se utilizar autorização baseada em função RAM para configurar uma fonte de dados OSS, consulte Configurar uma fonte de dados usando autorização de função RAM.
Ao adicionar uma fonte de dados OSS entre regiões diferentes, recomendamos o uso de um endpoint público. Para mais informações, consulte Domínios de acesso e conectividade de rede.
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
Consulte Configuração na interface sem código e Configuração no modo script.
Para parâmetros do modo script e um exemplo de código, consulte Apêndice: Exemplo de código e descrições de parâmetros.
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
Importante
2. Simultaneidade e desempenho O método de configuração determina diretamente a simultaneidade da extração de dados:
| 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. O formato para parquetSchema é o seguinte:
Veja abaixo um exemplo de configuração: | 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. Também é possível especificar detalhes para cada coluna, como no exemplo abaixo. 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:
| 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:
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 não desejar um sufixo UUID aleatório, configure | 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:
| Sim | Nenhum |
writeSingleObject | Determina se todos os dados devem ser gravados em um único objeto.
Nota
| Não | false |
fileFormat | O formato de arquivo dos objetos de saída. Os seguintes formatos são suportados:
| 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: Os itens de configuração são descritos da seguinte forma:
Nota Cada definição de coluna deve terminar com ponto e vírgula, incluindo a última. Exemplo: | 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 | 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 | 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 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
| 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 |