全部产品
Search
文档中心

E-MapReduce:Konektor Kudu

更新时间:Jun 24, 2025

Gunakan konektor Kudu untuk menanyakan, menyisipkan, dan menghapus data dari tabel Kudu.

Informasi latar belakang

Prasyarat

Pastikan kluster Hadoop dengan layanan Kudu dan kluster Trino telah dibuat. Untuk informasi lebih lanjut, lihat Buat kluster.

Batasan

  • Konektor Kudu hanya dapat terhubung ke Kudu versi 1.10 atau lebih baru.

  • Harus ada koneksi jaringan antara kluster Trino dan kluster Hadoop.

  • Nama tabel dan kolom Kudu hanya boleh berisi huruf kecil.

Ubah konfigurasi konektor Kudu

Anda dapat mengubah konfigurasi konektor Kudu. Untuk detail lebih lanjut, lihat Konfigurasikan konektor.

Masuk ke konsol E-MapReduce (EMR) dan buka tab Configure halaman layanan Trino. Pada tab Configure, klik kudu.properties. Ubah atau tambahkan item konfigurasi sesuai kebutuhan bisnis Anda.

Item konfigurasi

Deskripsi

kudu.client.master-addresses

Alamat master Kudu. Jika Anda ingin mengonfigurasi beberapa alamat master Kudu, pisahkan alamat tersebut dengan koma (,).

Format alamat berikut didukung: 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.

null

Untuk memastikan bahwa Anda dapat menulis data ke dan menanyakan data dari tabel Kudu, ubah nilai default localhost menjadi alamat IP atau nama host node master kluster Kudu. Contoh: master-1-1.

kudu.schema-emulation.enabled

Menentukan apakah akan mengaktifkan fitur emulasi skema. Nilai valid:

  • false (default)

  • true

null

Anda dapat mengklik Tambah Item Konfigurasi pada tab kudu.properties untuk menambahkan item konfigurasi ini. Untuk informasi lebih lanjut tentang cara menambahkan item konfigurasi, lihat Tambah item konfigurasi.

kudu.schema-emulation.prefix

Prefiks untuk fitur emulasi skema.

null

Anda harus mengonfigurasi parameter ini jika Anda menyetel item konfigurasi kudu.schema emulation.enabled ke true.

Prefiks standar adalah 'presto::`. Anda dapat meninggalkan parameter ini kosong.

kudu.client.default-admin-operation-timeout

Periode waktu habis default untuk operasi administratif, seperti operasi untuk membuat dan menghapus tabel.

Nilai default: 30. Unit: detik.

kudu.client.default-operation-timeout

Periode waktu habis default untuk operasi pengguna.

Nilai default: 30. Unit: detik.

kudu.client.default-socket-read-timeout

Periode waktu habis default untuk menunggu data dari soket.

Nilai default: 10. Unit: detik.

kudu.client.disable-statistics

Menentukan apakah akan mengaktifkan klien Kudu untuk mengumpulkan informasi statistik. Nilai valid:

  • false (nilai default)

  • true

Menanyakan data

Apache Kudu tidak mendukung skema. Namun, Anda dapat mengonfigurasi konektor Kudu untuk meniru skema.

Emulasi skema dinonaktifkan (default)

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

Sebagai contoh, eksekusi pernyataan SELECT * FROM kudu.default.orders untuk menanyakan data dari tabel orders. Jika Anda menentukan kudu sebagai katalog dan default sebagai skema, Anda dapat mengeksekusi pernyataan SELECT * FROM orders untuk menanyakan data dari tabel tersebut.

Jika nama tabel Kudu berisi karakter khusus, apit nama tersebut dalam sepasang tanda kutip ganda ("). Sebagai contoh, untuk menanyakan data dari tabel special.table!, eksekusi pernyataan SELECT * FROM kudu.default."special.table!".

Contoh:

  1. Buat tabel bernama users di 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
    );
    null

    Saat membuat tabel, tentukan informasi seperti kunci utama, format penyandian atau kompresi kolom, serta partisi hash atau rentang.

  2. Lihat informasi tentang tabel.

    DESCRIBE kudu.default.users;

    Keluaran serupa dengan berikut dikembalikan:

       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 ke dalam tabel.

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

    SELECT * FROM kudu.default.users;

Emulasi skema diaktifkan

Jika Anda mengaktifkan fitur emulasi skema dalam file konfigurasi kudu.properties untuk konektor Kudu di direktori etc/catalog/, tabel Kudu dipetakan ke skema berdasarkan konvensi penamaan.

  • Jika Anda mengonfigurasi kudu.schema-emulation.enabled=true dan kudu.schema-emulation.prefix=, pemetaan berikut berlaku.

    Nama tabel Kudu

    Nama tabel Presto

    orders

    kudu.default.orders

    part1.part2

    kudu.part1.part2

    x.y.z

    kudu.x."y.z"

    null

    Kudu tidak mendukung skema. Presto membuat tabel khusus bernama $schemas untuk mengelola skema.

  • Jika Anda mengonfigurasi kudu.schema-emulation.enabled=true dan kudu.schema-emulation.prefix=presto::, pemetaan berikut berlaku.

    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"

    null

    Kudu tidak mendukung skema. Presto membuat tabel khusus bernama presto::$schemas untuk mengelola skema.

Pemetaan tipe data

Tabel berikut menjelaskan pemetaan antara tipe data Presto dan tipe data Kudu.

Tipe data Presto

Tipe data Kudu

Catatan

BOOLEAN

BOOL

Tidak ada.

TINYINT

INT8

SMALLINT

INT16

INTEGER

INT32

BIGINT

INT64

REAL

FLOAT

DOUBLE

DOUBLE

VARCHAR

STRING

Saat Anda mengeksekusi pernyataan CREATE TABLE ... AS ... untuk membuat tabel Kudu dari tabel Presto yang ada, panjang maksimum untuk VARCHAR hilang.

VARBINARY

BINARY

TIMESTAMP

UNIXTIME_MICROS

Precision kolom Kudu dengan tipe data ini dikurangi dari µs menjadi ms.

DECIMAL

DECIMAL

Tipe data ini hanya didukung oleh server Kudu versi 1.7.0 atau yang lebih baru.

DATE

N/A

Kudu tidak memiliki tipe data yang cocok dengan tipe data ini.

Saat Anda mengeksekusi pernyataan CREATE TABLE ... AS ... untuk membuat tabel Kudu dari tabel Presto yang ada, tipe DATE untuk kolom diubah menjadi tipe STRING.

CHAR

N/A

Kudu tidak memiliki tipe data yang cocok dengan tipe data ini.

TIME

JSON

TIME WITH TIMEZONE

TIMESTAMP WITH TIME ZONE

INTERVAL YEAR TO MONTH

INTERVAL DAY TO SECOND

ARRAY

MAP

IPADDRESS

Pernyataan SQL Presto yang didukung

null

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

Pernyataan

Catatan

SELECT

Tidak ada.

INSERT INTO ... VALUES

Tidak ada.

INSERT INTO ... SELECT ...

Tidak ada.

DELETE

Tidak ada.

DROP SCHEMA

Pernyataan ini hanya didukung jika emulasi skema diaktifkan.

CREATE SCHEMA

Pernyataan ini hanya didukung jika emulasi skema diaktifkan.

CREATE TABLE

Untuk informasi tentang cara membuat tabel, lihat Buat tabel.

CREATE TABLE ... AS

Tidak ada.

DROP TABLE

Tidak ada.

ALTER TABLE ... RENAME TO ...

Tidak ada.

ALTER TABLE ... ADD COLUMN ...

Untuk informasi tentang cara menambah kolom, lihat Tambah kolom.

ALTER TABLE ... RENAME COLUMN ...

Pernyataan ini hanya didukung jika kolom yang ingin Anda ubah nama atau hapus bukan kolom kunci utama.

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

Pernyataan ini digunakan untuk menambahkan partisi rentang. Untuk informasi lebih lanjut, lihat Partisi rentang.

CALL kudu.system.drop_range_partition

Pernyataan ini digunakan untuk menghapus partisi rentang. Untuk informasi lebih lanjut, lihat Partisi rentang.

Buat tabel

Saat membuat tabel, tentukan kolom, tipe data, dan informasi partisi. Anda juga dapat menentukan format penyandian kolom atau format kompresi sesuai kebutuhan bisnis Anda. Contoh:

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, user_id dan event_name adalah kolom kunci utama. Tabel dibagi menjadi lima partisi berdasarkan nilai hash di kolom user_id. Nilai dari number_of_replicas adalah 3.

Perhatikan hal berikut saat mengonfigurasi parameter untuk pernyataan CREATE TABLE:

  • Kolom kunci utama harus ditentukan sebelum kolom lainnya, dan hanya kolom kunci utama yang dapat dikonfigurasikan sebagai kolom kunci partisi.

  • Parameter number_of_replicas bersifat opsional. Parameter ini menentukan jumlah replika tablet dan harus disetel ke angka ganjil. Jika tidak dikonfigurasi, faktor replikasi default dari konfigurasi master Kudu digunakan.

  • Kudu mendukung partisi hash dan partisi rentang. Partisi hash mendistribusikan baris berdasarkan nilai hash ke salah satu dari banyak bucket. Partisi rentang mendistribusikan baris menggunakan kunci partisi rentang yang terurut. Partisi rentang harus dibuat secara eksplisit. Kudu mendukung partisi multi-level. Sebuah tabel harus berisi setidaknya satu partisi hash atau rentang. Sebuah tabel dapat berisi hanya satu partisi rentang tetapi beberapa partisi hash.

Properti kolom

Selain nama kolom dan tipe data, Anda juga dapat menentukan properti kolom lainnya.

Properti kolom

Tipe data

Deskripsi

primary_key

BOOLEAN

Jika parameter ini disetel ke true, kolom digunakan sebagai kolom kunci utama.

Kunci utama Kudu menegakkan batasan unik. Jika Anda menyisipkan baris yang memiliki nilai kunci utama yang sama dengan baris yang sudah ada, baris yang ada diperbarui. Untuk informasi lebih lanjut, lihat Desain Kunci Utama.

nullable

BOOLEAN

Jika Anda menyetel properti ini ke true, kolom dapat berisi nilai null.

null

Kolom kunci utama tidak dapat berisi nilai null.

encoding

VARCHAR

Menentukan format penyandian kolom untuk menghemat ruang penyimpanan dan meningkatkan kinerja kueri.

Jika Anda tidak mengonfigurasi properti ini, Kudu menyandikan data di kolom berdasarkan tipe data kolom. Nilai valid: auto, plain, bitshuffle, runlength, prefix, dictionary, dan group_varint. Untuk informasi lebih lanjut, lihat Penyandian Kolom.

compression

VARCHAR

Menentukan format kompresi kolom.

Jika Anda tidak mengonfigurasi parameter ini, Kudu menggunakan format kompresi default. Nilai valid: default, no, lz4, snappy, dan zlib. Untuk informasi lebih lanjut, lihat Kompresi Kolom.

Contoh:

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

Sebuah tabel dapat berisi hanya satu partisi rentang atau setidaknya satu partisi hash.

  • Definisikan Partisi Hash

    • Definisikan Satu Grup Partisi

      Gunakan properti tabel partition_by_hash_columns untuk menentukan kolom kunci partisi dan gunakan properti tabel partition_by_hash_buckets untuk menentukan jumlah partisi. Kolom kunci partisi harus merupakan subset dari kolom kunci utama. Contoh:

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

      Dalam contoh ini, kolom col1 dan col2 didefinisikan sebagai kolom kunci partisi hash, dan data didistribusikan ke empat partisi.

    • Definisikan Dua Grup Partisi

      Untuk mendefinisikan dua grup partisi hash independen, selain properti tabel yang ditentukan dalam contoh sebelumnya, tentukan properti tabel partition_by_second_hash_columns dan partition_by_second_hash_buckets. Contoh:

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

      Dalam contoh ini, dua grup partisi hash didefinisikan. Di grup partisi hash pertama, baris didistribusikan ke dua partisi berdasarkan kolom col1. Di grup partisi hash kedua, baris didistribusikan ke tiga partisi berdasarkan kolom col2. Total partisi di tabel adalah 6 (2 × 3).

  • Definisikan Partisi Rentang

    Sebuah tabel Kudu dapat berisi hanya satu partisi rentang, yang dapat didefinisikan menggunakan properti tabel partition_by_range_columns. Saat membuat tabel, gunakan properti tabel range_partitions untuk mendefinisikan rentang partisi. Gunakan properti tabel kudu.system.add_range_partition dan kudu.system.drop_range_partition untuk mengelola partisi rentang tabel yang ada. Contoh:

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

    Dalam contoh ini, dua grup partisi hash dan satu partisi rentang didefinisikan. Tabel dipartisi rentang pada bidang event_time, dan data dibagi berdasarkan 2018-01-01T00:00:00.

  • Kelola Partisi Rentang

    Gunakan prosedur tersimpan untuk menambahkan atau menghapus partisi rentang dari tabel yang ada.

    Contoh:

    • Tambahkan Partisi Rentang

      CALL kudu.system.add_range_partition(<YOUR_SCHEMA_NAME>, <YOUR_TABLE_NAME>, <range_partition_as_json_string>)
    • Hapus Partisi Rentang

      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 rentang. Anda harus mengonfigurasi parameter ini dalam format JSON '{"lower": <value>, "upper": <value>}'. Jika partisi memiliki beberapa kolom, Anda harus mengonfigurasi parameter ini dalam format '{"lower": [<value_col1>,...], "upper": [<value_col1>,...]}'. Format nilai spesifik batas atas dan bawah bergantung pada tipe data kolom. Pemetaan antara tipe data dan format string JSON:

    • 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-enkode Base64

    null

    Jika Anda menyetel parameter ini ke null, partisi tidak terbatas.

    Contoh:

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

    Dalam contoh ini, partisi rentang ditambahkan ke tabel events di skema myschema. Batas bawah partisi adalah 2018-01-01, dengan nilai akurat 2018-01-01T00:00:00.000. Batas atas partisi adalah 2018-06-01.

    Eksekusi pernyataan SHOW CREATE TABLE untuk menanyakan partisi rentang yang ada dari tabel. Properti tabel range_partitions dalam hasil yang dikembalikan menunjukkan informasi partisi tabel.

Tambah kolom

Eksekusi pernyataan ALTER TABLE ... ADD COLUMN ... untuk menambahkan kolom ke tabel yang ada. Anda juga dapat menggunakan properti kolom untuk menambahkan kolom. Untuk informasi lebih lanjut tentang properti kolom, lihat Buat tabel.

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