Todos os produtos
Search
Central de documentação

DataWorks:Fonte de dados do Tablestore

Última atualização: Jul 03, 2026

O Tablestore é um serviço de armazenamento NoSQL baseado no Apsara Distributed File System da Alibaba Cloud. A fonte de dados do Tablestore no DataWorks permite a sincronização bidirecional de dados. Este tópico descreve os recursos de sincronização de dados do Tablestore compatíveis com o DataWorks.

Limitações

  • Os plugins Tablestore Reader e Writer leem e gravam dados no Tablestore. Esses plugins operam em tabelas de colunas largas e de séries temporais em dois modos: modo de linha e modo de coluna.

    • Modo de coluna: No modelo de múltiplas versões do Tablestore, os dados são organizados em uma estrutura de três níveis: Row > Column > Version. Uma linha pode ter qualquer número de colunas, e os nomes das colunas não são fixos. Cada coluna pode ter várias versões, e cada versão possui um carimbo de data/hora específico, que também serve como número da versão. No modo de coluna, os dados são exportados como uma tupla de quatro elementos: (valor da chave primária, nome da coluna, carimbo de data/hora, valor da coluna). A importação de dados nesse modo também utiliza o formato de tupla de quatro elementos: (valor da chave primária, nome da coluna, carimbo de data/hora, valor da coluna).

    • Modo de linha: Este modo exporta cada registro atualizado como uma linha no formato (valor da chave primária, valores das colunas).

      No modo de linha, cada linha de dados corresponde a uma única linha na tabela do Tablestore. Os dados gravados incluem valores tanto para as colunas de chave primária quanto para as colunas de atributo.

  • As colunas do Tablestore consistem em colunas de chave primária primaryKey e colunas de atributo column. A ordem das colunas de source deve corresponder à ordem das colunas de chave primária e de atributo no Tablestore de destino. Caso contrário, ocorrerá um erro de mapeamento de colunas.

  • O Tablestore Reader divide o intervalo de dados de uma tabela em N tarefas com base em um nível de simultaneidade especificado, N. Um thread dedicado do Tablestore Reader executa cada tarefa.

  • Tabelas externas do MaxCompute não conseguem ler diretamente colunas do Tablestore que contêm tipos de dados mistos, por exemplo, uma coluna com valores STRING e DOUBLE. Se sua tabela do Tablestore possuir tais colunas, a importação de dados via tabela externa do MaxCompute falhará. Como alternativa, utilize o recurso de sincronização em lote de tabela única no DataWorks Data Integration para sincronizar dados do Tablestore para o MaxCompute.

    Ao usar a sincronização em lote de tabela única, o grupo de recursos do Data Integration precisa ter acesso à rede da VPC onde a instância do Tablestore reside para ler dados e executar a tarefa de sincronização. Essa solução alternativa não garante compatibilidade total para dados de tipos mistos. Talvez seja necessário converter ou filtrar tipos de dados usando mapeamento de colunas durante a sincronização. O uso de um grupo de recursos do Data Integration gera taxas adicionais.

Tipos de coluna compatíveis

O Tablestore Reader e o Tablestore Writer são compatíveis com todos os tipos de dados do Tablestore. A tabela a seguir lista os mapeamentos de tipos para o Tablestore.

Categoria de tipo

Tipo de dado do Tablestore

Inteiro

INTEGER

Ponto flutuante

DOUBLE

String

STRING

Booleano

BOOLEAN

Binário

BINARY

Nota
  • O Tablestore não oferece suporte nativo ao tipo de dado data. A camada de aplicação geralmente usa um valor Long para armazenar o carimbo de data/hora Unix.

  • Configure o tipo de dado INTEGER como INT no modo de script. O DataWorks o converte para o tipo INTEGER. Se você configurar o tipo diretamente como INTEGER, um erro será relatado nos logs e a tarefa falhará.

Adicionar uma fonte de dados

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

Desenvolver uma tarefa de sincronização de dados

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

Diretrizes para configurar uma tarefa de sincronização em lote de tabela única

Apêndice 1: Exemplos de script do Reader e descrição de parâmetros

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

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

Exemplos de script do Reader

Configuração do modo de linha para leitura de tabelas de colunas largas

{ "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" } ] } }

Configuração do modo de linha para leitura de tabelas de séries temporais

{ "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" } ] } }

Configuração do modo de coluna para leitura de tabelas de colunas largas

{ "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 comuns do script do Reader

Parâmetro

Descrição

Obrigatório

Valor padrão

endpoint

O endpoint (endereço de serviço) do servidor Tablestore. Para mais informações, consulte Endpoints.

Sim

N/A

accessId

O AccessKey ID da instância do Tablestore.

Sim

N/A

accessKey

O AccessKey Secret da instância do Tablestore.

Sim

N/A

instanceName

Nome da instância do Tablestore. A instância é a entidade usada para gerenciar o serviço Tablestore.

Após ativar o serviço Tablestore, crie uma instância no console e, em seguida, crie e gerencie tabelas dentro dessa instância.

A instância é a unidade básica para gerenciamento de recursos do Tablestore. O controle de acesso e a medição de recursos ocorrem no nível da instância.

Sim

N/A

table

Nome da tabela de onde extrair dados. Especifique apenas uma tabela. O Tablestore não suporta sincronização de múltiplas tabelas.

Sim

N/A

newVersion

Versão do plugin Tablestore Reader.

  • false: Tablestore Reader legado, compatível apenas com leitura em modo de linha de tabelas de colunas largas.

  • true: Novo Tablestore Reader, compatível com modo de linha, modo de coluna, tabelas de séries temporais e tabelas de colunas largas.

Além de oferecer novos recursos, o novo Tablestore Reader apresenta menor sobrecarga de recursos do sistema. Recomendamos o uso desta versão atualizada.

O plugin da nova versão é retrocompatível com a configuração da versão legada. Adicione a configuração newVersion=true às tarefas existentes e elas serão executadas normalmente.

Não

false

mode

Modo de leitura de dados. Dois modos são suportados:

  • normal: Lê dados no modo de linha. O formato dos dados é {valores das colunas de chave primária, valores das colunas de atributo}.

  • multiVersion: Lê dados no modo de coluna. O formato dos dados é {colunas de chave primária, nome da coluna de atributo, carimbo de data/hora, valor da coluna de atributo}.

Este parâmetro só tem efeito quando o novo Tablestore Reader é utilizado (newVersion:true).

O Tablestore Reader legado ignora o parâmetro mode e suporta apenas leitura no modo de linha.

Não

normal

isTimeseriesTable

Indica se a tabela de dados é uma tabela de séries temporais:

  • false: A tabela é uma tabela regular de colunas largas.

  • true: A tabela é uma tabela de séries temporais.

Este parâmetro só tem efeito quando newVersion:true & mode:normal estiver configurado.

O Tablestore Reader legado não suporta tabelas de séries temporais, e essas tabelas não podem ser lidas no modo de coluna.

Não

false

Parâmetros adicionais do script do Reader

O Tablestore Reader suporta a leitura de tabelas de colunas largas no modo de linha, a leitura de tabelas de séries temporais no modo de linha e a leitura de tabelas de colunas largas no modo de coluna. As seções a seguir descrevem os parâmetros adicionais para cada modo.

Parâmetros do modo de linha para leitura de tabelas de colunas largas

Parâmetro

Descrição

Obrigatório

Valor padrão

column

Conjunto de nomes de colunas a serem sincronizados da tabela configurada, descrito usando um array JSON. Como o Tablestore é um sistema NoSQL, especifique os nomes das colunas durante a extração de dados pelo Tablestore Reader.

  • Leitura de colunas regulares é suportada, por exemplo, {"name":"col1"}.

  • Leitura parcial de colunas é suportada. Se uma coluna não for configurada, o Tablestore Reader não a lerá.

  • Leitura de colunas constantes é suportada, por exemplo, {"type":"STRING", "value":"DataX"}. Use o campo type para descrever o tipo da constante. Os seguintes tipos são suportados: String, Int, Double, Bool, Binary (codificado em Base64), INF_MIN (o valor mínimo definido pelo sistema no Tablestore; ao usar este valor, não especifique o atributo value, caso contrário um erro será relatado) e INF_MAX (o valor máximo definido pelo sistema no Tablestore; ao usar este valor, não especifique o atributo value, caso contrário um erro será relatado).

  • Funções ou expressões personalizadas não são suportadas. Como o Tablestore não fornece funções semelhantes a SQL ou capacidades de expressão, o Tablestore Reader não pode oferecer recursos de colunas baseados em funções ou expressões.

Sim

N/A

begin e end

Os parâmetros begin e end especificam o intervalo de dados a serem extraídos da tabela do Tablestore.

begin e end descrevem a distribuição de intervalos da PrimaryKey do Tablestore. Para intervalos infinitos, use {"type":"INF_MIN"} e {"type":"INF_MAX"} para begin e end respectivamente, onde type indica o tipo de dado a ser extraído.

Nota
  • Os valores padrão para begin e end são [INF_MIN,INF_MAX), o que significa que todos os dados são lidos.

  • Quando a quantidade de valores configurados para begin e end for menor que o número de colunas de chave primária, com base no princípio de correspondência da chave primária mais à esquerda, o intervalo para as colunas de chave primária não configuradas assume o padrão [INF_MIN,INF_MAX).

  • Quando apenas um entre begin ou end estiver configurado, o intervalo de dados exportados será [begin, INF_MAX) ou [INF_MIN, end).

  • Quando houver apenas uma coluna de chave primária, os valores de begin e end seguem a regra de intervalo fechado à esquerda e aberto à direita para exportação de dados.

  • Quando houver múltiplas colunas de chave primária, a última coluna segue a regra de intervalo fechado à esquerda e aberto à direita, enquanto as demais colunas de chave primária seguem um intervalo fechado em ambos os lados.

Por exemplo, para extrair dados de uma tabela do Tablestore com três colunas de chave primária [Centenas, Dezenas, Unidades], onde os valores da chave primária variam de (0,0,0)(0,0,1)(0,0,2)(0,0,3)......(9,9,8)(9,9,9), totalizando 1.000 linhas. As configurações de begin e end são as seguintes.

  • Exemplo 1: Extrair dados onde Centenas varia de [3, 5] e Dezenas varia de [4, 6]. As chaves primárias extraídas incluem (3,4,0)(3,4,1)...(4,4,0),(4,0,1)...(5,6,8)(5,6,9). A configuração é a seguinte:

    "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.
              ]
            }
  • Exemplo 2: Extrair dados onde Centenas varia de [3, 5], Dezenas varia de [4, 6] e Unidades varia de [5,7). As chaves primárias extraídas incluem (3,4,5)(3,4,6)...(4,4,5),(4,4,6)...(5,6,5)(5,6,6). A configuração é a seguinte:

    "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.
              ]
            }

Não

(INF_MIN, INF_MAX)

split

Parâmetro de configuração avançada que permite definir divisões personalizadas. Não recomendamos o uso deste parâmetro em cenários gerais.

Ao configurar o parâmetro split, defina intervalos de dados personalizados para fragmentação. Isso é tipicamente usado quando ocorrem hotspots no armazenamento de dados do Tablestore. A configuração de tarefa a seguir serve como exemplo:

{
  "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 a execução, os dados são divididos em 6 segmentos e lidos simultaneamente. Recomendamos que o número de segmentos seja maior que a simultaneidade da tarefa.

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

Não

Quando o parâmetro split não está configurado, a lógica de divisão automática é utilizada.

A lógica de divisão automática encontra os valores máximo e mínimo da Partition Key e realiza uma segmentação uniforme.

A Partition Key suporta tipos inteiros e strings. Chaves inteiras usam divisão inteira para segmentação, e chaves string usam o código Unicode do primeiro caractere para segmentação.

Parâmetros do modo de linha para leitura de tabelas de séries temporais

Parâmetro

Descrição

Obrigatório

Valor padrão

column

column é um array onde cada elemento representa uma coluna. Configure colunas constantes e colunas regulares.

Para colunas constantes, configure os seguintes campos:

  • type: Tipo de valor da coluna. Campo obrigatório. Tipos suportados: string, int, double, bool e binary.

  • value: Valor da coluna. Campo obrigatório.

Para colunas regulares, configure os seguintes campos:

  • name: Nome da coluna. Campo obrigatório. Os seguintes campos predefinidos estão disponíveis:

    • O nome da medição da série temporal é identificado por _m_name. O tipo de dado é String.

    • A fonte de dados da série temporal é identificada por _data_source. O tipo de dado é String.

    • As tags da série temporal são identificadas por _tags. O tipo de dado é String.

    • O carimbo de data/hora da série temporal é identificado por _time. O tipo de dado é Long.

  • is_timeseries_tag: Indica se a coluna é um par chave-valor dentro do campo tags. Campo opcional. Valor padrão: false.

  • type: Tipo de valor da coluna. Campo opcional. Valor padrão: string. Tipos suportados: string, int, double, bool e binary.

Exemplo de script para leitura de quatro colunas:

"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"
  }
],

Sim

N/A

measurementName

Nome da medição da série temporal a ser lida. Se este parâmetro não for configurado, os dados de toda a tabela serão lidos.

Não

N/A

timeRange

Intervalo de tempo dos dados a serem lidos. O intervalo é [begin, end), fechado à esquerda e aberto à direita, onde begin deve ser menor que end. A unidade do carimbo de data/hora é microssegundos. O formato é o seguinte:

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

Não

Todas as versões

Parâmetros do modo de coluna para leitura de tabelas de colunas largas

Parâmetro

Descrição

Obrigatório

Valor padrão

column

Colunas a serem exportadas. Apenas colunas regulares são suportadas no modo de coluna.

Formato:

"column": [
    {"name1":"{your column name1}"},
    {"name2":"{your column name2}"}
],
Nota
  • Colunas constantes não são suportadas no modo de coluna.

  • Colunas de chave primária não podem ser especificadas. A tupla de quatro elementos exportada inclui a chave primária completa por padrão.

  • Especificações duplicadas de colunas não são permitidas.

Sim

Todas as colunas

range

Intervalo de dados a ser lido. O intervalo é [begin, end), fechado à esquerda e aberto à direita, onde:

  • Quando begin é menor que end, os dados são lidos em ordem crescente.

  • Quando begin é maior que end, os dados são lidos em ordem decrescente.

  • begin e end não podem ser iguais.

Os seguintes tipos são suportados para o campo type:

  • string

  • int

  • binary: O valor é passado como uma string binária codificada em Base64.

  • INF_MIN: Representa o menor valor possível.

  • INF_MAX: Representa o maior valor possível.

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"}]
},

Não

Todos os dados

timeRange

Intervalo de tempo dos dados a serem lidos. O intervalo é [begin, end), fechado à esquerda e aberto à direita, onde begin deve ser menor que end. A unidade do carimbo de data/hora é microssegundos.

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

Não

Todas as versões

maxVersion

Número máximo de versões de dados a serem solicitadas. O intervalo de valores é de 1 a INT32_MAX.

Não

Todas as versões

Apêndice 2: Exemplos de script do Writer e descrição de parâmetros

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

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

Exemplos de script do Writer

Configuração do modo de linha para gravação em tabelas de colunas largas

{ "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" } ] } }

Configuração do modo de linha para gravação em tabelas de séries temporais

{ "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" } ] } }

Configuração do modo de coluna para gravação em tabelas de colunas largas

{ "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 comuns do script do Writer

Parâmetro

Descrição

Obrigatório

Valor padrão

datasource

Nome da fonte de dados. O modo de script suporta a adição de fontes de dados. O valor deste parâmetro deve ser idêntico ao nome da fonte de dados adicionada.

Sim

N/A

endPoint

Endpoint (endereço de serviço) do servidor Tablestore. Para mais informações, consulte Endpoints.

Sim

N/A

accessId

AccessKey ID da instância do Tablestore.

Sim

N/A

accessKey

AccessKey Secret da instância do Tablestore.

Sim

N/A

instanceName

Nome da instância do Tablestore. A instância é a entidade usada para gerenciar o serviço Tablestore.

Após ativar o serviço Tablestore, crie uma instância no console e, em seguida, crie e gerencie tabelas dentro dessa instância. A instância é a unidade básica para gerenciamento de recursos do Tablestore. O controle de acesso e a medição de recursos ocorrem no nível da instância.

Sim

N/A

table

Nome da tabela onde os dados serão gravados. Especifique apenas uma tabela. O Tablestore não suporta sincronização de múltiplas tabelas.

Sim

N/A

newVersion

Versão do plugin Tablestore Writer.

  • false: Tablestore Writer legado, compatível apenas com gravação em tabelas de colunas largas no modo de linha.

  • true: Novo Tablestore Writer, compatível com modo de linha, modo de coluna, tabelas de séries temporais e tabelas de colunas largas, além de suportar o recurso de coluna de chave primária com incremento automático.

Além de oferecer novos recursos, o novo Tablestore Writer apresenta menor sobrecarga de recursos do sistema. Recomendamos o uso desta versão atualizada.

O plugin da nova versão é retrocompatível com a configuração da versão legada. Adicione a configuração newVersion=true às tarefas existentes e elas serão executadas normalmente.

Sim

false

mode

Modo de gravação de dados. Dois modos são suportados:

  • normal: Grava dados no formato regular (modo de linha).

  • multiVersion: Grava dados no formato de múltiplas versões (modo de coluna).

Este parâmetro só tem efeito quando newVersion:true estiver configurado.

O Tablestore Writer legado ignora o parâmetro mode e suporta apenas gravação no modo de linha.

Não

normal

isTimeseriesTable

Indica se a tabela de dados é uma tabela de séries temporais.

  • false: A tabela é uma tabela regular de colunas largas.

  • true: A tabela é uma tabela de séries temporais.

Este parâmetro só tem efeito quando newVersion:true & mode:normal estiver configurado (o modo de coluna não é compatível com tabelas de séries temporais).

Não

false

Parâmetros adicionais do script do Writer

O Tablestore Writer suporta gravação em tabelas de colunas largas no modo de linha, gravação em tabelas de séries temporais no modo de linha e gravação em tabelas de colunas largas no modo de coluna. As seções a seguir descrevem os parâmetros adicionais para cada modo.

Parâmetros do modo de linha para gravação em tabelas de colunas largas

Parâmetro

Descrição

Obrigatório

Valor padrão

primaryKey

Informações da chave primária da tabela do Tablestore, descritas usando um array JSON. Como o Tablestore é um sistema NoSQL, especifique os nomes das colunas durante a importação de dados pelo Tablestore Writer.

O sistema de sincronização de dados suporta conversão de tipos, portanto o Tablestore Writer realiza a conversão de tipos de dados para dados de source que não sejam STRING ou INT. Exemplo de configuração:

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

A PrimaryKey do Tablestore suporta apenas os tipos STRING e INT. Portanto, o Tablestore Writer aceita apenas os tipos STRING e INT.

Sim

N/A

column

Conjunto de nomes de colunas a serem sincronizados da tabela configurada, descrito usando um array JSON.

Exemplo de configuração:

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

O campo name especifica o nome da coluna do Tablestore onde gravar, e o campo type especifica o tipo de dado a ser gravado. O Tablestore suporta os tipos STRING, INT, DOUBLE, BOOL e BINARY.

Nota

Constantes, funções ou expressões personalizadas não são suportadas durante a gravação.

Sim

N/A

writeMode

Modo para gravar dados no Tablestore. Os dois modos a seguir são suportados:

  • PutRow: Corresponde à API PutRow do Tablestore. Este modo insere dados na linha especificada. Se a linha não existir, uma nova linha será adicionada. Se a linha já existir, ela será sobrescrita.

  • UpdateRow: Corresponde à API UpdateRow do Tablestore. Este modo atualiza os dados da linha especificada. Se a linha não existir, uma nova linha será adicionada. Se a linha já existir, os valores das colunas especificadas serão adicionados, modificados ou excluídos com base no conteúdo da solicitação.

Sim

N/A

enableAutoIncrement

Define se é permitido gravar dados em uma tabela do Tablestore que contém colunas de chave primária com incremento automático.

  • true: O plugin verifica automaticamente as informações da coluna de incremento automático da tabela de destino e adiciona a coluna durante a gravação de dados (não é necessário configurar o nome da coluna de incremento automático).

  • false: Um erro é relatado ao tentar gravar em uma tabela que contém colunas de chave primária com incremento automático.

Não

false

requestTotalSizeLimitation

Limite de tamanho de uma única linha de dados ao gravar no Tablestore. O tipo de configuração é numérico.

Não

1MB

attributeColumnSizeLimitation

Limite de tamanho de uma única coluna de atributo ao gravar no Tablestore. O tipo de configuração é numérico.

Não

2MB

primaryKeyColumnSizeLimitation

Limite de tamanho de uma única coluna de chave primária ao gravar no Tablestore. O tipo de configuração é numérico.

Não

1KB

attributeColumnMaxCount

Limite de número de colunas de atributo ao gravar no Tablestore. O tipo de configuração é numérico.

Não

1.024

Parâmetros do modo de linha para gravação em tabelas de séries temporais

Parâmetro

Descrição

Obrigatório

Valor padrão

column

Cada elemento no array column corresponde a um campo nos dados da série temporal. Cada elemento pode ser configurado com os seguintes parâmetros:

  • name: Nome da coluna. Campo obrigatório. Os seguintes campos predefinidos estão disponíveis:

    • O nome da medição da série temporal é identificado por _m_name. O tipo de dado é String.

    • A fonte de dados da série temporal é identificada por _data_source. O tipo de dado é String.

    • As tags da série temporal são identificadas por _tags. O tipo de dado é String. O formato da string é ["tagKey1=value1","tagKey2=value2"].

    • O carimbo de data/hora da série temporal é identificado por _time. O tipo de dado é Long. A unidade padrão é microssegundos.

  • is_timeseries_tag: Indica se a coluna é um par chave-valor dentro do campo tags. Campo opcional. Valor padrão: false.

  • type: Tipo de valor da coluna. Campo opcional. Valor padrão: string. Tipos suportados: string, int, double, bool e binary.

Como o nome da medição e o carimbo de data/hora dos dados da série temporal não podem estar vazios, configure os campos _m_name e _time.

Exemplo: Um registro de dados a ser gravado contém seis campos:

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

Use a seguinte configuração:

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

Sim

N/A

timeunit

Unidade do campo de carimbo de data/hora _time. Valores suportados: NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS e MINUTES.

Não

MICROSECONDS

Parâmetros do modo de coluna para gravação em tabelas de colunas largas

Parâmetro

Descrição

Obrigatório

Valor padrão

primaryKey

Colunas de chave primária da tabela.

Para reduzir a sobrecarga de configuração, não é necessário especificar a posição da primaryKey no registro (linha). No entanto, o formato do registro deve ser fixo: a primaryKey deve estar no início da linha, seguida pela primaryKey e depois pelo columnName. O formato do registro é: {pk0,pk1...}, {columnName}, {timestamp}, {value}.

Por exemplo, dados os seguintes 9 registros de dados:

1,pk1,row1,1677699863871,value_0_0
                      

Exemplo de configuração:

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 da gravação no formato de linha larga:

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

Sim

N/A

columnNamePrefixFilter

Filtro de prefixo do nome da coluna.

Para dados importados do HBase, cf e qulifier formam juntos o columnName. No entanto, o Tablestore não suporta cf, então filtre o prefixo cf.

Exemplo de configuração: "columnNamePrefixFilter":"cf:"

Nota
  • Este parâmetro é opcional. Se não for especificado ou se o valor for uma string vazia, nenhuma filtragem de nome de coluna será realizada.

  • Se a coluna columnName dos dados adicionados via Data Integration não começar com o prefixo especificado, o registro será enviado ao coletor de dados incorretos.

Não

N/A

Perguntas frequentes

  • P: Como configuro o Tablestore Writer para gravar dados em uma tabela de destino que contém colunas de chave primária com incremento automático?

    1. A configuração do Tablestore Writer deve atender aos dois requisitos a seguir:

      "newVersion": "true",
      "enableAutoIncrement": "true",
    2. Não configure o nome da coluna de chave primária com incremento automático no Tablestore Writer.

    3. A soma do número de entradas primaryKey e do número de entradas column configuradas no Tablestore Writer deve ser igual ao número de colunas nos dados do Tablestore Reader upstream.

  • P: Na configuração do modelo de séries temporais, como devo entender os campos _tag e is_timeseries_tag?

    Exemplo: Um registro de dados possui três tags: [phone=Xiaomi, RAM=8G, camera=Leica].

    • Exemplo de exportação de dados (Tablestore Reader)

      • Para mesclar as tags acima em uma única coluna para exportação, use a seguinte configuração:

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

        O DataWorks exporta as tags como uma única coluna de dados no seguinte formato:

        ["phone=xiaomi","camera=LEICA","RAM=8G"]
      • Para exportar a tag phone e a tag camera, com cada tag exportada como uma coluna separada, use a seguinte configuração:

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

        O DataWorks exporta duas colunas de dados no seguinte formato:

        xiaomi, LEICA
    • Exemplo de importação de dados (Tablestore Writer)

      A fonte de dados upstream (Reader) possui duas colunas de dados:

      • Uma coluna contém: ["phone=xiaomi","camera=LEICA","RAM=8G"].

      • A outra coluna contém: 6499.

      Para adicionar ambas as colunas ao campo tags, o formato esperado do campo tags após a gravação é o seguinte: Format Use a seguinte configuração:

      "column": [
            {
              "name": "_tags",
            },
            {
              "name": "price",
              "is_timeseries_tag":"true",
            },
          ],
      • A configuração da primeira coluna importa ["phone=xiaomi","camera=LEICA","RAM=8G"] como um todo para o campo tags.

      • A configuração da segunda coluna importa price=6499 individualmente para o campo tags.