Todos los productos
Search
Centro de documentos

DataWorks:OSS

Última actualización: Sep 06, 2026

El origen de datos de OSS proporciona acceso de lectura y escritura a OSS. Este tema describe cómo DataWorks admite la sincronización de datos de OSS.

Tipos de campo admitidos y limitaciones

Lectura de datos por lotes

OSS Reader lee datos de OSS y los convierte a un formato que Data Integration puede procesar. Dado que OSS es un servicio de almacenamiento de datos no estructurados, el lector admite las siguientes funciones.

Compatible

No compatible

  • Admite archivos TXT, los cuales deben tener un esquema de tabla bidimensional.

  • Admite archivos similares a CSV con un delimitador personalizado.

    Nota

    Los formatos de texto (TXT y CSV) son compatibles con la compresión gzip, bzip2 y zip.

    No es posible empaquetar varios archivos en un solo archivo comprimido.

  • Admite archivos en formatos ORC, Parquet, JSON y JSONL.

  • Admite la lectura de diversos tipos de datos (representados como STRING), la eliminación de columnas y las constantes de columna.

  • Admite lecturas recursivas y el filtrado por nombre de objeto.

  • Admite lecturas simultáneas desde varios objetos.

  • El lector no puede leer un solo objeto (archivo) de forma simultánea mediante varios hilos.

  • Un único objeto comprimido no admite lecturas simultáneas con varios hilos.

Importante
  • Cuando prepare datos en OSS, los archivos CSV deben cumplir con el formato CSV estándar. Por ejemplo, debe escapar cualquier comilla doble (") dentro de una columna y reemplazarla por dos comillas dobles (""); de lo contrario, el archivo podría dividirse de forma incorrecta. Si un archivo contiene varios delimitadores, se recomienda usar el tipo text.

  • OSS es un origen de datos no estructados que almacena datos de tipo archivo. Antes de sincronizar los datos, compruebe que la estructura de campos de los datos a sincronizar cumpla con sus expectativas. De igual manera, si la estructura de datos de un origen no estructurado cambia, debe volver a confirmar la estructura de campos en la configuración de la tarea. De lo contrario, podrían producirse errores de sincronización de datos.

Escritura de datos por lotes

OSS Writer convierte los datos del protocolo de Data Integration en archivos de texto dentro de OSS. Al ser OSS un servicio de almacenamiento de datos no estructurados, el escritor admite las siguientes funciones.

Compatible

No compatible

  • Solo se pueden escribir archivos de texto. No se admiten datos BLOB, como videos e imágenes. Los archivos de texto deben tener un esquema de tabla bidimensional.

  • Admite archivos similares a CSV con un delimitador personalizado.

  • Admite los formatos ORC, Parquet, JSON y JSONL.

    Nota

    El formato de compresión SNAPPY es compatible en modo script.

  • Admite escrituras con varios hilos, donde cada hilo escribe en un subarchivo distinto.

  • Admite la rotación de archivos. Cuando un archivo supera el tamaño especificado, el escritor cambia a un archivo nuevo.

  • Un solo archivo no admite escrituras simultáneas.

  • OSS no proporciona tipos de datos nativos. OSS Writer escribe todos los datos en los objetos de OSS como tipo STRING.

  • Si la clase de almacenamiento del bucket de OSS es Cold Archive Storage, no se admiten las operaciones de escritura.

  • Un solo objeto (archivo) no puede superar los 100 GB.

Categoría

Tipo de columna de Data Integration

Entero

LONG

Cadena

STRING

Punto flotante

DOUBLE

Booleano

BOOLEAN

Fecha y hora

DATE

Escritura en tiempo real

  • Admite capacidades de escritura en tiempo real.

  • Se admite la escritura en tiempo real de una sola tabla hacia lagos de datos: Hudi (0.12.x), Paimon e Iceberg.

Crear un origen de datos

Antes de desarrollar una tarea de sincronización en DataWorks, debe agregar el origen de datos necesario a DataWorks siguiendo las instrucciones de Data source configuration. Consulte las descripciones de parámetros en la consola de DataWorks para comprender el significado de cada parámetro al agregar un origen de datos.

Nota

Desarrollo de tareas de sincronización de datos

Para conocer el punto de entrada y el procedimiento de configuración de una tarea de sincronización, consulte las siguientes guías de configuración.

Guía de configuración de tareas de sincronización por lotes de una sola tabla

Guía de configuración de tareas de sincronización en tiempo real de una sola tabla

Para consultar el procedimiento, vea Single-table real-time synchronization task configuration.

Guía de configuración de sincronización de base de datos completa

Para consultar el procedimiento, vea Full-Database Batch Synchronization Task Capabilities y Full-Database Real-Time Synchronization Task Capabilities.

Preguntas frecuentes

Is there a file count limit when reading OSS files?

How do I handle dirty data when reading CSV files with multi-character delimiters?

Apéndice: Ejemplos de script y descripción de parámetros

Configurar una tarea de sincronización por lotes mediante el editor de código

Si desea configurar una tarea de sincronización por lotes mediante el editor de código, debe establecer los parámetros correspondientes en el script de acuerdo con los requisitos unificados de formato de script. Para obtener más información, consulte Script mode configuration. A continuación se describen los parámetros que debe configurar para los orígenes de datos cuando utilice el editor de código.

Ejemplo de script de Reader: Ejemplo genérico

A continuación se muestra un script genérico para OSS Reader.

{ "type":"job", "version":"2.0",//The version number. "steps":[ { "stepType":"oss",//The plug-in name. "parameter":{ "nullFormat":"",//The string that represents a null value. "compress":"",//The text compression type. "datasource":"",//The data source. "column":[//The columns. { "index":0,//The column index. "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. "index":4, "type":"date" } ], "skipHeader":"",//CSV-like files may contain a header row. Set this parameter to skip the header. "encoding":"",//The encoding format. "fieldDelimiter":",",//The field delimiter. "fileFormat": "",//The text type. "object":[]//The object prefix. }, "name":"Reader", "category":"reader" }, { "stepType":"stream", "parameter":{}, "name":"Writer", "category":"writer" } ], "setting":{ "errorLimit":{ "record":""//The maximum number of error records allowed. }, "speed":{ "throttle":true,//If throttle is set to false, the mbps parameter does not take effect, which means throttling is disabled. If throttle is set to true, throttling is enabled. "concurrent":1 //The number of concurrent threads. "mbps":"12",//The throttling rate. 1 mbps = 1 MB/s. } }, "order":{ "hops":[ { "from":"Reader", "to":"Writer" } ] } }

Ejemplo de script de Reader: Leer archivos ORC o Parquet desde OSS

OSS Reader lee archivos ORC o Parquet de OSS mediante la reutilización de HDFS Reader. Además de los parámetros existentes de OSS Reader, se agregan los siguientes parámetros extendidos: Path (ORC) y FileFormat (ORC, Parquet) .

  • En el siguiente ejemplo se muestra cómo leer archivos ORC desde 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"
    }
    ]
    }
    }
  • En el siguiente ejemplo se muestra cómo leer archivos Parquet desde 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"
          }
        ]
      }
    }

Ejemplo de script de Reader: Leer archivos JSONLine desde OSS, analizar sintácticamente los datos JSON y escribirlos en el destino

En el siguiente ejemplo se muestra cómo leer datos JSONLine desde OSS, analizar sintácticamente los datos JSON, vectorizar campos específicos de dichos datos y, posteriormente, escribirlos en Milvus:

{
    "type": "job",
    "version": "2.0",
    "steps": [
        {
            "stepType": "oss",
            "parameter": {
                "datasource": "${OSS data source name}",
                "column": [
                    {
                        "name": "chunk_text",
                        "index": 0,
                        "type": "string"
                    }
                ],
                "fieldDelimiter": ",",
                "encoding": "UTF-8",
                "fileFormat": "jsonl",
                "object": [
                    "embedding/chunk1.jsonl"
                ]
            },
            "name": "Reader",
            "category": "reader"
        },
        {
            "stepType": "json-extracting",
            "parameter": {
                "column": [
                    {
                        "name": "text",
                        "fromColumn": "chunk_text",
                        "jsonPath": "$.text",
                        "type": "STRING",
                        "nullOrInvalidDataAction": "DIRTY_DATA"
                    }
                ]
            },
            "name": "jsonextract",
            "category": "flatmap"
        },
        {
            "stepType": "embedding-transformer",
            "parameter": {
                "modelProvider": "bailian",
                "modelName": "text-embedding-v4",
                "apiKey": "${the AccessKey that you want to use}",
                "embeddingColumns": {
                    "sourceColumnNames": [
                        "text"
                    ],
                    "embeddingColumnName": "my_vector"
                },
                "batchSize": 8,
                "dimension": 1024
            },
            "name": "embedding",
            "category": "flatmap"
        },
        {
            "stepType": "milvus",
            "parameter": {
                "schemaCreateMode": "ignore",
                "enableDynamicSchema": true,
                "datasource": "${Milvus data source name}",
                "column": [
                    {
                        "name": "my_vector",
                        "type": "FloatVector",
                        "dimension": "1024",
                        "elementType": "None",
                        "maxLength": "65535"
                    },
                    {
                        "name": "text",
                        "type": "VarChar",
                        "elementType": "None",
                        "maxLength": "65535"
                    }
                ],
                "collection": "yunshi_vector_07171130",
                "writeMode": "insert",
                "batchSize": 1024,
                "columnMapping": [
                    {
                        "sourceColName": "my_vector",
                        "dstColName": "my_vector"
                    },
                    {
                        "sourceColName": "text",
                        "dstColName": "text"
                    }
                ]
            },
            "name": "Writer",
            "category": "writer"
        }
    ],
    "setting": {
        "errorLimit": {
            "record": "0"
        },
        "speed": {
            "concurrent": 1
        }
    }
}

Parámetros del script de Reader

Parámetro

Descripción

Obligatorio

Valor predeterminado

datasource

Nombre del origen de datos. El modo script permite agregar orígenes de datos. El valor de este parámetro debe coincidir con el nombre del origen de datos agregado.

Sí

N/D

Object

Este parámetro especifica uno o más objetos que se sincronizarán desde OSS. Se admiten tres métodos de configuración: rutas explícitas, rutas con comodines y rutas con parámetros dinámicos.

1. Métodos de configuración

  • Rutas explícitas

    • Regla básica: La ruta comienza desde el directorio raíz del bucket y no necesita incluir el nombre del bucket.

    • Especificar un solo archivo: Introduzca la ruta completa del archivo. Ejemplo: my_folder/my_file.txt.

    • Especificar varios objetos: Separe las rutas de varios archivos o carpetas con comas (,). Ejemplo: folder_a/file1.txt, folder_a/file2.txt.

  • Rutas con comodines

    • Puede usar comodines para hacer coincidir varios archivos que cumplan con un patrón específico.

    • *: Coincide con cero o más caracteres arbitrarios.

    • ?: Coincide exactamente con un carácter arbitrario.

    • Ejemplos:

      • abc*[0-9].txt puede coincidir con abc0.txt, abc10,txt, abc_test_9.txt, entre otros.

      • abc?.txt puede coincidir con abc1.txt, abcX.txt, entre otros.

  • Rutas con parámetros dinámicos

    • Puede insertar parámetros de programación en la ruta para habilitar la sincronización automatizada. Cuando se ejecuta una tarea, los parámetros se sustituyen por sus valores reales.

    • Ejemplo: Si establece la ruta en raw_data/${bizdate}/abc.txt, la tarea sincroniza de forma dinámica y diaria la carpeta que corresponde a la fecha de negocio.

    • Para obtener más información sobre los parámetros de programación, consulte Scheduling parameter sources and expressions.

Importante
  • Utilice los comodines con precaución. Su uso (especialmente *) desencadena un escaneo de recorrido de las rutas de OSS. Cuando la cantidad de archivos es grande, esto consume una cantidad significativa de memoria y tiempo, e incluso puede provocar que las tareas fallen por errores de falta de memoria. Se recomienda no usar comodines amplios en entornos de producción. Si se presenta este problema, divida los archivos en distintos directorios antes de la sincronización.

  • El sistema de sincronización de datos trata todos los objetos sincronizados en un solo trabajo como una única tabla de datos. Asegúrese de que todos los objetos cumplan con el mismo esquema.

2. Mecanismo de lectura simultánea y rendimiento

El método de configuración determina directamente el rendimiento de concurrencia durante la extracción de datos:

  • Modo de un solo hilo: Cuando se especifica únicamente un archivo explícito y sin comprimir, la tarea extrae los datos en modo de un solo hilo.

  • Modo multihilo: Cuando se especifican varios archivos explícitos o se usan comodines que coinciden con varios archivos, la tarea habilita automáticamente lecturas simultáneas con varios hilos para mejorar significativamente la eficiencia de extracción. Configure el número de hilos simultáneos en Channel Control.

Sí

Ninguna

parquetSchema

Este parámetro se utiliza cuando se leen datos de OSS en formato de archivo Parquet. Solo surte efecto cuando fileFormat se establece en parquet, y define el tipo de definición del almacenamiento Parquet. Asegúrese de que la configuración general cumpla con la sintaxis JSON después de especificar parquetSchema.

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

El formato de configuración de parquetSchema se describe a continuación:

  • Nombre de MessageType: Especifique un nombre.

  • Obligatorio u opcional: required indica que el campo no puede ser nulo, mientras que optional indica que el campo puede ser nulo. Se recomienda establecer todos los campos como optional.

  • Tipo de datos: Los archivos Parquet admiten los tipos BOOLEAN, Int32, Int64, Int96, FLOAT, DOUBLE, BINARY (use BINARY para tipos de cadena) y fixed_len_byte_array.

  • Cada definición de columna debe terminar con un punto y coma, incluida la última línea.

A continuación se muestra un ejemplo de configuración.

"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; }"

No

Ninguna

column

Lista de campos que se van a leer. type especifica el tipo de datos de los datos de origen, index especifica el número de columna (comenzando desde cero) en el archivo de texto al que corresponde la columna actual, y value indica que la columna actual es una constante. En lugar de leer datos del archivo de origen, el sistema genera automáticamente la columna según el valor especificado.

De forma predeterminada, puede leer todos los datos como tipo STRING. La configuración es la siguiente.

"column": ["*"]

Puede especificar la información de los campos de columna. La configuración es la siguiente.

"column":
    {
       "type": "long",
       "index": 0    //Retrieve the INT field from the first column of the OSS text.
    },
    {
       "type": "string",
       "value": "alibaba"  //Generate the string field "alibaba" from OSSReader as the current field.
    }
Nota

En la información de columna que especifique, el parámetro type es obligatorio y debe especificar index o value.

Sí

Todos los datos se leen como tipo STRING.

fileFormat

Tipo de archivo. Indica el tipo de archivo de los objetos de OSS de origen. Valores válidos: csv, text, parquet, orc, json y jsonl. Los formatos csv y text admiten delimitadores personalizados.

Sí

csv

fieldDelimiter

Delimitador de campos para la lectura de datos.

Nota

Cuando OSS Reader lee datos, debe especificar un delimitador de campos. Si no lo hace, se usa una coma (,) de forma predeterminada. La coma (,) también es el valor predeterminado en la configuración de la consola.

Si el delimitador es invisible, introduzca su codificación Unicode. Por ejemplo, \u001b o \u007c.

Sí

,

lineDelimiter

Delimitador de líneas para la lectura de datos.

Nota

Este parámetro solo surte efecto cuando fileFormat se establece en text.

No

N/D

compress

Tipo de compresión para archivos de texto. De forma predeterminada, este parámetro se deja vacío, lo que indica que los datos no están comprimidos. Valores válidos: gzip, bzip2 y zip.

No

No compression

encoding

Codificación utilizada para leer los archivos.

No

utf-8

nullFormat

Las cadenas estándar no se pueden usar para definir un valor nulo (puntero nulo) en archivos de texto. Data Integration proporciona el parámetro nullFormat para definir qué cadenas representan un valor nulo. Ejemplos:

  • Si configura nullFormat:"null", que equivale a un "carácter visible", y los datos de origen son nulos, Data Integration trata el campo como un campo nulo.

  • Si configura nullFormat:"\u0001", que equivale a un "carácter invisible", y los datos de origen son la cadena "\u0001", Data Integration trata el campo como un campo nulo.

  • Si no especifica el parámetro "nullFormat", que equivale a "no configurado", los datos de origen se escriben en el destino tal cual, sin ninguna conversión.

No

Ninguna

skipHeader

Los archivos similares a CSV pueden contener una fila de encabezado con títulos de columna que debe omitirse. De forma predeterminada, el encabezado no se omite. skipHeader no es compatible con el modo de archivo comprimido.

No

false

csvReaderConfig

Configuración para leer archivos similares a CSV. Este parámetro es de tipo MAP. Se utiliza CsvReader para leer archivos similares a CSV, el cual admite diversas configuraciones. Si no se especifica este parámetro, se utilizan los valores predeterminados.

No

Ninguna

successOnNoObject

Especifica si la tarea finaliza de forma exitosa cuando no existen objetos en la ruta de lectura indicada. Si este parámetro se establece en false, la tarea falla. Si se establece en true, la tarea finaliza de forma exitosa sin escribir ningún dato. Este parámetro aplica a escenarios de sincronización periódica donde la ruta de origen podría estar vacía. En el modo de interfaz de usuario sin código, este parámetro corresponde a "Allow Missing Source Files" y solo se muestra cuando fileFormat se establece en csv o text.

No

false

minLastModified

Especifica que solo se sincronicen los archivos cuya última hora de modificación sea igual o posterior a la hora indicada. El formato es yyyyMMddHHmmss. Por ejemplo, si configura "minLastModified": "20250101000000", solo se leen los archivos modificados a partir del 1 de enero de 2025 a las 00:00:00, y se filtran los anteriores. Puede usar este parámetro junto con maxLastModified para formar un intervalo cerrado por la izquierda y abierto por la derecha [min, max).

No

N/D

maxLastModified

Sincroniza únicamente los archivos cuya última hora de modificación sea anterior a la hora indicada. El formato es yyyyMMddHHmmss. Por ejemplo, si establece "maxLastModified": "20250102000000", solo se leen los archivos modificados antes de las 00:00:00 del 2 de enero de 2025. Los archivos modificados exactamente a esa hora se excluyen (intervalo abierto por la derecha). Puede usar este parámetro junto con minLastModified para definir un intervalo cerrado por la izquierda y abierto por la derecha [min, max).

No

N/D

Ejemplo de script de Writer: Ejemplo general

A continuación se muestra un ejemplo de script general para OSS Writer.

{ "type":"job", "version":"2.0", "steps":[ { "stepType":"stream", "parameter":{}, "name":"Reader", "category":"reader" }, { "stepType":"oss",// The plug-in name. "parameter":{ "nullFormat":"",// The null format provided by Data Integration, which defines what strings can represent null. "dateFormat":"",// The date format. "datasource":"",// The data source. "writeMode":"",// The write mode. "writeSingleObject":"false", // Specifies whether to write synchronized data to a single OSS file. "encoding":"",// The encoding format. "fieldDelimiter":","// The field delimiter. "fileFormat":"",// The file format. "object":""// The object prefix. }, "name":"Writer", "category":"writer" } ], "setting":{ "errorLimit":{ "record":"0"// The maximum number of error records allowed. }, "speed":{ "throttle":true,// If throttle is set to false, the mbps parameter does not take effect and bandwidth is not throttled. If throttle is set to true, bandwidth is throttled. "concurrent":1, // The number of concurrent threads. "mbps":"12"// The throttling rate. 1 mbps = 1 MB/s. } }, "order":{ "hops":[ { "from":"Reader", "to":"Writer" } ] } }

Demostración del script de Writer: escritura de archivos ORC o Parquet en OSS

OSS admite la escritura de archivos ORC o Parquet mediante la reutilización de HDFS Writer. Además de los parámetros existentes de OSS Writer, se agregaron parámetros de configuración extendidos como Path y FileFormat. Para obtener más información sobre estos parámetros, consulte HDFS Writer.

A continuación se muestra un ejemplo de cómo escribir archivos ORC o Parquet en OSS:

Importante

Este es solo un ejemplo. Modifique los parámetros según los nombres y tipos de columna reales de su entorno. No copie ni utilice el ejemplo directamente.

  • Escribir archivos ORC en OSS

    La escritura de archivos ORC solo es compatible con el modo de script. Debe cambiar al modo de script para la configuración. Establezca fileFormat en orc, defina path con la ruta del archivo que desea escribir y configure column con el formato {"name":"your column name","type": "your column type"}.

    Se admiten a continuación los tipos ORC para escritura:

    Tipo de campo

    Escritura por lotes en OSS (formato ORC)

    TINYINT

    Compatible

    SMALLINT

    Compatible

    INT

    Compatible

    BIGINT

    Compatible

    FLOAT

    Compatible

    DOUBLE

    Compatible

    TIMESTAMP

    Compatible

    DATE

    Compatible

    VARCHAR

    Compatible

    STRING

    Compatible

    CHAR

    Compatible

    BOOLEAN

    Compatible

    DECIMAL

    Compatible

    BINARY

    Compatible

    {
    "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"
    }
    ],
    "writeMode": "append",
    "fieldDelimiter": "\t",
    "compress": "NONE",
    "encoding": "UTF-8"
    }
    }
  • Escribir en OSS con formato Parquet

    {
    "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 del script de Writer

Parámetro

Descripción

Obligatorio

Valor predeterminado

datasource

El nombre del origen de datos. Puede agregar un origen de datos en el modo de script. El valor de este parámetro debe coincidir con el nombre del origen de datos que agregó.

Sí

N/A

object

El nombre del archivo en el que escribe OSS Writer. OSS utiliza los nombres de archivo para simular una estructura de directorios. OSS impone los siguientes límites en los nombres de objeto:

  • Si usa "object": "datax", el nombre del objeto escrito comienza con datax, seguido de un sufijo de cadena aleatoria.

  • Si usa "object": "cdo/datax", el nombre del objeto escrito comienza con /cdo/datax, seguido de un sufijo de cadena aleatoria. OSS utiliza la barra diagonal (/) como separador de directorio.

Si no desea un sufijo UUID aleatorio, se recomienda establecer "writeSingleObject" : "true". Para obtener más información, consulte la descripción de writeSingleObject.

Sí

N/A

ossBlockSize

El tamaño de bloque para las cargas multiparte de OSS. El tamaño de bloque predeterminado es de 16 MB. Cuando el formato de archivo es parquet u ORC, puede configurar este parámetro en el mismo nivel que el parámetro object.

Las cargas multiparte de OSS admiten un máximo de 10 000 partes. Con el tamaño de bloque predeterminado, el tamaño máximo del archivo es de 160 GB. Si el número de partes supera el límite, aumente el tamaño de bloque para admitir la carga de archivos más grandes.

No

16

writeMode

Especifica cómo OSS Writer gestiona los datos existentes antes de escribir:

  • truncate: antes de escribir, elimina todos los objetos cuyos nombres coinciden con el prefijo especificado. Por ejemplo, si establece "object":"abc", se eliminan todos los objetos cuyos nombres comienzan con abc.

  • append: no se aplica ningún procesamiento antes de escribir. OSS Writer de Data Integration escribe los datos directamente con el nombre del objeto y agrega un sufijo UUID aleatorio para garantizar que los nombres de archivo sean únicos. Por ejemplo, si especifica el nombre de objeto DI, el nombre real del objeto escrito será DI_**__**.

  • nonConflict: si existe algún objeto con un prefijo coincidente en la ruta especificada, se devuelve un error. Por ejemplo, si establece "object":"abc" y ya existe un objeto llamado abc123, se devuelve un error.

Sí

Ninguna

writeSingleObject

Especifica si los datos se escriben en un solo archivo durante la escritura en OSS:

  • true: escribe los datos en un solo archivo. Si no se leen datos, no se genera ningún archivo vacío.

  • false: escribe los datos en varios archivos. Si no se leen datos y se configuró un encabezado de archivo, se genera un archivo vacío que contiene únicamente dicho encabezado. De lo contrario, solo se genera un archivo vacío.

Nota
  • Cuando escribe datos en formato ORC o Parquet, el parámetro writeSingleObject no surte efecto. Esto significa que no puede usar este parámetro para escribir datos en un único archivo ORC o Parquet en escenarios de concurrencia múltiple. Para escribir datos en un solo archivo, establezca la concurrencia en 1. Sin embargo, se agregará un sufijo aleatorio al nombre del archivo y establecer la concurrencia en 1 reduce la velocidad de sincronización.

  • En ciertos escenarios, como cuando el origen es Hologres, los datos se leen por shard. Una sola concurrencia aún podría generar varios archivos.

No

false

fileFormat

El formato del archivo de salida. Se admiten los siguientes formatos:

  • csv: solo se admite el formato csv estricto. Si los datos que se van a escribir contienen delimitadores de columna, los datos se escapan según la sintaxis de escape de csv. El carácter de escape son las comillas dobles (").

  • text: los datos que se van a escribir simplemente se separan mediante delimitadores de columna. Si los datos contienen delimitadores de columna, no se aplica ningún escape.

  • parquet: si utiliza este tipo de archivo, debe agregar el parámetro parquetSchema para definir los tipos de datos.

    Importante
  • ORC: si utiliza este formato, debe cambiar al modo de script.

  • json, jsonl: los datos se escriben en formato JSON.

No

text

compress

El formato de compresión de los archivos de datos escritos en OSS. Debe configurar este parámetro en el modo de script.

Importante

Los formatos CSV y TEXT no admiten compresión. Los archivos Parquet y ORC solo admiten la compresión SNAPPY.

No

Ninguna

fieldDelimiter

El delimitador de campos para la escritura.

No

,

encoding

La configuración de codificación del archivo de salida.

No

utf-8

parquetSchema

Obligatorio cuando se escribe en OSS con formato de archivo Parquet. Este parámetro describe el esquema del archivo de destino y solo surte efecto cuando fileFormat se establece en parquet. El formato es el siguiente.

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

Los elementos de configuración se describen a continuación:

  • Nombre de MessageType: introduzca un nombre.

  • Obligatoriedad: required indica que el campo no puede ser nulo, mientras que optional indica que el campo puede ser nulo. Se recomienda establecer todos los campos como optional.

  • Tipo de datos: los archivos Parquet admiten los siguientes tipos: BOOLEAN, INT32, INT64, INT96, FLOAT, DOUBLE, BINARY (use BINARY para los tipos de cadena) y FIXED_LEN_BYTE_ARRAY.

Nota

Cada definición de columna debe terminar con un punto y coma, incluida la última línea.

Ejemplo:

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;
}

No

Ninguna

nullFormat

Las cadenas estándar no pueden usarse para definir null (puntero nulo) en archivos de texto. El sistema de sincronización de datos proporciona nullFormat para definir una cadena que represente null. Por ejemplo, si establece nullFormat="null" y los datos de origen son null, el sistema de sincronización de datos lo trata como un campo nulo.

No

Ninguna

header

La fila de encabezado al escribir en OSS. Ejemplo: ["id", "name", "age"].

No

Ninguna

maxFileSize (configuración avanzada, no compatible con la interfaz sin código)

El tamaño máximo de un solo archivo de objeto escrito en OSS. El valor predeterminado es 10 000 × 10 MB. Esto es similar a controlar el tamaño de los archivos de registro al imprimir registros de log4j. Durante la carga multiparte de OSS, cada parte tiene 10 MB (que también es la granularidad mínima para la rotación de registros, lo que significa que cualquier valor de maxFileSize inferior a 10 MB se trata como 10 MB). Cada InitiateMultipartUploadRequest de OSS admite un máximo de 10 000 partes.

Cuando ocurre la rotación, el nombre del objeto se genera agregando sufijos como _1,_2,_3 al prefijo original del objeto junto con una cadena aleatoria basada en UUID.

Nota
  • La unidad predeterminada es MB.

  • Ejemplo de configuración: "maxFileSize":300 establece el tamaño máximo de un solo archivo en 300 MB.

  • maxFileSize solo surte efecto para los formatos CSV y TEXT. El tamaño del archivo se calcula en el nivel de memoria del proceso de la tarea de sincronización y no puede controlar con precisión el tamaño real de los archivos escritos en el destino. Durante el proceso de escritura, la expansión de los datos puede provocar que el tamaño real del archivo supere el valor esperado.

No

100,000

suffix (configuración avanzada, no compatible con la interfaz sin código)

El sufijo que se agrega al nombre de archivo generado durante la escritura de la sincronización de datos. Por ejemplo, si establece suffix en .csv, el nombre final del archivo será fileName****.csv.

No

Ninguna

Apéndice: estrategias de conversión de tipos para datos Parquet

Si no configura parquetSchema, DataWorks convierte los tipos de campo de origen a tipos de datos Parquet según las siguientes estrategias.

Tipo de datos convertido

Tipo de Parquet

Tipo lógico de 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