Todos los productos
Search
Centro de documentos

E-MapReduce:Conector de Kudu

Última actualización: Sep 04, 2026

El conector de Kudu le permite consultar, insertar y eliminar datos almacenados en tablas de Apache Kudu.

Contexto

El conector de Kudu abarca los siguientes temas:

Requisitos previos

Debe contar con un clúster de Trino y un clúster de Hadoop con el servicio Kudu creados. Para obtener más información, consulte Create a cluster.

Limitaciones

  • Kudu 1.10 o posterior.

  • Conectividad de red entre los clústeres de Trino y Hadoop.

  • Los nombres de tablas y columnas de Kudu deben estar en minúsculas.

Modificar la configuración del conector de Kudu

Para obtener más información, consulte Configure connectors.

En la consola de E-MapReduce (EMR), vaya a la página Configure del servicio Trino. En el área Service Configuration, haga clic en la pestaña kudu.properties.

Parámetro

Descripción

kudu.client.master-addresses

Lista de direcciones maestras de Kudu separadas por comas.

Se admiten los siguientes formatos: example.com, example.com:7051, 192.0.2.1, 192.0.2.1:7051, [2001:db8::1], [2001:db8::1]:7051 y 2001:db8::1.

Valor predeterminado: localhost.

Nota

Para escribir datos en tablas de Kudu y consultarlos, cambie el valor predeterminado de localhost a la dirección IP o nombre de host del nodo maestro de Kudu; por ejemplo, master-1-1.

kudu.schema-emulation.enabled

Indica si se habilita la emulación de esquemas.

  • false (predeterminado): La emulación de esquemas está deshabilitada.

  • true: La emulación de esquemas está habilitada.

Importante

Para agregar este elemento, haga clic en Add Configuration Item en la pestaña kudu.properties. Para consultar las instrucciones, vea Add configuration items.

kudu.schema-emulation.prefix

Prefijo para la emulación de esquemas.

Importante

Este elemento de configuración es obligatorio cuando kudu.schema-emulation.enabled=true.

El prefijo estándar es 'presto::`. También se admite un prefijo vacío.

kudu.client.default-admin-operation-timeout

Tiempo de espera predeterminado para operaciones administrativas, como Create Table y Delete Table.

Valor predeterminado: 30s.

kudu.client.default-operation-timeout

Tiempo de espera predeterminado para operaciones de usuario.

Valor predeterminado: 30s.

kudu.client.default-socket-read-timeout

Tiempo de espera predeterminado para recibir datos de un socket.

Valor predeterminado: 10s.

kudu.client.disable-statistics

Indica si se deshabilita la recopilación de estadísticas del cliente de Kudu.

  • false (predeterminado): La recopilación de estadísticas está habilitada.

  • true: La recopilación de estadísticas está deshabilitada.

Consultar datos

Apache Kudu no admite esquemas de forma nativa. No obstante, puede configurar el conector de Kudu para emularlos.

Emulación de esquemas deshabilitada (predeterminado)

De forma predeterminada, la emulación de esquemas está deshabilitada. En este caso, todas las tablas de Kudu se encuentran en el esquema default.

Por ejemplo, para consultar la tabla orders, ejecute SELECT * FROM kudu.default.orders. Si el catálogo y el esquema están configurados como kudu y default respectivamente, puede simplificar la consulta a SELECT * FROM orders.

Los nombres de las tablas de Kudu pueden contener cualquier carácter. Si un nombre incluye caracteres especiales, debe encerrarlo entre comillas dobles ("). Por ejemplo, para consultar la tabla special.table!, ejecute SELECT * FROM kudu.default."special.table!".

Ejemplos:

  1. Cree una tabla users en el esquema 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

    Al crear una tabla, debe especificar información obligatoria, como la clave principal, los formatos de codificación y compresión de columnas, y las particiones por hash o por rango.

  2. Consulte la información de la tabla.

    DESCRIBE kudu.default.users;

    El comando devuelve un resultado similar al siguiente:

       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. Inserte datos.

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

    SELECT * FROM kudu.default.users;

Emulación de esquemas habilitada

Si habilita la emulación de esquemas en el archivo de configuración del conector (etc/catalog/kudu.properties), las tablas se asignan a esquemas según una convención de nomenclatura.

  • Si establece kudu.schema-emulation.enabled=true y kudu.schema-emulation.prefix=, las tablas se asignan de la siguiente manera:

    Nombre de tabla en Kudu

    Nombre de tabla en Presto

    orders

    kudu.default.orders

    part1.part2

    kudu.part1.part2

    x.y.z

    kudu.x."y.z"

    Nota

    Dado que Kudu no admite esquemas de forma nativa, Presto crea una tabla especial llamada $schemas para gestionarlos.

  • Si establece kudu.schema-emulation.enabled=true y kudu.schema-emulation.prefix=presto::, las tablas se asignan de la siguiente manera:

    Nombre de tabla en Kudu

    Nombre de tabla en 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

    Dado que Kudu no admite esquemas de forma nativa, Presto crea una tabla especial llamada presto::$schemas para gestionarlos.

Mapeo de tipos de datos

La siguiente tabla muestra el mapeo de tipos de datos entre Presto y Kudu.

Tipo en Presto

Tipo en Kudu

Observaciones

BOOLEAN

BOOL

N/A

TINYINT

INT8

SMALLINT

INT16

INTEGER

INT32

BIGINT

INT64

REAL

FLOAT

DOUBLE

DOUBLE

VARCHAR

STRING

Al crear una tabla de Kudu a partir de una tabla de Presto mediante la sentencia CREATE TABLE ... AS ..., no se conserva la longitud máxima opcional del tipo VARCHAR.

VARBINARY

BINARY

TIMESTAMP

UNIXTIME_MICROS

Este mapeo reduce la precisión de la columna de Kudu de microsegundos (µs) a milisegundos (ms).

DECIMAL

DECIMAL

Compatible solo con Kudu 1.7.0 y versiones posteriores.

DATE

N/A

No compatible.

Al crear una tabla de Kudu a partir de una tabla de Presto mediante la sentencia CREATE TABLE ... AS ..., las columnas DATE se convierten al tipo STRING.

CHAR

N/A

No compatible.

TIME

JSON

TIME WITH TIME ZONE

TIMESTAMP WITH TIME ZONE

INTERVAL YEAR TO MONTH

INTERVAL DAY TO SECOND

ARRAY

MAP

IPADDRESS

Sentencias SQL de Presto compatibles

Nota

La sentencia ALTER SCHEMA ... RENAME TO ... no es compatible.

Sentencia

Descripción

SELECT

Ninguna.

INSERT INTO ... VALUES

Ninguna.

INSERT INTO ... SELECT ...

Ninguna.

DELETE

Ninguna.

DROP SCHEMA

Disponible solo cuando la emulación de esquemas está habilitada.

CREATE SCHEMA

Disponible solo cuando la emulación de esquemas está habilitada.

CREATE TABLE

Crea una tabla. Para más detalles, consulte Create a table.

CREATE TABLE ... AS

Ninguna.

DROP TABLE

Ninguna.

ALTER TABLE ... RENAME TO ...

Ninguna.

ALTER TABLE ... ADD COLUMN ...

Agrega una columna. Para más detalles, consulte Add a column.

ALTER TABLE ... RENAME COLUMN ...

Estas sentencias solo aplican a columnas que no forman parte de la clave principal.

ALTER TABLE ... DROP COLUMN ...

SHOW SCHEMAS

Ninguna.

SHOW TABLES

Ninguna.

SHOW CREATE TABLE

Ninguna.

SHOW COLUMNS FROM

Ninguna.

DESCRIBE

Esta sentencia equivale a SHOW COLUMNS FROM.

CALL kudu.system.add_range_partition

Agrega una partición por rango. Para más detalles, consulte Range partitions.

CALL kudu.system.drop_range_partition

Elimina una partición por rango. Para más detalles, consulte Range partitions.

Crear una tabla

Para crear una tabla, especifique sus columnas, tipos de datos e información de particionamiento. También puede definir otros detalles, como el formato de codificación o compresión de las columnas. A continuación se muestra un ejemplo.

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

En este ejemplo, la clave principal consta de las columnas user_id y event_name. La tabla se divide en cinco particiones según los valores hash de la columna user_id. El parámetro number_of_replicas se establece en 3.

Al crear una tabla, tenga en cuenta lo siguiente:

  • Las columnas de clave principal deben aparecer primero. Las columnas de clave de partición deben ser un subconjunto de las columnas de clave principal.

  • number_of_replicas: Número de réplicas de tablet, que debe ser un número impar. Si no se especifica, se utiliza el valor predeterminado de la configuración de Kudu Master.

  • Kudu admite particiones por hash y por rango. Una partición por hash distribuye las filas en cubetas según un valor hash. Una partición por rango distribuye las filas según una clave de partición ordenada, y sus rangos específicos deben crearse explícitamente. Kudu admite particionamiento multinivel. Una tabla debe tener al menos una partición por hash o por rango. Puede tener varias particiones por hash, pero como máximo una partición por rango.

Propiedades de columna

Además del nombre y el tipo de datos, puede especificar las siguientes propiedades de columna.

Parámetro

Tipo

Descripción

primary_key

BOOLEAN

Si es verdadero, esta columna forma parte de la clave principal.

Una clave principal de Kudu impone una restricción de unicidad. Si inserta una fila con una clave principal que ya existe, la fila existente se actualiza. Para obtener más información, consulte Primary Key Design.

nullable

BOOLEAN

Si es verdadero, la columna puede ser nula.

Importante

Las columnas de clave principal no pueden ser nulas.

encoding

VARCHAR

Formato de codificación de la columna, que reduce el almacenamiento y mejora el rendimiento de las consultas.

Si no se especifica, Kudu selecciona automáticamente una codificación según el tipo de datos de la columna. Valores válidos: auto, plain, bitshuffle, runlength, prefix, dictionary y group_varint. Para obtener más información, consulte Column Encoding.

compression

VARCHAR

Formato de compresión de la columna.

Si no se especifica, Kudu utiliza el formato de compresión predeterminado. Valores válidos: default, no, lz4, snappy y zlib. Para obtener más información, consulte Column compression.

A continuación se muestra un ejemplo:

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 (...);

Diseño de particiones

Esta sección describe cómo definir particiones por hash y por rango.

  • Partición por hash

    • Definición de un grupo de particiones

      Utilice las propiedades de tabla partition_by_hash_columns y partition_by_hash_buckets para especificar las columnas de clave de partición y el número de particiones, respectivamente. Todas las columnas de clave de partición deben ser un subconjunto de las columnas de clave principal. A continuación se muestra un ejemplo:

      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 ejemplo define una partición por hash en las columnas col1 y col2, y distribuye los datos en cuatro particiones.

    • Definición de dos grupos de particiones

      Para definir dos grupos independientes de particiones por hash, también debe especificar las propiedades de tabla partition_by_second_hash_columns y partition_by_second_hash_buckets. A continuación se muestra un ejemplo:

      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 ejemplo define dos grupos de particiones por hash. El primer grupo distribuye las filas en dos particiones según la columna col1. El segundo grupo distribuye las filas en tres particiones según la columna col2. La tabla tiene un total de seis particiones (2 × 3).

  • Partición por rango

    Una tabla de Kudu puede tener como máximo una partición por rango, la cual se define mediante la propiedad de tabla partition_by_range_columns. Al crear la tabla, puede definir los rangos de partición mediante la propiedad de tabla range_partitions. Para gestionar particiones por rango en una tabla existente, utilice los procedimientos almacenados kudu.system.add_range_partition y kudu.system.drop_range_partition. A continuación se muestra un ejemplo:

    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 ejemplo define una tabla con dos grupos de particiones por hash y una partición por rango en la columna event_time. El rango se divide en la marca de tiempo 2018-01-01T00:00:00.

  • Gestión de particiones por rango

    Los siguientes ejemplos muestran operaciones de particionamiento:

    • Agregar una partición por rango

      CALL kudu.system.add_range_partition(<YOUR_SCHEMA_NAME>, <YOUR_TABLE_NAME>, <range_partition_as_json_string>)
    • Eliminar una partición por rango

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

    Parámetro

    Descripción

    <YOUR_SCHEMA_NAME>

    Esquema donde se encuentra la tabla.

    <YOUR_TABLE_NAME>

    Nombre de la tabla.

    <range_partition_as_json_string>

    Límites superior e inferior de la partición por rango, especificados como una cadena JSON. Utilice el formato '{"lower": <value>, "upper": <value>}'. Si la partición tiene varias columnas, utilice el formato '{"lower": [<value_col1>,...], "upper": [<value_col1>,...]}'. El formato del valor depende del tipo de datos de la columna. La siguiente lista muestra el mapeo de tipos de datos a sus formatos de cadena JSON requeridos:

    • 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: Una cadena codificada en Base64.

    Nota

    Un valor null indica un límite no acotado.

    A continuación se muestra un ejemplo:

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

    Este ejemplo agrega una partición por rango a la tabla events en el esquema myschema. El límite inferior de la partición es 2018-01-01, que corresponde a la marca de tiempo 2018-01-01T00:00:00.000. El límite superior es 2018-06-01.

    Utilice la sentencia SHOW CREATE TABLE para consultar las particiones por rango existentes. Esta información aparece en la propiedad de tabla range_partitions.

Agregar una columna

Utilice la sentencia ALTER TABLE ... ADD COLUMN ... para agregar una columna a una tabla existente. También puede especificar propiedades para la nueva columna. Para obtener detalles sobre las propiedades de columna, consulte Create a table.

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