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 |
|
|
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 |
|
|
|
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.
Para crear un origen de datos de OSS entre distintas cuentas de Alibaba Cloud, debe otorgar los permisos necesarios a las cuentas correspondientes. Para obtener más información, consulte Use bucket policies to grant cross-account access to OSS.
Si utiliza el modo de autorización basado en roles de RAM para configurar un origen de datos de OSS, consulte RAM role-based authorization: Configure a data source para obtener más información.
Para crear un origen de datos de OSS entre regiones, se recomienda utilizar el endpoint público. Para obtener más información, consulte Access domains and network connectivity.
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
Para consultar el procedimiento, vea Codeless UI configuration y Script mode configuration.
Para ver todos los parámetros y ejemplos de script disponibles en modo script, consulte Appendix: script demos and parameter description a continuación.
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
Importante
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:
|
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.
El formato de configuración de parquetSchema se describe a continuación:
A continuación se muestra un ejemplo de configuración.
|
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.
Puede especificar la información de los campos de columna. La configuración es la siguiente.
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:
|
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 |
No |
N/D |
|
maxLastModified |
Sincroniza únicamente los archivos cuya última hora de modificación sea anterior a la hora indicada. El formato es |
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:
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 no desea un sufijo UUID aleatorio, se recomienda establecer |
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:
|
Sí |
Ninguna |
|
writeSingleObject |
Especifica si los datos se escriben en un solo archivo durante la escritura en OSS:
Nota
|
No |
false |
|
fileFormat |
El formato del archivo de salida. Se admiten los siguientes formatos:
|
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.
Los elementos de configuración se describen a continuación:
Nota
Cada definición de columna debe terminar con un punto y coma, incluida la última línea. Ejemplo:
|
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 |
No |
Ninguna |
|
header |
La fila de encabezado al escribir en OSS. Ejemplo: |
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
|
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 |