Katalog Hive adalah katalog eksternal yang didukung oleh StarRocks sejak versi 2.3.
Informasi latar belakang
Katalog Hive memungkinkan Anda untuk:
Langsung menanyakan data Hive tanpa perlu membuat tabel secara manual.
Memproses dan memodelkan data Hive serta mengimpornya ke dalam StarRocks menggunakan INSERT INTO, atau menggunakan materialized views asinkron pada versi 3.1 dan setelahnya.
Membuat atau menghapus database dan tabel Hive di StarRocks. Anda juga dapat menulis data dari tabel StarRocks ke tabel Hive dalam format Parquet (dari v3.2), ORC, atau TextFile (dari v3.3) menggunakan INSERT INTO.
Untuk mengakses data di Hive, kluster StarRocks harus dapat mengakses sistem penyimpanan dan layanan metadata kluster Hive. Saat ini, StarRocks mendukung sistem penyimpanan dan layanan metadata berikut:
Sistem File Terdistribusi Hadoop (HDFS) atau Alibaba Cloud Object Storage Service (OSS).
Layanan metadata. Saat ini, layanan metadata yang didukung termasuk Data Lake Formation DLF 1.0 (Legacy) dan Hive Metastore (HMS).
Batasan
StarRocks mendukung menanyakan data Hive dalam format file Parquet, ORC, TextFile, Avro, RCFile, dan SequenceFile:
File Parquet mendukung format kompresi SNAPPY, LZ4, ZSTD, GZIP, dan NO_COMPRESSION. Dukungan untuk format kompresi LZO ditambahkan pada v3.1.5.
File ORC mendukung format kompresi ZLIB, SNAPPY, LZO, LZ4, ZSTD, dan NO_COMPRESSION.
File TextFile mendukung format kompresi LZO dari v3.1.5.
StarRocks tidak mendukung menanyakan data Hive dengan tipe INTERVAL, BINARY, atau UNION. Selain itu, untuk tabel Hive dalam format TextFile, StarRocks tidak mendukung tipe data MAP dan STRUCT.
StarRocks mendukung menulis data ke Hive dalam format file Parquet (v3.2 dan setelahnya), ORC, dan TextFile (v3.3 dan setelahnya):
File Parquet dan ORC mendukung format kompresi NO_COMPRESSION, SNAPPY, LZ4, ZSTD, dan GZIP.
TextFile mendukung format NO_COMPRESSION.
Anda dapat mengatur algoritma kompresi untuk menulis ke tabel Hive menggunakan variabel sistem
connector_sink_compression_codec.
Membuat Katalog Hive
Sintaksis
CREATE EXTERNAL CATALOG <catalog_name>
[COMMENT <comment>]
PROPERTIES
(
"type" = "hive",
GeneralParams,
MetastoreParams
)Deskripsi parameter
Konfigurasi parameter bervariasi tergantung pada layanan metadata yang digunakan oleh Hive.
Menggunakan HMS
catalog_name: Nama katalog Hive. Parameter ini wajib. Nama tersebut harus memenuhi persyaratan berikut:Harus dimulai dengan huruf dan hanya boleh berisi huruf (a-z atau A-Z), angka (0-9), dan garis bawah (_).
Total panjangnya tidak boleh melebihi 64 karakter.
comment: Deskripsi katalog Hive. Parameter ini opsional.type: Jenis sumber data. Atur ini kehive.GeneralParams: Sekumpulan parameter untuk pengaturan umum.GeneralParamsmencakup parameter berikut.Parameter
Wajib
Deskripsi
enable_recursive_listing
Tidak
Menentukan apakah StarRocks membaca data secara rekursif dari file dalam direktori tabel atau partisi, termasuk subdirektori. Nilai yang valid:
true (default): Melakukan traversal rekursif pada direktori.
false: Membaca data hanya dari file di tingkat saat ini dari direktori tabel atau partisi.
MetastoreParams: Parameter terkait cara StarRocks mengakses metadata kluster Hive.Properti
Deskripsi
hive.metastore.type
Jenis metastore. Nilai default kosong, yang berarti menggunakan Hive Metastore.
hive.metastore.uris
URI dari Hive Metastore. Formatnya adalah
thrift://<IP_address_of_Hive_Metastore>:<port>. Port default adalah 9083.
Menggunakan DLF 1.0 (Legacy)
catalog_name: Nama katalog Hive. Parameter ini wajib. Nama tersebut harus memenuhi persyaratan berikut:Harus dimulai dengan huruf dan hanya boleh berisi huruf (a-z atau A-Z), angka (0-9), dan garis bawah (_).
Total panjangnya tidak boleh melebihi 64 karakter.
comment: Deskripsi katalog Hive. Parameter ini opsional.type: Jenis sumber data. Atur ini kehive.GeneralParams: Sekumpulan parameter untuk pengaturan umum.GeneralParamsmencakup parameter berikut.Parameter
Wajib
Deskripsi
enable_recursive_listing
Tidak
Menentukan apakah StarRocks membaca data secara rekursif dari file dalam direktori tabel atau partisi, termasuk subdirektori. Nilai yang valid:
true (default): Melakukan traversal rekursif pada direktori.
false: Membaca data hanya dari file di tingkat saat ini dari direktori tabel atau partisi.
MetastoreParams: Parameter terkait cara StarRocks mengakses metadata kluster Hive.Properti
Deskripsi
hive.metastore.type
Jenis layanan metadata yang digunakan oleh Hive. Atur ini ke
dlf.dlf.catalog.id
ID dari katalog data yang ada di DLF 1.0. Parameter ini hanya diperlukan ketika
hive.metastore.typedisetel kedlf. Jika parameterdlf.catalog.idtidak ditentukan, sistem akan menggunakan DLF Catalog default.
Contoh
Contoh berikut menggunakan HDFS untuk penyimpanan dan membuat katalog Hive bernama hive_catalog.
Menggunakan HMS
CREATE EXTERNAL CATALOG hive_catalog
PROPERTIES
(
"type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083"
);Menggunakan DLF 1.0 (Legacy)
CREATE EXTERNAL CATALOG hive_catalog
PROPERTIES
(
"type" = "hive",
"hive.metastore.type" = "dlf",
"dlf.catalog.id" = "sr_dlf"
);Menampilkan Katalog Hive
Anda dapat menggunakan SHOW CATALOGS untuk menanyakan semua katalog dalam kluster StarRocks saat ini.
SHOW CATALOGS;Anda juga dapat menggunakan SHOW CREATE CATALOG untuk menanyakan pernyataan pembuatan katalog eksternal. Sebagai contoh, jalankan perintah berikut untuk menanyakan pernyataan pembuatan untuk katalog Hive hive_catalog.
SHOW CREATE CATALOG hive_catalog;Beralih antara Katalog Hive dan database
Anda dapat beralih ke katalog Hive target dan database dengan cara berikut:
Pertama, tentukan katalog Hive untuk sesi saat ini dengan
SET CATALOG. Kemudian, tentukan database dengan USE.-- Beralih katalog untuk sesi saat ini. SET CATALOG <catalog_name>; -- Tentukan database untuk sesi saat ini. USE <db_name>;Gunakan USE untuk langsung beralih sesi ke database tertentu di bawah katalog Hive target.
USE <catalog_name>.<db_name>;
Hapus Katalog Hive
Anda dapat menggunakan DROP CATALOG untuk menghapus katalog eksternal.
Sebagai contoh, jalankan perintah berikut untuk menghapus hive_catalog.
DROP Catalog hive_catalog;Membuat Database Hive
Sebagaimana katalog internal StarRocks, jika Anda memiliki izin CREATE DATABASE untuk katalog Hive, Anda dapat membuat database di katalog tersebut menggunakan pernyataan CREATE DATABASE. Fitur ini didukung mulai dari v3.2.
Anda dapat menggunakan GRANT dan REVOKE untuk memberikan dan mencabut izin bagi pengguna dan peran.
Sintaksis
Beralih ke katalog Hive target dan jalankan pernyataan berikut untuk membuat database Hive.
CREATE DATABASE <database_name>
[PROPERTIES ("location" = "<prefix>://<path_to_database>/<database_name.db>")]Deskripsi parameter
Jika Anda tidak menentukan location saat membuat database, sistem akan menggunakan jalur default <warehouse_location>/<database_name.db>.
Parameter location menentukan jalur file untuk database. Ini mendukung HDFS dan Layanan Penyimpanan Objek (OSS):
Untuk HDFS, atur
Prefixkehdfs.Alibaba Cloud OSS atau OSS-HDFS: Atur nilainya menjadi
oss.
Hapus Database Hive
Sebagaimana database internal StarRocks, jika Anda memiliki izin DROP untuk database Hive, Anda dapat menghapusnya menggunakan DROP DATABASE. Fitur ini didukung mulai dari v3.2. Anda hanya dapat menghapus database kosong.
Anda dapat menggunakan GRANT dan REVOKE untuk memberikan dan mencabut izin bagi pengguna dan peran.
Operasi penghapusan database tidak menghapus jalur file yang sesuai di HDFS atau Layanan Penyimpanan Objek (OSS).
Beralih ke katalog Hive target dan jalankan pernyataan berikut untuk menghapus database Hive.
DROP DATABASE <database_name>;Membuat Tabel Hive
Sebagaimana database internal StarRocks, jika Anda memiliki izin CREATE TABLE untuk database Hive, Anda dapat membuat Managed Table di database tersebut menggunakan CREATE TABLE, CREATE TABLE AS SELECT (CTAS), atau CREATE TABLE LIKE.
Fitur ini didukung mulai dari v3.2, yang awalnya hanya mendukung pembuatan tabel Hive dalam format Parquet. Mulai dari v3.3, fitur ini juga mendukung pembuatan tabel Hive dalam format ORC dan TextFile.
Beralih ke katalog Hive target dan database, kemudian jalankan pernyataan berikut untuk membuat Managed Table Hive.
Sintaksis
CREATE TABLE [IF NOT EXISTS] [database.]table_name
(column_definition1[, column_definition2, ...
partition_column_definition1,partition_column_definition2...])
[partition_desc]
[PROPERTIES ("key" = "value", ...)]
[AS SELECT query]
[LIKE [database.]<source_table_name>]Deskripsi parameter
column_definition
Sintaksis untuk
column_definitionadalah sebagai berikut.col_name col_type [COMMENT 'comment']Parameter dijelaskan dalam tabel berikut.
Parameter
Deskripsi
col_nameNama kolom.
col_typeTipe data kolom.
Saat ini, tipe data berikut didukung: TINYINT, SMALLINT, INT, BIGINT, FLOAT, DOUBLE, DECIMAL, DATE, DATETIME, CHAR, VARCHAR[(length)], ARRAY, MAP, dan STRUCT.
Tipe LARGEINT, HLL, dan BITMAP tidak didukung.
CatatanSemua kolom non-partisi key secara default adalah
NULL. Ini setara dengan menentukanDEFAULT "NULL"dalam pernyataan CREATE TABLE. Sebaliknya, kolom partisi key harus dideklarasikan terakhir dan tidak bolehNULL.partition_desc
Sintaksis untuk
partition_descadalah sebagai berikut.PARTITION BY (par_col1[, par_col2...])Saat ini, StarRocks hanya mendukung transformasi identitas. Ini berarti partisi dibuat untuk setiap nilai partisi unik.
CatatanKolom partisi key harus dideklarasikan terakhir. Mereka mendukung tipe data selain FLOAT, DOUBLE, DECIMAL, atau DATETIME, dan tidak mendukung nilai NULL. Selain itu, urutan kolom partisi key yang dideklarasikan dalam partition_desc harus konsisten dengan urutan kolom yang didefinisikan dalam column_definition.
PROPERTIES
Anda dapat mendeklarasikan properti untuk tabel Hive dalam
PROPERTIESmenggunakan format"key" = "value". Tabel berikut mencantumkan beberapa properti umum.Properti
Deskripsi
location
Jalur file untuk Managed Table. Saat menggunakan HMS sebagai layanan metadata, Anda tidak perlu menentukan parameter
location.file_format
Format file Managed Table. Saat ini, format Parquet, ORC, dan TextFile didukung. Format ORC dan TextFile didukung mulai dari v3.3. Nilai valid:
parquet,orc,textfile. Default:parquet.compression_codec
Format kompresi Managed Table. Properti ini sudah tidak digunakan lagi mulai dari v3.2.3. Sejak saat itu, algoritma kompresi untuk menulis ke tabel Hive dikendalikan oleh variabel sesi connector_sink_compression_codec.
Contoh
Pernyataan CREATE TABLE berikut menggunakan format Parquet default sebagai contoh.
Buat tabel non-partisi
unpartition_tbldengan dua kolom:iddanscore.CREATE TABLE unpartition_tbl ( id int, score double );Buat tabel partisi
partition_tbl_1dengan tiga kolom:action,id, dandt. Tentukaniddandtsebagai kolom partisi key.CREATE TABLE partition_tbl_1 ( action varchar(20), id int NOT NULL, dt date NOT NULL ) PARTITION BY(id,dt);Tanyakan tabel sumber
partition_tbl_1dan buat tabel partisipartition_tbl_2berdasarkan hasil kueri. Tentukaniddandtsebagai kolom partisi key untukpartition_tbl_2:CREATE TABLE partition_tbl_2 PARTITION BY (id, dt) AS SELECT * from partition_tbl_1;
Lihat skema tabel Hive
Anda dapat melihat skema tabel Hive dengan cara berikut:
Lihat skema tabel
DESC[RIBE] <catalog_name>.<database_name>.<table_name>;Lihat skema tabel dan lokasi file dari perintah CREATE
SHOW CREATE TABLE <catalog_name>.<database_name>.<table_name>;
Lihat data tabel Hive
Metode 1: Langsung menanyakan data tabel
SELECT * FROM <catalog_name>.<database_name>.<table_name>;Metode 2: Lihat dan tanyakan langkah demi langkah
Lihat database dalam kluster Hive yang termasuk dalam katalog tertentu.
SHOW DATABASES FROM <catalog_name>;Tanyakan data tabel target.
SELECT count(*) FROM <table_name> LIMIT 10;
Impor data Hive
Misalkan Anda memiliki tabel OLAP bernama olap_tbl. Anda dapat mentransformasi data dalam tabel ini dan mengimpornya ke StarRocks sebagai berikut.
INSERT INTO default_catalog.olap_db.olap_tbl SELECT * FROM hive_table;Berikan izin pada tabel dan tampilan Hive
Anda dapat menggunakan GRANT untuk memberikan peran izin query pada semua tabel dan tampilan dalam katalog Hive. Sintaksis perintah adalah sebagai berikut.
GRANT SELECT ON ALL TABLES IN ALL DATABASES TO ROLE <role_name>Sebagai contoh, jalankan perintah berikut untuk membuat peran hive_role_table, beralih ke katalog Hive hive_catalog, dan kemudian berikan izin query pada semua tabel dan tampilan di hive_catalog kepada hive_role_table.
-- Buat peran hive_role_table.
CREATE ROLE hive_role_table;
-- Beralih ke katalog data hive_catalog.
SET CATALOG hive_catalog;
-- Berikan izin query pada semua tabel dan tampilan di hive_catalog kepada hive_role_table.
GRANT SELECT ON ALL TABLES IN ALL DATABASES TO ROLE hive_role_table;Sisipkan data ke tabel Hive
Sebagaimana tabel internal StarRocks, jika Anda memiliki izin INSERT untuk tabel Hive (Managed Table atau External Table), Anda dapat menggunakan INSERT untuk menulis data dari tabel StarRocks ke tabel Hive tersebut.
Fitur ini didukung mulai dari v3.2, yang awalnya hanya mendukung penulisan ke tabel Hive dalam format Parquet. Mulai dari v3.3, fitur ini juga mendukung penulisan ke tabel Hive dalam format ORC dan TextFile.
Catatan bahwa fitur untuk menulis data ke External Tables dinonaktifkan secara default. Anda harus mengaktifkannya menggunakan variabel sistem ENABLE_WRITE_HIVE_EXTERNAL_TABLE.
Anda dapat menggunakan GRANT dan REVOKE untuk memberikan dan mencabut izin bagi pengguna dan peran.
Anda dapat menggunakan variabel sesi connector_sink_compression_codec untuk menentukan algoritma kompresi saat menulis ke tabel Hive.
Beralih ke katalog Hive target dan database, lalu gunakan sintaksis berikut untuk menulis data dari tabel StarRocks ke tabel Hive.
Sintaksis
INSERT {INTO | OVERWRITE} <table_name>
[ (column_name [, ...]) ]
{ VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query }
-- Tulis data ke partisi tertentu.
INSERT {INTO | OVERWRITE} <table_name>
PARTITION (par_col1=<value> [, par_col2=<value>...])
{ VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query }Kolom partisi key tidak boleh NULL. Oleh karena itu, Anda harus memastikan bahwa kolom partisi key memiliki nilai selama impor data.
Deskripsi parameter
Parameter | Deskripsi |
INTO | Menambahkan data ke tabel target. |
OVERWRITE | Menimpa data di tabel target. |
column_name | Kolom target untuk impor. Anda dapat menentukan satu atau lebih kolom. Saat menentukan beberapa kolom, pisahkan mereka dengan koma ( |
expression | Ekspresi yang digunakan untuk memberikan nilai ke kolom yang sesuai. |
DEFAULT | Memberikan nilai default ke kolom yang sesuai. |
query | Pernyataan kueri. Hasil dari kueri diimpor ke tabel target. Pernyataan kueri mendukung sintaksis kueri SQL apa pun yang didukung oleh StarRocks. |
PARTITION | Partisi target untuk impor. Anda harus menentukan semua kolom partisi key dari tabel target. Urutan kolom partisi key yang ditentukan dapat berbeda dari urutan yang didefinisikan saat pembuatan tabel. Saat menentukan partisi, Anda tidak dapat menentukan kolom target impor berdasarkan nama kolom ( |
Contoh
Pernyataan INSERT berikut menggunakan format Parquet default sebagai contoh.
Sisipkan tiga baris data berikut ke dalam tabel
partition_tbl_1.INSERT INTO partition_tbl_1 VALUES("buy", 1, "2023-09-01"),("sell", 2, "2023-09-02"),("buy", 3, "2023-09-03");Sisipkan hasil kueri SELECT yang mencakup perhitungan sederhana ke dalam tabel
partition_tbl_1, tentukan urutan kolom.INSERT INTO partition_tbl_1 (id, action, dt) SELECT 1+1, 'buy', '2023-09-03';Sisipkan hasil kueri SELECT yang membaca data dari tabel
partition_tbl_1itu sendiri.INSERT INTO partition_tbl_1 SELECT 'buy', 1, date_add(dt, INTERVAL 2 DAY)FROM partition_tbl_1WHERE id=1;Sisipkan hasil kueri SELECT ke dalam partisi tempat
dt='2023-09-01'danid=1dalam tabelpartition_tbl_2.Metode 1
INSERT INTO partition_tbl_2 SELECT 'order', 1, '2023-09-01';Metode 2
INSERT INTO partition_tbl_2 partition(dt='2023-09-01',id=1) SELECT 'order';
Timpa semua nilai dalam kolom
actiondengancloseuntuk partisi tempatdt='2023-09-01'danid=1dalam tabelpartition_tbl_1:Metode 1
INSERT OVERWRITE partition_tbl_1 SELECT 'close', 1, '2023-09-01';Metode 2
INSERT OVERWRITE partition_tbl_1 partition(dt='2023-09-01',id=1) SELECT 'close';
Hapus tabel Hive
Sebagaimana tabel internal StarRocks, jika Anda memiliki izin DROP untuk tabel Hive, Anda dapat menghapusnya menggunakan DROP TABLE. Fitur ini didukung mulai dari v3.2. Perhatikan bahwa saat ini Anda hanya dapat menghapus Managed Tables Hive.
Anda dapat menggunakan GRANT dan REVOKE untuk memberikan dan mencabut izin bagi pengguna dan peran.
Untuk menghapus tabel, Anda harus menentukan kata kunci FORCE dalam pernyataan DROP TABLE. Operasi ini menghapus data tabel di HDFS atau Layanan Penyimpanan Objek tetapi tidak menghapus jalur file yang sesuai. Jalankan operasi ini dengan hati-hati.
Beralih ke katalog Hive target dan database, lalu jalankan pernyataan berikut untuk menghapus tabel Hive.
DROP TABLE <table_name> FORCEPerbarui cache metadata secara manual atau otomatis
Secara default, StarRocks menyimpan cache metadata Hive dan secara otomatis memperbaruinya dalam mode asinkron untuk meningkatkan kinerja kueri. Jika Anda melakukan perubahan skema atau pembaruan lainnya pada tabel Hive, Anda dapat memperbarui metadatanya secara manual menggunakan perintah berikut untuk memastikan bahwa StarRocks dapat segera menghasilkan rencana kueri yang efisien.
REFRESH EXTERNAL TABLE <table_name> [PARTITION ('partition_name', ...)]Pembaruan metadata manual cocok untuk situasi berikut:
File data dalam partisi yang ada telah berubah, misalnya, setelah Anda menjalankan perintah
INSERT OVERWRITE ... PARTITION ....Skema tabel Hive telah berubah.
Tabel Hive dihapus dan kemudian tabel Hive baru dengan nama yang sama dibuat.
Saat membuat katalog Hive, Anda menentukan
"enable_cache_list_names" = "true"dalamPROPERTIES. Dalam hal ini, Anda harus menanyakan partisi baru setelah ditambahkan di sisi Hive.
Sejak v2.5.5, StarRocks telah mendukung pembaruan berkala cache metadata Hive. Saat fitur ini diaktifkan, cache metadata Hive secara otomatis diperbarui setiap 10 menit secara default. Dalam kebanyakan kasus, Anda tidak perlu melakukan pembaruan manual. Pembaruan manual hanya diperlukan ketika Anda menambahkan partisi baru dan perlu menanyakan datanya segera.
REFRESH EXTERNAL TABLEhanya memperbarui tabel dan partisi yang sudah disimpan dalam cache FE.
Referensi
Untuk informasi lebih lanjut tentang Hive, lihat Ikhtisar.