Gunakan konektor Kudu untuk menanyakan, menyisipkan, dan menghapus data dari tabel Kudu.
Informasi latar belakang
Topik ini menjelaskan konektor Kudu dan operasi yang dapat Anda lakukan:
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:
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 Prefiks standar adalah |
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:
|
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:
Buat tabel bernama
usersdiskema 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 );nullSaat membuat tabel, tentukan informasi seperti kunci utama, format penyandian atau kompresi kolom, serta partisi hash atau rentang.
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)Sisipkan data ke dalam tabel.
INSERT INTO kudu.default.users VALUES (1, 'Donald', 'Duck'), (2, 'Mickey', 'Mouse');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=truedankudu.schema-emulation.prefix=, pemetaan berikut berlaku.Nama tabel Kudu
Nama tabel Presto
orderskudu.default.orderspart1.part2kudu.part1.part2x.y.zkudu.x."y.z"nullKudu tidak mendukung skema. Presto membuat tabel khusus bernama
$schemasuntuk mengelola skema.Jika Anda mengonfigurasi
kudu.schema-emulation.enabled=truedankudu.schema-emulation.prefix=presto::, pemetaan berikut berlaku.Nama tabel Kudu
Nama tabel Presto
orderskudu.default.orderspart1.part2kudu.default."part1.part2"x.y.zkudu.default."x.y.z"presto::part1.part2kudu.part1.part2presto::x.y.zkudu.x."y.z"nullKudu tidak mendukung skema. Presto membuat tabel khusus bernama
presto::$schemasuntuk 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 |
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 |
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
Pernyataan ALTER SCHEMA ... RENAME TO ... tidak didukung.
Pernyataan | Catatan |
| Tidak ada. |
| Tidak ada. |
| Tidak ada. |
| Tidak ada. |
| Pernyataan ini hanya didukung jika emulasi skema diaktifkan. |
| Pernyataan ini hanya didukung jika emulasi skema diaktifkan. |
| Untuk informasi tentang cara membuat tabel, lihat Buat tabel. |
| Tidak ada. |
| Tidak ada. |
| Tidak ada. |
| Untuk informasi tentang cara menambah kolom, lihat Tambah kolom. |
| Pernyataan ini hanya didukung jika kolom yang ingin Anda ubah nama atau hapus bukan kolom kunci utama. |
| |
| Tidak ada. |
| Tidak ada. |
| Tidak ada. |
| Tidak ada. |
| Pernyataan ini setara dengan |
| Pernyataan ini digunakan untuk menambahkan partisi rentang. Untuk informasi lebih lanjut, lihat Partisi rentang. |
| 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_replicasbersifat 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_bucketsuntuk 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 )nullDalam 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_columnsdanpartition_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 )nullDalam 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 tabelrange_partitionsuntuk mendefinisikan rentang partisi. Gunakan properti tabelkudu.system.add_range_partitiondankudu.system.drop_range_partitionuntuk 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}]' )nullDalam contoh ini, dua grup partisi hash dan satu partisi rentang didefinisikan. Tabel dipartisi rentang pada bidang
event_time, dan data dibagi berdasarkan2018-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
nullJika 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"}')nullDalam contoh ini, partisi rentang ditambahkan ke tabel
eventsdi skemamyschema. Batas bawah partisi adalah2018-01-01, dengan nilai akurat2018-01-01T00:00:00.000. Batas atas partisi adalah2018-06-01.Eksekusi pernyataan
SHOW CREATE TABLEuntuk menanyakan partisi rentang yang ada dari tabel. Properti tabelrange_partitionsdalam 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')