All Products
Search
Document Center

E-MapReduce:Kudu connector

Last Updated:Jul 18, 2026

Kudu connector memungkinkan Anda melakukan kueri, menyisipkan, dan menghapus data yang disimpan dalam tabel Apache Kudu.

Informasi latar belakang

Prasyarat

Kluster Trino dan kluster Hadoop dengan layanan Kudu telah dibuat. Untuk informasi selengkapnya, lihat Buat kluster.

Batasan

  • Kudu 1.10 atau versi yang lebih baru.

  • Konektivitas jaringan antara kluster Trino dan Hadoop.

  • Nama tabel dan kolom Kudu harus menggunakan huruf kecil.

Modifikasi konfigurasi Kudu connector

Untuk informasi selengkapnya, lihat Konfigurasikan connector.

Di Konsol E-MapReduce (EMR), buka halaman Configure layanan Trino. Di area Service Configuration, klik tab kudu.properties.

Parameter

Deskripsi

kudu.client.master-addresses

Daftar alamat master Kudu yang dipisahkan koma.

Format yang didukung meliputi: example.com, example.com:7051, 192.0.2.1, 192.0.2.1:7051, [2001:db8::1], [2001:db8::1]:7051, dan 2001:db8::1.

Nilai default: localhost.

Catatan

Untuk menulis data ke dan melakukan kueri data dari tabel Kudu, ubah nilai default dari localhost menjadi alamat IP atau hostname node master Kudu, misalnya master-1-1.

kudu.schema-emulation.enabled

Apakah akan mengaktifkan emulasi skema.

  • false (default): Emulasi skema dinonaktifkan.

  • true: Emulasi skema diaktifkan.

Penting

Untuk menambahkan item ini, klik Add Configuration Item pada tab kudu.properties. Untuk petunjuknya, lihat Tambah item konfigurasi.

kudu.schema-emulation.prefix

Awalan untuk emulasi skema.

Penting

Item konfigurasi ini wajib ditentukan ketika kudu.schema-emulation.enabled=true.

Awalan standar adalah 'presto::`. Awalan kosong juga didukung.

kudu.client.default-admin-operation-timeout

Timeout default untuk operasi administratif, seperti Create Table dan Delete Table.

Nilai default: 30s.

kudu.client.default-operation-timeout

Timeout default untuk operasi pengguna.

Nilai default: 30s.

kudu.client.default-socket-read-timeout

Timeout default untuk menunggu data dari socket.

Nilai default: 10s.

kudu.client.disable-statistics

Apakah akan menonaktifkan pengumpulan statistik klien Kudu.

  • false (default): Pengumpulan statistik diaktifkan.

  • true: Pengumpulan statistik dinonaktifkan.

Kueri data

Apache Kudu tidak mendukung skema. Namun, Anda dapat mengonfigurasi Kudu connector untuk mengemulasikannya.

Emulasi skema dinonaktifkan (default)

Secara default, emulasi skema dinonaktifkan. Dalam kasus ini, semua tabel Kudu berada dalam skema default.

Misalnya, untuk melakukan kueri terhadap tabel orders, jalankan SELECT * FROM kudu.default.orders. Jika katalog dan skema diatur masing-masing ke kudu dan default, Anda dapat menyederhanakan kueri menjadi SELECT * FROM orders.

Nama tabel Kudu dapat berisi karakter apa pun. Jika nama tersebut mengandung karakter khusus, Anda harus membungkusnya dengan tanda kutip ganda ("). Misalnya, untuk melakukan kueri terhadap tabel special.table!, jalankan SELECT * FROM kudu.default."special.table!".

Contoh:

  1. Buat tabel users dalam skema 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
    );
    Catatan

    Saat membuat tabel, Anda harus menentukan informasi yang diperlukan, seperti kunci primer, format encoding dan kompresi kolom, serta partisi hash atau range.

  2. Lihat informasi tabel.

    DESCRIBE kudu.default.users;

    Perintah tersebut menghasilkan output yang mirip dengan berikut:

       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. Sisipkan data.

    INSERT INTO kudu.default.users VALUES (1, 'Donald', 'Duck'), (2, 'Mickey', 'Mouse');
  4. Lakukan kueri data.

    SELECT * FROM kudu.default.users;

Emulasi skema diaktifkan

Jika Anda mengaktifkan emulasi skema dalam file konfigurasi connector (etc/catalog/kudu.properties), tabel dipetakan ke skema berdasarkan konvensi penamaan.

  • Jika Anda mengatur kudu.schema-emulation.enabled=true dan kudu.schema-emulation.prefix=, tabel dipetakan sebagai berikut:

    Kudu table name

    Nama tabel Presto

    orders

    kudu.default.orders

    part1.part2

    kudu.part1.part2

    x.y.z

    kudu.x."y.z"

    Catatan

    Karena Kudu tidak mendukung skema secara native, Presto membuat tabel khusus bernama $schemas untuk mengelolanya.

  • Jika Anda mengatur kudu.schema-emulation.enabled=true dan kudu.schema-emulation.prefix=presto::, tabel dipetakan sebagai berikut:

    Nama tabel Kudu

    Nama tabel 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"

    Catatan

    Karena Kudu tidak mendukung skema secara native, Presto membuat tabel khusus bernama presto::$schemas untuk mengelolanya.

Pemetaan tipe data

Tabel berikut mencantumkan pemetaan tipe data antara Presto dan Kudu.

Tipe Presto

Tipe Kudu

Keterangan

BOOLEAN

BOOL

N/A

TINYINT

INT8

SMALLINT

INT16

INTEGER

INT32

BIGINT

INT64

REAL

FLOAT

DOUBLE

DOUBLE

VARCHAR

STRING

Saat Anda membuat tabel Kudu dari tabel Presto dengan pernyataan CREATE TABLE ... AS ..., panjang maksimum opsional tipe VARCHAR tidak dipertahankan.

VARBINARY

BINARY

TIMESTAMP

UNIXTIME_MICROS

Pemetaan ini mengurangi presisi kolom Kudu dari mikrodetik (µs) menjadi milidetik (ms).

DECIMAL

DECIMAL

Hanya didukung oleh Kudu 1.7.0 dan versi yang lebih baru.

DATE

N/A

Tidak didukung.

Saat Anda membuat tabel Kudu dari tabel Presto dengan pernyataan CREATE TABLE ... AS ..., kolom DATE dikonversi ke tipe STRING.

CHAR

N/A

Tidak didukung.

TIME

JSON

TIME WITH TIME ZONE

TIMESTAMP WITH TIME ZONE

INTERVAL YEAR TO MONTH

INTERVAL DAY TO SECOND

ARRAY

MAP

IPADDRESS

Pernyataan SQL Presto yang didukung

Catatan

Pernyataan ALTER SCHEMA ... RENAME TO ... tidak didukung.

Pernyataan

Deskripsi

SELECT

Tidak ada.

INSERT INTO ... VALUES

Tidak ada.

INSERT INTO ... SELECT ...

Tidak ada.

DELETE

Tidak ada.

DROP SCHEMA

Hanya tersedia saat emulasi skema diaktifkan.

CREATE SCHEMA

Hanya tersedia saat emulasi skema diaktifkan.

CREATE TABLE

Membuat tabel. Untuk detailnya, lihat Buat tabel.

CREATE TABLE ... AS

Tidak ada.

DROP TABLE

Tidak ada.

ALTER TABLE ... RENAME TO ...

Tidak ada.

ALTER TABLE ... ADD COLUMN ...

Menambahkan kolom. Untuk detailnya, lihat Tambah kolom.

ALTER TABLE ... RENAME COLUMN ...

Pernyataan ini hanya berlaku untuk kolom yang bukan bagian dari kunci primer.

ALTER TABLE ... DROP COLUMN ...

SHOW SCHEMAS

Tidak ada.

SHOW TABLES

Tidak ada.

SHOW CREATE TABLE

Tidak ada.

SHOW COLUMNS FROM

Tidak ada.

DESCRIBE

Pernyataan ini setara dengan SHOW COLUMNS FROM.

CALL kudu.system.add_range_partition

Menambahkan partisi range. Untuk detailnya, lihat Partisi range.

CALL kudu.system.drop_range_partition

Menghapus partisi range. Untuk detailnya, lihat Partisi range.

Buat tabel

Untuk membuat tabel, tentukan kolom, tipe data, dan informasi partisi. Anda juga dapat menentukan detail lainnya, seperti format encoding atau format kompresi kolom. Berikut contohnya.

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

Dalam contoh ini, kunci primer terdiri dari kolom user_id dan event_name. Tabel dibagi menjadi lima partisi berdasarkan nilai hash kolom user_id. number_of_replicas diatur ke 3.

Saat membuat tabel, perhatikan hal-hal berikut:

  • Kolom kunci primer harus dicantumkan terlebih dahulu. Kolom kunci partisi harus merupakan subset dari kolom kunci primer.

  • number_of_replicas: Jumlah replika tablet, yang harus berupa angka ganjil. Jika tidak ditentukan, nilai default dari konfigurasi Kudu Master yang digunakan.

  • Kudu mendukung partisi hash dan range. Partisi hash mendistribusikan baris ke dalam bucket berdasarkan nilai hash. Partisi range mendistribusikan baris berdasarkan rentang kunci partisi yang terurut, dan rentang spesifiknya harus dibuat secara eksplisit. Kudu mendukung partisi multi-level. Sebuah tabel harus memiliki setidaknya satu partisi hash atau range. Tabel dapat memiliki beberapa partisi hash tetapi paling banyak satu partisi range.

Properti kolom

Anda dapat menentukan properti kolom berikut selain nama dan tipe data kolom.

Parameter

Tipe

Deskripsi

primary_key

BOOLEAN

Jika true, kolom ini merupakan bagian dari kunci primer.

Kunci primer Kudu memberlakukan batasan unik. Jika Anda menyisipkan baris dengan kunci primer yang sudah ada, baris yang ada akan diperbarui. Untuk informasi selengkapnya, lihat Primary Key Design.

nullable

BOOLEAN

Jika true, kolom dapat bernilai null.

Penting

Kolom kunci primer tidak boleh bernilai null.

encoding

VARCHAR

Format encoding kolom, yang mengurangi penyimpanan dan meningkatkan kinerja kueri.

Jika tidak ditentukan, Kudu secara otomatis memilih encoding berdasarkan tipe data kolom. Nilai yang valid: auto, plain, bitshuffle, runlength, prefix, dictionary, dan group_varint. Untuk informasi selengkapnya, lihat Column Encoding.

compression

VARCHAR

Format kompresi kolom.

Jika tidak ditentukan, Kudu menggunakan format kompresi default. Nilai yang valid: default, no, lz4, snappy, dan zlib. Untuk informasi selengkapnya, lihat Column compression.

Berikut contohnya:

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

Desain partisi

Bagian ini menjelaskan cara menentukan partisi hash dan range.

  • Partisi hash

    • Menentukan satu grup partisi

      Gunakan properti tabel partition_by_hash_columns dan partition_by_hash_buckets untuk menentukan kolom kunci partisi dan jumlah partisi, masing-masing. Semua kolom kunci partisi harus merupakan subset dari kolom kunci primer. Berikut contohnya:

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

      Contoh ini menentukan partisi hash pada kolom col1 dan col2 serta mendistribusikan data ke dalam empat partisi.

    • Menentukan dua grup partisi

      Untuk menentukan dua grup partisi hash independen, Anda juga harus menentukan properti tabel partition_by_second_hash_columns dan partition_by_second_hash_buckets. Berikut contohnya:

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

      Contoh ini menentukan dua grup partisi hash. Grup pertama mendistribusikan baris ke dalam dua partisi berdasarkan kolom col1. Grup kedua mendistribusikan baris ke dalam tiga partisi berdasarkan kolom col2. Tabel memiliki total enam partisi (2 × 3).

  • Partisi range

    Tabel Kudu dapat memiliki paling banyak satu partisi range, yang dapat Anda definisikan menggunakan properti tabel partition_by_range_columns. Saat membuat tabel, Anda dapat menentukan rentang partisi menggunakan properti tabel range_partitions. Untuk mengelola partisi range pada tabel yang sudah ada, gunakan prosedur tersimpan kudu.system.add_range_partition dan kudu.system.drop_range_partition. Berikut contohnya:

    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}]'
    )
    Catatan

    Contoh ini menentukan tabel dengan dua grup partisi hash dan satu partisi range pada kolom event_time. Rentang tersebut dibagi pada timestamp 2018-01-01T00:00:00.

  • Kelola partisi range

    Contoh berikut menunjukkan operasi partisi:

    • Tambah partisi range

      CALL kudu.system.add_range_partition(<YOUR_SCHEMA_NAME>, <YOUR_TABLE_NAME>, <range_partition_as_json_string>)
    • Hapus partisi range

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

    Parameter

    Deskripsi

    <YOUR_SCHEMA_NAME>

    Skema tempat tabel berada.

    <YOUR_TABLE_NAME>

    Nama tabel.

    <range_partition_as_json_string>

    Batas atas dan bawah partisi range, ditentukan sebagai string JSON. Gunakan format '{"lower": <value>, "upper": <value>}'. Jika partisi memiliki beberapa kolom, gunakan format '{"lower": [<value_col1>,...], "upper": [<value_col1>,...]}'. Format nilai bergantung pada tipe data kolom. Daftar berikut memetakan tipe data ke format string JSON yang diperlukan:

    • 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: String yang di-encode Base64.

    Catatan

    Nilai null menunjukkan batas yang tidak terbatas.

    Berikut contohnya:

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

    Contoh ini menambahkan partisi range ke tabel events dalam skema myschema. Batas bawah partisi adalah 2018-01-01, yang sesuai dengan timestamp 2018-01-01T00:00:00.000. Batas atas adalah 2018-06-01.

    Gunakan pernyataan SHOW CREATE TABLE untuk melihat partisi range yang sudah ada. Informasi ini muncul dalam properti tabel range_partitions.

Tambah kolom

Gunakan pernyataan ALTER TABLE ... ADD COLUMN ... untuk menambahkan kolom ke tabel yang sudah ada. Anda juga dapat menentukan properti kolom untuk kolom baru tersebut. Untuk detail tentang properti kolom, lihat Buat tabel.

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