Todos os produtos
Search
Central de documentação

E-MapReduce:Conector Kudu

Última atualização: Jul 20, 2026

O conector Kudu permite consultar, inserir e excluir dados armazenados em tabelas do Apache Kudu.

Informações básicas

Este tópico aborda os seguintes assuntos sobre o conector Kudu:

Pré-requisitos

Crie um cluster Trino e um cluster Hadoop com o service Kudu. Para mais informações, consulte Create a cluster.

Limitações

  • Kudu 1.10 ou superior.

  • Conectividade de rede entre os clusters Trino e Hadoop.

  • Os nomes de tabelas e colunas do Kudu devem estar em letras minúsculas.

Modifique a configuração do conector Kudu

Para mais informações, consulte Configure connectors.

No console E-MapReduce (EMR), acesse a página Configure do service Trino. Na área Service Configuration, clique na aba kudu.properties.

Parâmetro

Descrição

kudu.client.master-addresses

Lista de endereços mestres do Kudu separados por vírgula.

Formatos suportados: example.com, example.com:7051, 192.0.2.1, 192.0.2.1:7051, [2001:db8::1], [2001:db8::1]:7051 e 2001:db8::1.

Valor padrão: localhost.

Nota

Para gravar e consultar dados nas tabelas Kudu, altere o valor padrão de localhost para o endereço IP ou nome do host do nó mestre do Kudu (por exemplo, master-1-1).

kudu.schema-emulation.enabled

Define se a emulação de schema deve ser ativada.

  • false (padrão): Emulação de schema desativada.

  • true: Emulação de schema ativada.

Importante

Para adicionar este item, clique em Add Configuration Item na aba kudu.properties. Para obter instruções, consulte Add configuration items.

kudu.schema-emulation.prefix

Prefixo para emulação de schema.

Importante

Este item de configuração é obrigatório quando kudu.schema-emulation.enabled=true.

O prefixo padrão é 'presto::`. Um prefixo vazio também é suportado.

kudu.client.default-admin-operation-timeout

Tempo limite padrão para operações administrativas, como Create Table e Delete Table.

Valor padrão: 30s.

kudu.client.default-operation-timeout

Tempo limite padrão para operações do usuário.

Valor padrão: 30s.

kudu.client.default-socket-read-timeout

Tempo limite padrão para aguardar dados de um socket.

Valor padrão: 10s.

kudu.client.disable-statistics

Define se a coleta de estatísticas do cliente Kudu deve ser desativada.

  • false (padrão): Coleta de estatísticas ativada.

  • true: Coleta de estatísticas desativada.

Consultar dados

O Apache Kudu não suporta schemas nativamente. No entanto, é possível configurar o conector Kudu para emulá-los.

Emulação de schema desativada (padrão)

Por padrão, a emulação de schema vem desativada. Nesse cenário, todas as tabelas Kudu pertencem ao schema default.

Por exemplo, para consultar a tabela orders, execute SELECT * FROM kudu.default.orders. Caso o catálogo e o schema estejam definidos como kudu e default, respectivamente, simplifique a consulta para SELECT * FROM orders.

Os nomes das tabelas Kudu podem conter quaisquer caracteres. Se um nome incluir caracteres especiais, envolva-o entre aspas duplas ("). Por exemplo, para consultar a tabela special.table!, execute SELECT * FROM kudu.default."special.table!".

Exemplos:

  1. Crie uma tabela users no schema default.

    CREATE TABLE kudu.default.users (
      user_id int WITH (primary_key = true),
      first_name varchar,
      last_name varchar
    ) WITH (
      partition_by_hash_columns = ARRAY['user_id'],
      partition_by_hash_buckets = 2
    );
    Nota

    Ao criar uma tabela, especifique as informações obrigatórias, como chave primária, formatos de codificação e compressão de colunas, além de partições por hash ou por intervalo.

  2. Visualize as informações da tabela.

    DESCRIBE kudu.default.users;

    O comando retorna uma saída semelhante à seguinte:

       Column   |  Type   |                      Extra                      | Comment
    ------------+---------+-------------------------------------------------+---------
     user_id    | integer | primary_key, encoding=auto, compression=default |
     first_name | varchar | nullable, encoding=auto, compression=default    |
     last_name  | varchar | nullable, encoding=auto, compression=default    |
    (3 rows)
  3. Insira dados.

    INSERT INTO kudu.default.users VALUES (1, 'Donald', 'Duck'), (2, 'Mickey', 'Mouse');
  4. Consulte os dados.

    SELECT * FROM kudu.default.users;

Emulação de schema ativada

Se você ativar a emulação de schema no arquivo de configuração do conector (etc/catalog/kudu.properties), as tabelas serão mapeadas para schemas com base em uma convenção de nomenclatura.

  • Ao definir kudu.schema-emulation.enabled=true e kudu.schema-emulation.prefix=, o mapeamento das tabelas ocorre da seguinte forma:

    Nome da tabela Kudu

    Nome da tabela Presto

    orders

    kudu.default.orders

    part1.part2

    kudu.part1.part2

    x.y.z

    kudu.x."y.z"

    Nota

    Como o Kudu não oferece suporte nativo a schemas, o Presto cria uma tabela especial chamada $schemas para gerenciá-los.

  • Ao definir kudu.schema-emulation.enabled=true e kudu.schema-emulation.prefix=presto::, o mapeamento das tabelas segue o padrão abaixo:

    Nome da tabela Kudu

    Nome da tabela Presto

    orders

    kudu.default.orders

    part1.part2

    kudu.default."part1.part2"

    x.y.z

    kudu.default."x.y.z"

    presto::part1.part2

    kudu.part1.part2

    presto::x.y.z

    kudu.x."y.z"

    Nota

    Como o Kudu não oferece suporte nativo a schemas, o Presto cria uma tabela especial chamada presto::$schemas para gerenciá-los.

Mapeamento de tipos de dados

A tabela a seguir apresenta os mapeamentos de tipos de dados entre Presto e Kudu.

Tipo Presto

Tipo Kudu

Observações

BOOLEAN

BOOL

N/A

TINYINT

INT8

SMALLINT

INT16

INTEGER

INT32

BIGINT

INT64

REAL

FLOAT

DOUBLE

DOUBLE

VARCHAR

STRING

Ao criar uma tabela Kudu a partir de uma tabela Presto usando a instrução CREATE TABLE ... AS ..., o comprimento máximo opcional do tipo VARCHAR não é preservado.

VARBINARY

BINARY

TIMESTAMP

UNIXTIME_MICROS

Este mapeamento reduz a precisão da coluna Kudu de microssegundos (µs) para milissegundos (ms).

DECIMAL

DECIMAL

Suportado apenas pelo Kudu 1.7.0 e versões posteriores.

DATE

N/A

Não suportado.

Ao criar uma tabela Kudu a partir de uma tabela Presto usando a instrução CREATE TABLE ... AS ..., as colunas DATE são convertidas para o tipo STRING.

CHAR

N/A

Não suportado.

TIME

JSON

TIME WITH TIME ZONE

TIMESTAMP WITH TIME ZONE

INTERVAL YEAR TO MONTH

INTERVAL DAY TO SECOND

ARRAY

MAP

IPADDRESS

Instruções SQL do Presto suportadas

Nota

A instrução ALTER SCHEMA ... RENAME TO ... não é suportada.

Instrução

Descrição

SELECT

Nenhuma.

INSERT INTO ... VALUES

Nenhuma.

INSERT INTO ... SELECT ...

Nenhuma.

DELETE

Nenhuma.

DROP SCHEMA

Disponível apenas quando a emulação de schema está ativada.

CREATE SCHEMA

Disponível apenas quando a emulação de schema está ativada.

CREATE TABLE

Cria uma tabela. Para detalhes, consulte Criar uma tabela.

CREATE TABLE ... AS

Nenhuma.

DROP TABLE

Nenhuma.

ALTER TABLE ... RENAME TO ...

Nenhuma.

ALTER TABLE ... ADD COLUMN ...

Adiciona uma coluna. Para detalhes, consulte Adicionar uma coluna.

ALTER TABLE ... RENAME COLUMN ...

Estas instruções aplicam-se apenas a colunas que não fazem parte da chave primária.

ALTER TABLE ... DROP COLUMN ...

SHOW SCHEMAS

Nenhuma.

SHOW TABLES

Nenhuma.

SHOW CREATE TABLE

Nenhuma.

SHOW COLUMNS FROM

Nenhuma.

DESCRIBE

Esta instrução equivale a SHOW COLUMNS FROM.

CALL kudu.system.add_range_partition

Adiciona uma partição por intervalo. Para detalhes, consulte Partições por intervalo.

CALL kudu.system.drop_range_partition

Remove uma partição por intervalo. Para detalhes, consulte Partições por intervalo.

Crie uma tabela

Para criar uma tabela, especifique suas colunas, tipos de dados e informações de particionamento. Também é possível definir outros detalhes, como formato de codificação ou compressão das colunas. Veja um exemplo abaixo.

CREATE TABLE user_events (
  user_id int WITH (primary_key = true),
  event_name varchar WITH (primary_key = true),
  message varchar,
  details varchar WITH (nullable = true, encoding = 'plain')
) WITH (
  partition_by_hash_columns = ARRAY['user_id'],
  partition_by_hash_buckets = 5,
  number_of_replicas = 3
);

Neste exemplo, a chave primária consiste nas colunas user_id e event_name. A tabela é dividida em cinco partições com base nos valores de hash da coluna user_id. O parâmetro number_of_replicas está definido como 3.

Ao criar uma tabela, observe os seguintes pontos:

  • As colunas de chave primária devem ser listadas primeiro. As colunas de chave de partição devem ser um subconjunto das colunas de chave primária.

  • number_of_replicas: Quantidade de réplicas de tablet, que deve ser um número ímpar. Se não especificado, o valor padrão da configuração do Kudu Master será utilizado.

  • O Kudu suporta partições por hash e por intervalo. Uma partição por hash distribui linhas em buckets com base em um valor de hash. Já a partição por intervalo distribui linhas conforme uma chave de partição ordenada, exigindo criação explícita dos intervalos específicos. O Kudu também permite particionamento multinível. Toda tabela deve ter pelo menos uma partição por hash ou por intervalo, podendo ter múltiplas partições por hash, mas no máximo uma partição por intervalo.

Propriedades da coluna

Além do nome e do tipo de dados, você pode especificar as seguintes propriedades para a coluna.

Parâmetro

Tipo

Descrição

primary_key

BOOLEAN

Se verdadeiro, esta coluna faz parte da chave primária.

Uma chave primária do Kudu impõe uma restrição de unicidade. Ao inserir uma linha com uma chave primária já existente, a linha atual é atualizada. Para mais informações, consulte Primary Key Design.

nullable

BOOLEAN

Se verdadeiro, a coluna pode aceitar valores nulos.

Importante

Colunas de chave primária não podem ser nulas.

encoding

VARCHAR

Formato de codificação da coluna, que reduz o armazenamento e melhora o desempenho das consultas.

Se não especificado, o Kudu seleciona automaticamente uma codificação com base no tipo de dados da coluna. Valores válidos: auto, plain, bitshuffle, runlength, prefix, dictionary e group_varint. Para mais informações, consulte Column Encoding.

compression

VARCHAR

Formato de compressão da coluna.

Se não especificado, o Kudu usa o formato de compressão padrão. Valores válidos: default, no, lz4, snappy e zlib. Para mais informações, consulte Column compression.

Veja um exemplo:

CREATE TABLE mytable (
  name varchar WITH (primary_key = true, encoding = 'dictionary', compression = 'snappy'),
  index bigint WITH (nullable = true, encoding = 'runlength', compression = 'lz4'),
  comment varchar WITH (nullable = true, encoding = 'plain', compression = 'default'),
   ...
) WITH (...);

Design de partições

Esta seção descreve como definir partições por hash e por intervalo.

  • Partição por hash

    • Definição de um grupo de partições

      Utilize as propriedades de tabela partition_by_hash_columns e partition_by_hash_buckets para especificar as colunas de chave de partição e o número de partições, respectivamente. Todas as colunas de chave de partição devem ser um subconjunto das colunas de chave primária. Confira o exemplo:

      CREATE TABLE mytable (
        col1 varchar WITH (primary_key=true),
        col2 varchar WITH (primary_key=true),
        ...
      ) WITH (
        partition_by_hash_columns = ARRAY['col1', 'col2'],
        partition_by_hash_buckets = 4
      )
      Nota

      Este exemplo define uma partição por hash nas colunas col1 e col2, distribuindo os dados em quatro partições.

    • Definição de dois grupos de partições

      Para definir dois grupos independentes de partições por hash, especifique também as propriedades de tabela partition_by_second_hash_columns e partition_by_second_hash_buckets. Veja o exemplo:

      CREATE TABLE mytable (
        col1 varchar WITH (primary_key=true),
        col2 varchar WITH (primary_key=true),
        ...
      ) WITH (
        partition_by_hash_columns = ARRAY['col1'],
        partition_by_hash_buckets = 2,
        partition_by_second_hash_columns = ARRAY['col2'],
        partition_by_second_hash_buckets = 3
      )
      Nota

      Este exemplo define dois grupos de partições por hash. O primeiro grupo distribui as linhas em duas partições com base na coluna col1. O segundo grupo distribui as linhas em três partições com base na coluna col2. A tabela possui um total de seis partições (2 × 3).

  • Partição por intervalo

    Uma tabela Kudu pode ter no máximo uma partição por intervalo, definida pela propriedade de tabela partition_by_range_columns. Durante a criação da tabela, defina os intervalos de partição usando a propriedade range_partitions. Para gerenciar partições por intervalo em uma tabela existente, utilize os procedimentos armazenados kudu.system.add_range_partition e kudu.system.drop_range_partition. Segue um exemplo:

    CREATE TABLE events (
      rack varchar WITH (primary_key=true),
      machine varchar WITH (primary_key=true),
      event_time timestamp WITH (primary_key=true),
      ...
    ) WITH (
      partition_by_hash_columns = ARRAY['rack'],
      partition_by_hash_buckets = 2,
      partition_by_second_hash_columns = ARRAY['machine'],
      partition_by_second_hash_buckets = 3,
      partition_by_range_columns = ARRAY['event_time'],
      range_partitions = '[{"lower": null, "upper": "2018-01-01T00:00:00"},
                           {"lower": "2018-01-01T00:00:00", "upper": null}]'
    )
    Nota

    Este exemplo define uma tabela com dois grupos de partições por hash e uma partição por intervalo na coluna event_time. O intervalo é dividido no carimbo de data/hora 2018-01-01T00:00:00.

  • Gerenciamento de partições por intervalo

    Os exemplos a seguir demonstram operações de particionamento:

    • Adicionar uma partição por intervalo

      CALL kudu.system.add_range_partition(<YOUR_SCHEMA_NAME>, <YOUR_TABLE_NAME>, <range_partition_as_json_string>)
    • Remover uma partição por intervalo

      CALL kudu.system.drop_range_partition(<YOUR_SCHEMA_NAME>, <YOUR_TABLE_NAME>, <range_partition_as_json_string>)

    Parâmetro

    Descrição

    <YOUR_SCHEMA_NAME>

    Schema onde a tabela está localizada.

    <YOUR_TABLE_NAME>

    Nome da tabela.

    <range_partition_as_json_string>

    Limites superior e inferior da partição por intervalo, especificados como uma string JSON. Use o formato '{"lower": <value>, "upper": <value>}'. Se a partição tiver várias colunas, utilize o formato '{"lower": [<value_col1>,...], "upper": [<value_col1>,...]}'. O formato do valor depende do tipo de dados da coluna. A lista a seguir mapeia os tipos de dados para seus formatos de string JSON necessários:

    • BIGINT: '{"lower": 0, "upper": 1000000}'

    • SMALLINT: '{"lower": 10, "upper": null}'

    • VARCHAR: '{"lower": "A", "upper": "M"}'

    • TIMESTAMP: '{"lower": "2018-02-01T00:00:00.000", "upper": "2018-02-01T12:00:00.000"}'

    • BOOLEAN: '{"lower": false, "upper": true}'

    • VARBINARY: Uma string codificada em Base64.

    Nota

    Um valor null indica um limite ilimitado.

    Confira um exemplo:

    CALL kudu.system.add_range_partition('myschema', 'events', '{"lower": "2018-01-01", "upper": "2018-06-01"}')
    Nota

    Este exemplo adiciona uma partição por intervalo à tabela events no schema myschema. O limite inferior da partição é 2018-01-01, que corresponde ao carimbo de data/hora 2018-01-01T00:00:00.000. O limite superior é 2018-06-01.

    Use a instrução SHOW CREATE TABLE para visualizar as partições por intervalo existentes. Essas informações aparecem na propriedade de tabela range_partitions.

Adicionar uma coluna

Utilize a instrução ALTER TABLE ... ADD COLUMN ... para adicionar uma coluna a uma tabela existente. Também é possível especificar propriedades para a nova coluna. Para detalhes sobre as propriedades de coluna, consulte Criar uma tabela.

ALTER TABLE mytable ADD COLUMN extraInfo varchar WITH (nullable = true, encoding = 'plain')