Todos los productos
Search
Centro de documentos

DataWorks:Origen de datos de Tablestore

Última actualización: Sep 04, 2026

Tablestore es un servicio de almacenamiento NoSQL basado en Apsara Distributed File System de Alibaba Cloud. El origen de datos de Tablestore en DataWorks permite la sincronización bidireccional de datos con tablas de Tablestore.

Limitaciones

  • Los complementos Tablestore Reader y Writer leen y escriben datos en Tablestore. Estos complementos operan sobre tablas de columna ancha y series temporales en dos modos: row mode y column mode.

    • column mode: En el modelo de múltiples versiones de Tablestore, los datos se organizan en una estructura de tres niveles: Row > Column > Version. Una fila puede tener cualquier cantidad de columnas y los nombres de estas no son fijos. Cada columna admite varias versiones, y cada versión cuenta con una marca de tiempo específica que también funciona como número de versión. En column mode, los datos se exportan como una cuádrupla: (valor de clave primaria, nombre de columna, marca de tiempo, valor de columna). La importación de datos en este modo también utiliza el formato de cuádrupla: (valor de clave primaria, nombre de columna, marca de tiempo, valor de columna).

    • row mode: Este modo exporta cada registro actualizado como una fila con el formato (valor de clave primaria, valores de columna).

      En row mode, cada fila de datos corresponde a una sola fila en la tabla de Tablestore. Los datos escritos en este modo incluyen valores tanto para las columnas de clave primaria como para las columnas de atributos.

  • Las columnas de Tablestore se componen de columnas de clave primaria primaryKey y columnas de atributos column. El orden de las columnas de origen debe coincidir con el orden de las columnas de clave primaria y de atributos en la instancia de Tablestore de destino; de lo contrario, se producirá un error de asignación de columnas.

  • Tablestore Reader divide el rango de datos de una tabla en N tareas según el nivel de concurrencia especificado (N). Un hilo dedicado de Tablestore Reader ejecuta cada tarea.

  • Las tablas externas de MaxCompute no pueden leer directamente columnas de Tablestore que contengan tipos de datos mixtos; por ejemplo, una columna con valores STRING y DOUBLE simultáneamente. Si su tabla de Tablestore incluye este tipo de columnas, la importación mediante una tabla externa de MaxCompute fallará. Como alternativa, utilice la función de sincronización por lotes de tabla única en DataWorks Data Integration para sincronizar datos de Tablestore hacia MaxCompute.

    Al utilizar la sincronización por lotes de tabla única, el resource group de Data Integration requiere acceso de red a la VPC donde reside la instancia de Tablestore para poder leer los datos y ejecutar la tarea de sincronización. Esta solución no garantiza compatibilidad total para datos de tipos mixtos, por lo que podría ser necesario convertir o filtrar los tipos de datos mediante la asignación de columnas durante la sincronización. El uso de un resource group de Data Integration genera costos adicionales.

Tipos de columna compatibles

Tablestore Reader y Tablestore Writer admiten todos los tipos de datos de Tablestore. La siguiente tabla muestra las asignaciones de tipos compatibles.

Categoría de tipo

Tipo de dato de Tablestore

Entero

INTEGER

Punto flotante

DOUBLE

Cadena

STRING

Booleano

BOOLEAN

Binario

BINARY

Nota
  • Tablestore no admite de forma nativa el tipo de dato de fecha. Por lo general, la capa de aplicación utiliza un valor Long para almacenar la marca de tiempo Unix.

  • En modo script, configure el tipo de dato INTEGER como INT. DataWorks lo convierte automáticamente al tipo INTEGER. Si configura el tipo directamente como INTEGER, se registrará un error en los registros y la tarea fallará.

Agregar un origen de datos

Antes de desarrollar una tarea de sincronización en DataWorks, agregue el origen de datos correspondiente siguiendo las instrucciones en 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.

Desarrollar una tarea de sincronización de datos

Para obtener información sobre el punto de entrada y el procedimiento para configurar una tarea de sincronización, consulte las siguientes guías de configuración.

Lineamientos para configurar una tarea de sincronización por lotes de tabla única

Apéndice 1: Ejemplos de scripts del lector 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 según los requisitos unificados de formato. 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 al utilizar el editor de código en una tarea de sincronización por lotes.

Ejemplos de scripts del lector

Configuración en modo fila para leer tablas de columna ancha

{ "type":"job", "version":"2.0",// The version number. "steps":[ { "stepType":"ots",// The plugin name. "parameter":{ "datasource":"",// The data source. "newVersion":"true",// Use the new version of otsreader. "mode": "normal",// Read data in row mode. "isTimeseriesTable":"false",// Configure this table as a wide-column table (not a time-series table). "column":[// The columns. { "name":"column1"// The column name. }, { "name":"column2" }, { "name":"column3" }, { "name":"column4" }, { "name":"column5" } ], "range":{ "split":[ { "type":"STRING", "value":"beginValue" }, { "type":"STRING", "value":"splitPoint1" }, { "type":"STRING", "value":"splitPoint2" }, { "type":"STRING", "value":"splitPoint3" }, { "type":"STRING", "value":"endValue" } ], "end":[ { "type":"STRING", "value":"endValue" }, { "type":"INT", "value":"100" }, { "type":"INF_MAX" }, { "type":"INF_MAX" } ], "begin":[ { "type":"STRING", "value":"beginValue" }, { "type":"INT", "value":"0" }, { "type":"INF_MIN" }, { "type":"INF_MIN" } ] }, "table":""// The table name. }, "name":"Reader", "category":"reader" }, { "stepType":"stream", "parameter":{}, "name":"Writer", "category":"writer" } ], "setting":{ "errorLimit":{ "record":"0"// The error count. }, "speed":{ "throttle":true,// false indicates that throttling is disabled and the throttling speed below does not take effect. true indicates that throttling is enabled. "concurrent":1 // The concurrency. "mbps":"12"// The throttling speed. } }, "order":{ "hops":[ { "from":"Reader", "to":"Writer" } ] } }

Configuración en modo fila para leer tablas de series temporales

{ "type":"job", "version":"2.0",// The version number. "steps":[ { "stepType":"ots",// The plugin name. "parameter":{ "datasource":"",// The data source. "table": "",// The table name. // mode must be set to normal for reading time-series data. "mode": "normal", // newVersion must be set to true for reading time-series data. "newVersion": "true", // Configure this table as a time-series table. "isTimeseriesTable":"true", // measurementName: The measurement name of the time-series data to read. This parameter is optional. If left empty, data from the entire table is read. "measurementName":"measurement_1", "column": [ { "name": "_m_name" }, { "name": "tagA", "is_timeseries_tag":"true" }, { "name": "double_0", "type":"DOUBLE" }, { "name": "string_0", "type":"STRING" }, { "name": "long_0", "type":"INT" }, { "name": "binary_0", "type":"BINARY" }, { "name": "bool_0", "type":"BOOL" }, { "type":"STRING", "value":"testString" } ] }, "name":"Reader", "category":"reader" }, { "stepType":"stream", "parameter":{}, "name":"Writer", "category":"writer" } ], "setting":{ "errorLimit":{ "record":"0"// The error count. }, "speed":{ "throttle":true,// false indicates that throttling is disabled and the throttling speed below does not take effect. true indicates that throttling is enabled. "concurrent":1 // The concurrency. "mbps":"12"// The throttling speed. } }, "order":{ "hops":[ { "from":"Reader", "to":"Writer" } ] } }

Configuración en modo columna para leer tablas de columna ancha

{ "type":"job", "version":"2.0",// The version number. "steps":[ { "stepType":"ots",// The plugin name. "parameter":{ "datasource":"",// The data source. "table":"",// The table name. "newVersion":"true",// The new version of otsreader. "mode": "multiversion",// The multi-version mode. "column":[// Configure the column names to export (must be non-primary key columns). {"name":"mobile"}, {"name":"name"}, {"name":"age"}, {"name":"salary"}, {"name":"marry"} ], "range":{// The export range. "begin":[ {"type":"INF_MIN"}, {"type":"INF_MAX"} ], "end":[ {"type":"INF_MAX"}, {"type":"INF_MIN"} ], "split":[ ] }, }, "name":"Reader", "category":"reader" }, { "stepType":"stream", "parameter":{}, "name":"Writer", "category":"writer" } ], "setting":{ "errorLimit":{ "record":"0"// The error count. }, "speed":{ "throttle":true,// false indicates that throttling is disabled and the throttling speed below does not take effect. true indicates that throttling is enabled. "concurrent":1 // The concurrency. "mbps":"12"// The throttling speed. } }, "order":{ "hops":[ { "from":"Reader", "to":"Writer" } ] } }

Parámetros comunes del script del lector

Parámetro

Descripción

Obligatorio

Valor predeterminado

endpoint

El endpoint (dirección del servicio) del servidor de Tablestore. Para obtener más información, consulte Endpoints.

Sí

N/A

accessId

El AccessKey ID de la instancia de Tablestore.

Sí

N/A

accessKey

El AccessKey Secret de la instancia de Tablestore.

Sí

N/A

instanceName

El nombre de la instancia de Tablestore. Una instancia es la entidad que se utiliza para gestionar el servicio Tablestore.

Después de activar el servicio Tablestore, debe crear una instancia en la consola y posteriormente crear y gestionar las tablas dentro de dicha instancia.

La instancia constituye la unidad básica para la gestión de recursos de Tablestore. El servicio aplica el control de acceso y la medición de recursos a nivel de instancia.

Sí

N/A

table

El nombre de la tabla de la cual extraer datos. Solo puede especificar una tabla, ya que Tablestore no admite la sincronización de varias tablas.

Sí

N/A

newVersion

Especifica la versión del plugin Tablestore Reader.

  • false: Versión heredada de Tablestore Reader, compatible únicamente con lectura en modo fila desde tablas de columna ancha.

  • true: Nueva versión de Tablestore Reader, compatible con modo fila, modo columna, tablas de series temporales y tablas de columna ancha.

La nueva versión de Tablestore Reader no solo incluye funciones adicionales, sino que también reduce la sobrecarga de recursos del sistema. Se recomienda utilizar esta versión actualizada.

El plugin de la nueva versión mantiene compatibilidad retroactiva con la configuración de la versión anterior. Puede agregar la configuración newVersion=true a las tareas existentes y estas se ejecutarán correctamente.

No

false

mode

Define el modo de lectura de datos. Se admiten dos modos:

  • normal: Lee datos en modo fila. El formato de los datos es {valores de columnas de clave principal, valores de columnas de atributos}.

  • multiVersion: Lee datos en modo columna. El formato de los datos es {columnas de clave principal, nombre de columna de atributo, marca de tiempo, valor de columna de atributo}.

Este parámetro solo surte efecto cuando se utiliza la nueva versión de Tablestore Reader (newVersion:true).

La versión heredada de Tablestore Reader ignora el parámetro mode y solo permite la lectura en modo fila.

No

normal

isTimeseriesTable

Indica si la tabla de datos corresponde a una tabla de series temporales:

  • false: La tabla es una tabla estándar de columna ancha.

  • true: La tabla es de series temporales.

Este parámetro solo tiene efecto cuando se configura newVersion:true & mode:normal.

La versión heredada de Tablestore Reader no es compatible con tablas de series temporales, y estas no pueden leerse en modo columna.

No

false

Parámetros adicionales del script del lector

Tablestore Reader permite leer tablas de columna ancha en modo fila, tablas de series temporales en modo fila y tablas de columna ancha en modo columna. Cada modo cuenta con sus propios parámetros adicionales.

Parámetros del modo fila para leer tablas de columna ancha

Parámetro

Descripción

Obligatorio

Valor predeterminado

column

Conjunto de nombres de columnas que se sincronizarán desde la tabla configurada, descrito mediante un arreglo JSON. Dado que Tablestore es un sistema NoSQL, es necesario especificar los nombres de las columnas durante la extracción de datos por parte de Tablestore Reader.

  • Se admite la lectura de columnas regulares; por ejemplo, {"name":"col1"}.

  • Se permite la lectura parcial de columnas. Si no configura una columna específica, Tablestore Reader la omitirá durante la lectura.

  • Se admite la lectura de columnas constantes; por ejemplo, {"type":"STRING", "value":"DataX"}. Puede usar el campo type para definir el tipo de la constante. Los tipos compatibles son: String, Int, Double, Bool, Binary (codificado en Base64), INF_MIN (valor mínimo definido por el sistema en Tablestore; si utiliza este valor, no especifique el atributo value, de lo contrario se generará un error) e INF_MAX (valor máximo definido por el sistema en Tablestore; si utiliza este valor, no especifique el atributo value, de lo contrario se generará un error).

  • No se admiten funciones ni expresiones personalizadas. Como Tablestore no ofrece capacidades de funciones o expresiones similares a SQL, Tablestore Reader no puede proporcionar características de columnas basadas en funciones o expresiones.

Sí

N/A

begin y end

Los parámetros begin y end definen el intervalo de datos que se extraerá de la tabla de Tablestore.

begin y end describen la distribución de intervalos de la PrimaryKey de Tablestore. Para intervalos infinitos, puede emplear {"type":"INF_MIN"} y {"type":"INF_MAX"} para begin y end respectivamente, donde type indica el tipo de dato a extraer.

Nota
  • Los valores predeterminados para begin y end son [INF_MIN,INF_MAX), lo que implica la lectura de todos los datos.

  • Cuando la cantidad de valores configurados para begin y end es menor que el número de columnas de clave principal, según lo indicado en leftmost primary key matching principle, el intervalo para las columnas de clave principal no configuradas toma por defecto el valor [INF_MIN,INF_MAX).

  • Si solo se configura uno de los parámetros, ya sea begin o end, el rango de datos exportados será [begin, INF_MAX) o [INF_MIN, end).

  • Si existe una sola columna de clave principal, los valores de begin y end siguen la regla de intervalo cerrado a la izquierda y abierto a la derecha para la exportación de datos.

  • Cuando hay múltiples columnas de clave principal, la última sigue la regla de intervalo cerrado a la izquierda y abierto a la derecha, mientras que las demás columnas de clave principal operan bajo un intervalo cerrado en ambos extremos.

Por ejemplo, para extraer datos de una tabla de Tablestore con tres columnas de clave principal [Centenas, Decenas, Unidades], cuyos valores de clave principal van desde (0.0.0)(0.0.1)(0.0.2)(0.0.3)......(9.9.8)(9.9.9), sumando un total de 1,000 filas, las configuraciones de begin y end serían las siguientes.

  • Ejemplo 1: Extraer datos donde Centenas oscila entre [3, 5] y Decenas entre [4, 6]. Las claves principales extraídas incluyen (3.4.0)(3.4.1)...(4.4.0),(4.0.1)...(5.6.8)(5.6.9). La configuración es la siguiente:

    "range": {
              "begin": [
                {"type":"INT", "value":"3"},  // Specify the minimum value of Hundreds.
                {"type":"INT", "value":"4"}  // Specify the minimum value of Tens.
              ],
              "end": [
                {"type":"INT", "value":"5"}, // Specify the maximum value of Hundreds.
                {"type":"INT", "value":"6"} // Specify the maximum value of Tens.
              ]
            }
  • Ejemplo 2: Extraer datos donde Centenas varía entre [3, 5], Decenas entre [4, 6] y Unidades entre [5,7). Las claves principales extraídas incluyen (3.4.5)(3.4.6)...(4.4.5),(4.4.6)...(5.6.5)(5.6.6). La configuración es la siguiente:

    "range": {
              "begin": [
                {"type":"INT", "value":"3"},  // Specify the minimum value of Hundreds.
                {"type":"INT", "value":"4"},  // Specify the minimum value of Tens.
                {"type":"INT", "value":"5"}  // Specify the minimum value of Ones.
              ],
              "end": [
                {"type":"INT", "value":"5"}, // Specify the maximum value of Hundreds.
                {"type":"INT", "value":"6"}, // Specify the maximum value of Tens.
                {"type":"INT", "value":"7"}  // Specify the maximum value of Ones.
              ]
            }

No

(INF_MIN, INF_MAX)

split

Se trata de un parámetro de configuración avanzada que le permite definir divisiones personalizadas. No se recomienda su uso en escenarios generales.

Al configurar el parámetro split, puede establecer rangos de datos personalizados para la fragmentación. Esto suele aplicarse cuando surgen puntos críticos (hotspots) en el almacenamiento de datos de Tablestore. A continuación se muestra un ejemplo de configuración de tarea:

{
  "range": {
    "begin": [{"type": "INF_MIN"}],
    "end":   [{"type": "INF_MAX"}],
    "split": [
      {"type": "STRING","value": "1"},
      {"type": "STRING","value": "2"},
      {"type": "STRING","value": "3"},
      {"type": "STRING","value": "4"},
      {"type": "STRING","value": "5"}
    ]
  }

Durante la ejecución, los datos se dividen en 6 segmentos que se leen de forma concurrente. Se recomienda que la cantidad de segmentos sea mayor que la concurrencia de la tarea.

// Segment 1
[MIN, 1)
// Segment 2
[1, 2)
// Segment 3
[2, 3)
// Segment 4
[3, 4)
// Segment 5
[4, 5)
// Segment 6
[5, MAX)

No

Si no se configura el parámetro split, se aplica la lógica de división automática.

Dicha lógica identifica los valores máximo y mínimo de la Partition Key y realiza una segmentación uniforme.

La Partition Key admite tipos enteros y de cadena. Las claves enteras utilizan división entera para la segmentación, mientras que las claves de cadena emplean el código Unicode del primer carácter.

Parámetros del modo fila para leer tablas de series temporales

Parámetro

Descripción

Obligatorio

Valor predeterminado

column

column es un arreglo donde cada elemento representa una columna. Puede configurar tanto columnas constantes como regulares.

Para las columnas constantes, configure los siguientes campos:

  • type: Tipo de valor de la columna. Este campo es obligatorio. Tipos compatibles: string, int, double, bool y binary.

  • value: Valor de la columna. Este campo es obligatorio.

Para las columnas regulares, configure los siguientes campos:

  • name: Nombre de la columna. Este campo es obligatorio. Están disponibles los siguientes campos predefinidos:

    • El nombre de la medición de la serie temporal se identifica mediante _m_name. El tipo de dato es String.

    • El origen de datos de la serie temporal se identifica mediante _data_source. El tipo de dato es String.

    • Las etiquetas de la serie temporal se identifican mediante _tags. El tipo de dato es String.

    • La marca de tiempo de la serie temporal se identifica mediante _time. El tipo de dato es Long.

  • is_timeseries_tag: Indica si la columna corresponde a un par clave-valor dentro del campo de etiquetas. Campo opcional. Valor predeterminado: false.

  • type: Tipo de valor de la columna. Campo opcional. Valor predeterminado: string. Tipos compatibles: string, int, double, bool y binary.

Ejemplo de script para leer cuatro columnas:

"column": [
  {
    "name": "_m_name"               // Measurement name field of the time series
  },
  {
    "name": "tag_key",                // Value corresponding to tag_key in the tag field of the time series
    "is_timeseries_tag":"true"
  },
  {
    "name": "string_column",        // Column named string_column in fields
    "type":"string"                    // with data type string
  },
  {
    "value": "constant_value",        // Constant column with a fixed value of "constant_value"
    "type":"string"
  }
],

Sí

N/A

measurementName

Nombre de la medición de la serie temporal que se va a leer. Si no se configura este parámetro, se leerán los datos de toda la tabla.

No

N/A

timeRange

Intervalo de tiempo de los datos a leer. Corresponde a [begin, end), un intervalo cerrado a la izquierda y abierto a la derecha, donde begin debe ser menor que end. La unidad de la marca de tiempo es microsegundos. El formato es el siguiente:

"timeRange":{
    // begin: optional, defaults to 0, valid range is 0~LONG_MAX
    "begin":1400000000000,
    // end: optional, defaults to Long Max (9223372036854775807L), valid range is 0~LONG_MAX
    "end"  :1600000000000
},

No

Todas las versiones

Parámetros del modo columna para leer tablas de columna ancha

Parámetro

Descripción

Obligatorio

Valor predeterminado

column

Especifica las columnas a exportar. En modo columna solo se admiten columnas regulares.

Formato:

"column": [
    {"name1":"{your column name1}"},
    {"name2":"{your column name2}"}
],
Nota
  • El modo columna no admite columnas constantes.

  • No es posible especificar columnas de clave principal. La cuádrupla exportada incluye la clave principal completa de forma predeterminada.

  • No se permiten especificaciones de columnas duplicadas.

Sí

Todas las columnas

range

Rango de datos a leer. Corresponde a [begin, end), un intervalo cerrado a la izquierda y abierto a la derecha, donde:

  • Si begin es menor que end, los datos se leen en orden ascendente.

  • Si begin es mayor que end, los datos se leen en orden descendente.

  • begin y end no pueden ser iguales.

El campo type admite los siguientes tipos:

  • string

  • int

  • binary: El valor se introduce como una cadena binaria codificada en Base64.

  • INF_MIN: Representa el valor mínimo posible.

  • INF_MAX: Representa el valor máximo posible.

Formato:

"range":{
    // Optional, defaults to reading from the smallest value
    // The input can be an empty array, a PK prefix, or a complete PK. When reading data in forward order, PK suffix is padded with INF_MIN by default; in reverse order, INF_MAX
    // Examples:
    // If the table has 2 PKs with types string and int respectively, the following 3 inputs are all valid:
    //1. Read from the beginning of the table -> to the end of the table:
    //"begin":[],"end":[],
    //2. Read from first PK value "a" and the minimum of the second PK -> to first PK value "b" and the maximum of the second PK:
    //"begin":[{"type":"string", "value":"a"}],"end":[{"type":"string", "value":"b"}],
    //3. Read from first PK value "a" and the minimum of the second PK -> to the end of the table:
    //"begin":[{"type":"string", "value":"a"},{"type":"INF_MIN"}],"end":[],    
    //
    // Binary type PK columns are special because JSON does not support direct binary input, so the system requires:
    // To pass binary data, you must use (Java) Base64.encodeBase64String method to convert the binary into a visible string, then fill this string into the value
    // Example (Java):
    //   byte[] bytes = "hello".getBytes();  # Construct binary data, here using the byte value of the string hello
    //   String inputValue = Base64.encodeBase64String(bytes) # Call the Base64 method to convert binary into a visible string
    //   After executing the above code, inputValue will be "aGVsbG8="
    //   Final configuration: {"type":"binary","value" : "aGVsbG8="}

    "begin":[{"type":"string", "value":"a"},{"type":"INF_MIN"}],

    // Defaults to reading until the largest value
    // The input can be an empty array, a PK prefix, or a complete PK. When reading data in forward order, PK suffix is padded with INF_MAX by default; in reverse order, INF_MIN
    // Optional
    "end":[{"type":"string", "value":"g"},{"type":"INF_MAX"}],

    // When the data volume is large, concurrent export needs to be enabled. Split can divide the data in the current range into multiple concurrent tasks based on split points
    // Optional
    //   1. The input values in split can only be the first column of the PK (partition key), and the value type must be consistent with the PartitionKey
    //   2. The value range must be between begin and end
    //   3. The values within split must be in ascending or descending order according to the forward/reverse order relationship of begin and end
    "split":[{"type":"string", "value":"b"}, {"type":"string", "value":"c"}]
},

No

Todos los datos

timeRange

Intervalo de tiempo de los datos a leer. Corresponde a [begin, end), un intervalo cerrado a la izquierda y abierto a la derecha, donde begin debe ser menor que end. La unidad de la marca de tiempo es microsegundos.

Formato:

"timeRange":{
    // begin: Optional. Default value: 0. Value range: 0 to LONG_MAX.
    "begin":1400000000000,
    // end: Optional. Default value: Long Max (9223372036854775807L). Value range: 0 to LONG_MAX.
    "end"  :1600000000000
},

No

Todas las versiones

maxVersion

Número máximo de versiones de datos a solicitar. El rango de valores válidos va de 1 a INT32_MAX.

No

Todas las versiones

Apéndice 2: Ejemplos de scripts de Writer 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 configurar los parámetros correspondientes en el script según 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 al utilizar el editor de código para tareas de sincronización por lotes.

Ejemplos de scripts de Writer

Configuración en modo fila para escritura en tablas de columna ancha

{ "type":"job", "version":"2.0",// The version number. "steps":[ { "stepType":"stream", "parameter":{}, "name":"Reader", "category":"reader" }, { "stepType":"ots",// The plugin name. "parameter":{ "datasource":"",// The data source. "table":"",// The table name. "newVersion":"true",// Use the new version of otswriter. "mode": "normal",// Write data in row mode. "isTimeseriesTable":"false",// Configure this table as a wide-column table (not a time-series table). "primaryKey" : [// The primary key information of the Tablestore table. {"name":"gid", "type":"INT"}, {"name":"uid", "type":"STRING"} ], "column" : [// The columns. {"name":"col1", "type":"INT"}, {"name":"col2", "type":"DOUBLE"}, {"name":"col3", "type":"STRING"}, {"name":"col4", "type":"STRING"}, {"name":"col5", "type":"BOOL"} ], "writeMode" : "PutRow" // The write mode. }, "name":"Writer", "category":"writer" } ], "setting":{ "errorLimit":{ "record":"0"// The error count. }, "speed":{ "throttle":true,// When throttle is set to false, the mbps parameter does not take effect, indicating no throttling. When throttle is set to true, throttling is enabled. "concurrent":1, // The concurrency. "mbps":"12"// The throttling speed. 1 mbps = 1 MB/s. } }, "order":{ "hops":[ { "from":"Reader", "to":"Writer" } ] } }

Configuración en modo fila para escritura en tablas de series temporales

{ "type":"job", "version":"2.0",// The version number. "steps":[ { "stepType":"stream", "parameter":{}, "name":"Reader", "category":"reader" }, { "stepType":"ots",// The plugin name. "parameter":{ "datasource":"",// The data source. "table": "testTimeseriesTableName01", "mode": "normal", "newVersion": "true", "isTimeseriesTable":"true", "timeunit":"microseconds", "column": [ { "name": "_m_name" }, { "name": "_data_source", }, { "name": "_tags", }, { "name": "_time", }, { "name": "string_1", "type":"string" }, { "name":"tag3", "is_timeseries_tag":"true", } ] }, "name":"Writer", "category":"writer" } ], "setting":{ "errorLimit":{ "record":"0"// The error count. }, "speed":{ "throttle":true,// When throttle is set to false, the mbps parameter does not take effect, indicating no throttling. When throttle is set to true, throttling is enabled. "concurrent":1, // The concurrency. "mbps":"12"// The throttling speed. 1 mbps = 1 MB/s. } }, "order":{ "hops":[ { "from":"Reader", "to":"Writer" } ] } }

Configuración en modo columna para escritura en tablas de columna ancha

{ "type":"job", "version":"2.0",// The version number. "steps":[ { "stepType":"stream", "parameter":{}, "name":"Reader", "category":"reader" }, { "stepType":"ots",// The plugin name. "parameter":{ "datasource":"",// The data source. "table":"", "newVersion":"true", "mode":"multiVersion", "primaryKey" : [ "gid", "uid" ] }, "name":"Writer", "category":"writer" } ], "setting":{ "errorLimit":{ "record":"0"// The error count. },x` "speed":{ "throttle":true,// When throttle is set to false, the mbps parameter does not take effect, indicating no throttling. When throttle is set to true, throttling is enabled. "concurrent":1, // The concurrency. "mbps":"12"// The throttling speed. 1 mbps = 1 MB/s. } }, "order":{ "hops":[ { "from":"Reader", "to":"Writer" } ] } }

Parámetros comunes del script de Writer

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/A

endPoint

Endpoint (dirección del servicio) del servidor de Tablestore. Para obtener más información, consulte Endpoints.

Sí

N/A

accessId

AccessKey ID de la instancia de Tablestore.

Sí

N/A

accessKey

AccessKey Secret de la instancia de Tablestore.

Sí

N/A

instanceName

Nombre de la instancia de Tablestore. Una instancia es la entidad que se utiliza para gestionar el servicio Tablestore.

Después de activar el servicio Tablestore, debe crear una instancia en la consola y luego crear y gestionar tablas dentro de dicha instancia. La instancia es la unidad básica para la gestión de recursos de Tablestore. Tablestore aplica el control de acceso y la medición de recursos a nivel de instancia.

Sí

N/A

table

Nombre de la tabla donde se escribirán los datos. Solo puede especificar una tabla. Tablestore no admite la sincronización de múltiples tablas.

Sí

N/A

newVersion

Especifica la versión del plugin Tablestore Writer.

  • false: Versión anterior de Tablestore Writer, que solo admite escritura en tablas de columna ancha en modo fila.

  • true: Nueva versión de Tablestore Writer, compatible con modo fila, modo columna, tablas de series temporales y tablas de columna ancha; también admite la función de clave principal de incremento automático.

La nueva versión de Tablestore Writer no solo incluye nuevas funciones, sino que también reduce la sobrecarga de recursos del sistema. Se recomienda utilizar esta versión actualizada.

El plugin de la nueva versión mantiene la compatibilidad con la configuración de la versión anterior. Puede agregar la configuración newVersion=true a las tareas existentes y estas se ejecutarán correctamente.

Sí

false

mode

Especifica el modo de escritura de datos. Se admiten dos modos:

  • normal: Escribe datos en formato estándar (modo fila).

  • multiVersion: Escribe datos en formato multiversión (modo columna).

Este parámetro solo surte efecto cuando se configura newVersion:true.

La versión anterior de Tablestore Writer ignora el parámetro mode y solo admite escritura en modo fila.

No

normal

isTimeseriesTable

Especifica si la tabla de datos es una tabla de series temporales.

  • false: La tabla es una tabla estándar de columna ancha.

  • true: La tabla es una tabla de series temporales.

Este parámetro solo surte efecto cuando se configura newVersion:true & mode:normal (el modo columna no es compatible con tablas de series temporales).

No

false

Parámetros adicionales del script de Writer

Tablestore Writer admite la escritura en tablas de columna ancha en modo fila, en tablas de series temporales en modo fila y en tablas de columna ancha en modo columna. Cada modo cuenta con sus propios parámetros adicionales.

Parámetros del modo fila para escritura en tablas de columna ancha

Parámetro

Descripción

Obligatorio

Valor predeterminado

primaryKey

Información de la clave principal de la tabla de Tablestore, descrita mediante un array JSON. Dado que Tablestore es un sistema NoSQL, debe especificar los nombres de las columnas durante la importación de datos mediante Tablestore Writer.

El sistema de sincronización de datos admite conversión de tipos, por lo que Tablestore Writer realiza la conversión de tipos de datos para los datos de origen que no son STRING o INT. Ejemplo de configuración:

"primaryKey" : [
    {"name":"gid", "type":"INT"},
    {"name":"uid", "type":"STRING"}
                 ],
Nota

PrimaryKey de Tablestore solo admite los tipos STRING e INT. Por lo tanto, Tablestore Writer únicamente acepta estos dos tipos.

Sí

N/A

column

Conjunto de nombres de columnas que se sincronizarán desde la tabla configurada, descrito mediante un array JSON.

Ejemplo de configuración:

"column" : [
     {"name":"col1", "type":"INT"},
     {"name":"col2", "type":"DOUBLE"},
     {"name":"col3", "type":"STRING"},
     {"name":"col4", "type":"BINARY"},
     {"name":"col5", "type":"BOOL"}
              ],

El campo name especifica el nombre de la columna de Tablestore donde se escribirá, mientras que el campo type indica el tipo de dato a escribir. Tablestore admite los tipos STRING, INT, DOUBLE, BOOL y BINARY.

Nota

No se admiten constantes, funciones ni expresiones personalizadas durante la escritura.

Sí

N/A

writeMode

Modo para escribir datos en Tablestore. Se admiten los siguientes dos modos:

  • PutRow: Corresponde a la API PutRow de Tablestore. Este modo inserta datos en la fila especificada. Si la fila no existe, se agrega una nueva. Si ya existe, se sobrescribe la fila existente.

  • UpdateRow: Corresponde a la API UpdateRow de Tablestore. Este modo actualiza los datos de la fila especificada. Si la fila no existe, se agrega una nueva. Si ya existe, los valores de las columnas especificadas se agregan, modifican o eliminan según el contenido de la solicitud.

Sí

N/A

enableAutoIncrement

Especifica si se permite escribir datos en una tabla de Tablestore que contiene columnas de clave principal de incremento automático.

  • true: El plugin detecta automáticamente la información de la columna de incremento automático en la tabla de destino y la incluye durante la escritura de datos (no es necesario configurar el nombre de la columna de incremento automático).

  • false: Se reporta un error al intentar escribir en una tabla que contiene columnas de clave principal de incremento automático.

No

false

requestTotalSizeLimitation

Este parámetro limita el tamaño de una sola fila de datos al escribir en Tablestore. El tipo de configuración es numérico.

No

1MB

attributeColumnSizeLimitation

Este parámetro limita el tamaño de una sola columna de atributo al escribir en Tablestore. El tipo de configuración es numérico.

No

2MB

primaryKeyColumnSizeLimitation

Este parámetro limita el tamaño de una sola columna de clave principal al escribir en Tablestore. El tipo de configuración es numérico.

No

1KB

attributeColumnMaxCount

Este parámetro limita el número de columnas de atributo al escribir en Tablestore. El tipo de configuración es numérico.

No

1,024

Parámetros del modo fila para escritura en tablas de series temporales

Parámetro

Descripción

Obligatorio

Valor predeterminado

column

Cada elemento del array de columnas corresponde a un campo en los datos de series temporales. Cada elemento se puede configurar con los siguientes parámetros:

  • name: Nombre de la columna. Este campo es obligatorio. Están disponibles los siguientes campos predefinidos:

    • El nombre de la métrica de la serie temporal se identifica mediante _m_name. El tipo de dato es String.

    • El origen de datos de la serie temporal se identifica mediante _data_source. El tipo de dato es String.

    • Las etiquetas de la serie temporal se identifican mediante _tags. El tipo de dato es String. El formato de la cadena es ["tagKey1=value1","tagKey2=value2"].

    • La marca de tiempo de la serie temporal se identifica mediante _time. El tipo de dato es Long. La unidad predeterminada es microsegundos.

  • is_timeseries_tag: Especifica si la columna es un par clave-valor dentro del campo de etiquetas. Este campo es opcional. Valor predeterminado: false.

  • type: Tipo de valor de la columna. Este campo es opcional. Valor predeterminado: string. Tipos admitidos: string, int, double, bool y binary.

Dado que el nombre de la métrica y la marca de tiempo de los datos de series temporales no pueden estar vacíos, debe configurar los campos _m_name y _time.

Ejemplo: Un registro de datos para escribir contiene seis campos:

mName1    source1    ["tag1=A","tag2=B"]    1677763080000000    field_value     C

Utilice la siguiente configuración:

"column": [
      {
        "name": "_m_name"
      },
      {
        "name": "_data_source",
      },
      {
        "name": "_tags",
      },
      {
        "name": "_time",
      },
      {
        "name": "string_1",
        "type":"string"
      },
      {
        "name":"tag3",
        "is_timeseries_tag":"true",
      }
    ],

Sí

N/A

timeunit

Unidad del campo de marca de tiempo _time. Valores admitidos: NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS y MINUTES.

No

MICROSECONDS

Parámetros del modo columna para escritura en tablas de columna ancha

Parámetro

Descripción

Obligatorio

Valor predeterminado

primaryKey

Columnas de clave principal de la tabla.

Para reducir la sobrecarga de configuración, no es necesario especificar la posición de primaryKey en el registro (línea). Sin embargo, el formato del registro debe ser fijo: primaryKey debe ir al inicio de la fila, seguido por primaryKey y luego columnName. El formato del registro es: {pk0,pk1...}, {columnName}, {timestamp}, {value}.

Por ejemplo, dados los siguientes 9 registros de datos:

1,pk1,row1,1677699863871,value_0_0
                      
Ejemplo de configuración:
1,pk1,row2,1677699863871,value_0_1
1,pk1,row3,1677699863871,value_0_2
2,pk2,row1,1677699863871,value_1_0
2,pk2,row2,1677699863871,value_1_1
2,pk2,row3,1677699863871,value_1_2
3,pk3,row1,1677699863871,value_2_0
3,pk3,row2,1677699863871,value_2_1
3,pk3,row3,1677699863871,value_2_2
"primaryKey" : [
    "gid",
    "uid"
    ],

Resultado de escritura en formato de fila ancha:

gid     uid     row1        row2        row3
1        pk1        value_0_0    value_0_1    value_0_2
2        pk2        value_1_0    value_1_1    value_1_2
3        pk3        value_2_0    value_2_1    value_2_2

Sí

N/A

columnNamePrefixFilter

Filtro de prefijo de nombre de columna.

Para los datos importados desde HBase, cf y qulifier forman conjuntamente el columnName. Sin embargo, Tablestore no admite cf, por lo que es necesario filtrar el prefijo cf.

Ejemplo de configuración: "columnNamePrefixFilter":"cf:"

Nota
  • Este parámetro es opcional. Si no se especifica o si el valor es una cadena vacía, no se realiza ningún filtrado de nombres de columna.

  • Si la columna columnName de los datos agregados mediante Data Integration no comienza con el prefijo especificado, el registro se envía al recolector de datos sucios.

No

N/A

Preguntas frecuentes

  • P: ¿Cómo configuro Tablestore Writer para escribir datos en una tabla de destino que contiene columnas de clave principal de incremento automático?

    1. La configuración de Tablestore Writer debe cumplir con los siguientes dos requisitos:

      "newVersion": "true",
      "enableAutoIncrement": "true",
    2. No configure el nombre de la columna de clave principal de incremento automático en Tablestore Writer.

    3. La suma de las entradas primaryKey y las entradas column configuradas en Tablestore Writer debe ser igual al número de columnas en los datos del Tablestore Reader ascendente.

  • P: En la configuración del modelo de series temporales, ¿cómo debo interpretar los campos _tag y is_timeseries_tag?

    Ejemplo: Un registro de datos tiene tres etiquetas: [phone=Xiaomi, RAM=8G, camera=Leica].

    • Ejemplo de exportación de datos (Tablestore Reader)

      • Si desea combinar las etiquetas anteriores en una sola columna para la exportación, utilice la siguiente configuración:

        "column": [
              {
                "name": "_tags",
              }
            ],

        DataWorks exporta las etiquetas como una sola columna de datos con el siguiente formato:

        ["phone=xiaomi","camera=LEICA","RAM=8G"]
      • Si desea exportar la etiqueta phone y la etiqueta camera, con cada etiqueta exportada como una columna separada, utilice la siguiente configuración:

        "column": [
              {
                "name": "phone",
                "is_timeseries_tag":"true",
              },
              {
                "name": "camera",
                "is_timeseries_tag":"true",
              }
            ],

        DataWorks exporta dos columnas de datos con el siguiente formato:

        xiaomi, LEICA
    • Ejemplo de importación de datos (Tablestore Writer)

      El origen de datos ascendente (Reader) tiene dos columnas de datos:

      • Una columna contiene: ["phone=xiaomi","camera=LEICA","RAM=8G"].

      • La otra columna contiene: 6499.

      Para agregar ambas columnas al campo de etiquetas, el formato esperado del campo de etiquetas después de la escritura es el siguiente: Format Utilice la siguiente configuración:

      "column": [
            {
              "name": "_tags",
            },
            {
              "name": "price",
              "is_timeseries_tag":"true",
            },
          ],
      • La configuración de la primera columna importa ["phone=xiaomi","camera=LEICA","RAM=8G"] en su totalidad al campo de etiquetas.

      • La configuración de la segunda columna importa price=6499 individualmente al campo de etiquetas.