Hive Veri Türleri: Hive'da Veritabanları Nasıl Oluşturulur ve Bırakılır
⚡ Akıllı Özet
Hive veri tipleri, her tablo sütununun ne tutabileceğini tanımlar ve CREATE DATABASE ve DROP DATABASE komutları, bu tabloların Hive meta deposunda bulunduğu ad alanını kurar veya kaldırır.

Veri tipleri, Hive sorgu dili ve veri modellemesinde çok önemli unsurlardır. Tablo sütun tiplerini tanımlamak için veri tiplerini ve kullanımlarını bilmemiz gerekir.
Aşağıda Hive'da bulunan bazı veri türlerine ilişkin kısa bir genel bakış verilmiştir:
- Sayısal Türler
- Dize Türleri
- Tarih/Saat Türleri
- Karmaşık Tipler
Hive'daki veri türleri
Her Hive sütunu aşağıdaki türlerden biriyle tanımlanır. İlk olarak temel veri tipleri gelir, ardından tek bir sütunda birden fazla değer tutabilen karmaşık tipler gelir.
Hive Sayısal Veri Türleri
Sayısal sütunlar tek bayttan sekiz bayta kadar değişebilir, bu nedenle değerlere uyan en küçük türü seçmek hem depolama hem de tarama maliyetini düşük tutar.
| Menşei | Bellek ayırma |
|---|---|
| KÜÇÜK | 1 baytlık işaretli tamsayı (-128 ila 127) |
| KÜÇÜK | 2 baytlık işaretli tamsayı (-32,768 ila 32,767) |
| INT | 4 baytlık işaretli tamsayı (-2,147,483,648 ila 2,147,483,647) |
| BÜYÜK | 8 baytlık işaretli tamsayı (-9,223,372,036,854,775,808 ila 9,223,372,036,854,775,807) |
| FLOAT | 4 baytlık tek hassasiyetli kayan noktalı sayı |
| ÇİFT | 8 baytlık çift hassasiyetli kayan noktalı sayı |
| ONDALIK | Bu türde hassasiyet ve ölçeği DECIMAL(hassasiyet, ölçek) olarak tanımlayabiliriz. Bunlar belirtilmediğinde Hive, DECIMAL(10,0) kullanır. |
Hive Dizesi Veri Türleri
Karakter sütunları üç şekilde gelir ve aralarındaki fark, Hive'ın belirtilen bir uzunluğu zorunlu kılıp kılmadığıdır.
| Menşei | uzunluk |
|---|---|
| TANK | Sabit uzunlukta, en fazla 255 karakter. Daha kısa değerler boşluklarla doldurulur. |
| VARCHAR | 1 ila 65,535 karakter arası. Daha uzun bir değer otomatik olarak kısaltılır. |
| STRING | Burada uzunluğu tanımlayabiliriz (sınır yok). |
Hive Tarih/Saat Veri Türleri
Zamansal sütunlar herhangi bir saat dilimi farkı olmadan saklanır; bu, farklı kümeler tarafından yazılan değerleri karşılaştırmadan önce hatırlanması gereken bir noktadır.
| Menşei | kullanım |
|---|---|
| Zaman Damgası | Gelenekseli destekler Unix isteğe bağlı nanosaniye hassasiyetiyle zaman damgası |
| Tarih | YYYY-MM-DD formatındadır. Tarih türü için desteklenen değer aralığı, temel öğenin desteğine bağlı olarak 0000-01-01 ile 9999-12-31 arasındadır. Java tipik tarih |
Hive Çeşitli Veri Tipleri
Sayısal, dize ve tarih ailelerinin dışında kalan ancak gerçek şemalarda düzenli olarak karşımıza çıkan iki temel veri türü daha vardır.
| Menşei | kullanım |
|---|---|
| BOOLE | Doğru veya yanlış değerlerini saklar. |
| İKİLİ | Ham içeriğin STRING sütununda görünmesini engelleyen bir bayt dizisi depolar. |
Hive Karmaşık Veri Türleri
Karmaşık veri tipleri, değerleri tek bir sütun içinde iç içe yerleştirir; bu da ilişkisel bir tasarımın gerektireceği fazladan birleştirmeyi ortadan kaldırır.
| Menşei | kullanım |
|---|---|
| Diziler | SIRALAMAK Negatif değerlere ve sabit olmayan ifadelere izin verilmez |
| Haritalar | HARİTA Negatif değerlere ve sabit olmayan ifadelere izin verilmez |
| yapılar | YAPI |
| sendika | BİRLİK TİPİ |
Hive Karmaşık Veri Tipleri Örneği
Yukarıdaki tablo bildirim biçimini vermektedir. Aşağıdaki ifade, üç karmaşık türü tek bir tabloda bir araya getirerek sınırlayıcı maddeleri ve erişim sözdizimini birlikte görmeyi sağlar.
CREATE TABLE employees ( name STRING, skills ARRAY<STRING>, deductions MAP<STRING, FLOAT>, address STRUCT<street:STRING, city:STRING, pin:INT> ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' COLLECTION ITEMS TERMINATED BY ',' MAP KEYS TERMINATED BY ':' LINES TERMINATED BY '\n' STORED AS TEXTFILE;
Burada üç ayrı ayırıcıya ihtiyaç vardır: biri sütunlar arasında, ikincisi bir DİZİ veya YAPI öğeleri arasında ve üçüncüsü bir MAP anahtarı ile değeri arasında. Tablo oluşturulduktan sonra, her karmaşık sütun kendi erişimcisiyle okunur.
SELECT name, skills[0], deductions['tax'], address.city FROM employees;
Aşağıdaki tablo, hangi aksesuarın hangi türe ait olduğunu özetlemektedir.
| Menşei | Bir değerin nasıl okunduğu |
|---|---|
| DİZİ | Sıfır tabanlı endeks, örneğin beceriler[0] |
| MAP | Köşeli parantez içindeki anahtar arama, örneğin indirimler['vergi'] |
| YAPI | Alan adında nokta gösterimi kullanılır, örneğin address.city |
| BİRLİK TİPİ | Sorgu desteğinin eksik kalması nedeniyle nadiren kullanılır. |
Karmaşık tipler iç içe geçebilir, bu nedenle DİZİ > geçerli bir sütun bildirimidir. Sütun düzeni belirlendikten sonra, tabloların kendileri, aşağıda açıklanan ifadelerle oluşturulur. Hive'da tablo oluşturma, değiştirme ve silme işlemleri.
Hive'da Veritabanları Nasıl Oluşturulur ve Bırakılır
Hive'da veritabanı, tabloları gruplandıran bir ad alanıdır; bu nedenle, herhangi bir tablo çalışmasına başlamadan önce oluşturulması gereken ilk nesnedir. Aşağıda Hive'da veritabanı oluşturma ve silme adımları verilmiştir.
Adım 1) Hive'da Veritabanı Oluşturma
Hive shell'de veritabanı oluşturmak için aşağıdaki sözdiziminde gösterildiği gibi komutu kullanmalıyız:
Sözdizimi:
Create database <DatabaseName>
Örnek: "guru99" veritabanını oluşturun
Aşağıdaki ekran görüntüsü, oluşturma ifadesini ve ardından kümedeki her veritabanını listeleyen bir "show" komutunu göstermektedir.
Yukarıdaki ekran görüntüsünden de anlaşıldığı gibi, iki şey yapıyoruz:
- Hive'da “guru99” veritabanı oluşturuluyor
- “show” komutunu kullanarak mevcut veritabanlarını görüntüleme
Aynı ekranda, "show" komutunu çalıştırdığımızda en sonda "guru99" veritabanı görüntülenir; bu da "guru99" veritabanının başarıyla oluşturulduğu anlamına gelir.
Adım 2) Hive'da Veritabanını Sil
Damla içinping Hive shell'de bir veritabanını silmek için aşağıdaki sözdiziminde gösterildiği gibi "drop" komutunu kullanmalıyız:
Sözdizimi:
Drop database <DatabaseName>
Örnek: guru99 veritabanını sil
Sonraki ekran görüntüsünde, önce `drop` komutu çalıştırılıyor ve ardından gelen `show` komutu artık veritabanını listelemiyor.
Yukarıdaki ekran görüntüsünde iki şey yapıyoruz:
- Biz bıraktıkping Hive'dan 'guru99' veritabanı
- Aynı işlemi "show" komutuyla da kontrol etmek.
Aynı ekranda, "show" komutuyla veritabanlarını kontrol ettikten sonra, "guru99" veritabanı Hive içinde görünmüyor. Dolayısıyla, "guru99" veritabanının silindiğini artık doğrulayabiliriz.
Hive Veritabanı Komutları: USE, DESCRIBE, SHOW ve ALTER DATABASE
Yukarıdaki iki ifade en kısa hallerini kullanmaktadır. Belgelenmiş sözdizimi, dosyaların nereye kaydedileceğine ve adın zaten alınmış olması durumunda ne olacağına karar veren isteğe bağlı maddeler içermektedir.
CREATE DATABASE [IF NOT EXISTS] database_name [COMMENT database_comment] [LOCATION hdfs_path] [WITH DBPROPERTIES (property_name=property_value, ...)];
DROP DATABASE [IF EXISTS] database_name [RESTRICT|CASCADE];
"DATABASE" ve "SCHEMA" anahtar kelimeleri burada birbirinin yerine kullanılabilir, bu nedenle "CREATE SCHEMA" ve "CREATE DATABASE" komutları tamamen aynı işi yapar. Geri kalan komutlar, bir ad alanı ile günlük çalışmayı tamamlar.
| Komuta | Ne yapar |
|---|---|
| VERİTABANLARINI GÖSTER; | Metastore'da kayıtlı tüm veritabanlarını listeler. |
| veritabanı_adı KULLAN; | Geçerli veritabanını ayarlar, böylece tablo adlarına önek gerekmez. |
| VERİTABANI_adı_TANIMLA; | Yorumu, HDFS konumunu ve sahibini bildirir. |
| DESCRIBE DATABASE EXTENDED database_name; | Bu çıktıya DBPROPERTIES anahtar-değer çiftlerini ekler. |
| ALTER DATABASE database_name SET DBPROPERTIES (…); | Meta veri özelliklerini ekler veya değiştirir. |
| ALTER DATABASE database_name SET OWNER USER user_name; | Mülkiyeti başka bir kullanıcıya veya role devreder. |
| ALTER DATABASE database_name SET LOCATION hdfs_path; | Bundan sonra oluşturulan tabloların kullandığı yolu değiştirir. |
İki varsayılan ayarı ezberlemekte fayda var. LOCATION koşulu olmadan dosyalar genellikle /user/hive/warehouse/database_name.db olan veri ambarı dizininin altında bulunur ve IF EXISTS olmadan eksik bir ada karşı yapılan silme işlemi, sessizce geçmek yerine hata verir. Her iki ayar da şurada saklanır: Kovan meta deposu.
Hive Veri Tipi Dönüştürme ve Sık Yapılan Hatalar
Türler her zaman tam olarak tanımlandığı gibi kullanılmaz. Hive, hiçbir bilginin kaybolamayacağı durumlarda bir değeri otomatik olarak genişletir ve geri kalan her şeyi açık bir dönüşüme bırakır.
- Örtük genişletme, TINYINT'ten SMALLINT'e, INT'e, BIGINT'e, FLOAT'a ve DOUBLE'a doğru bir zincir izler ve rakamlar içeren bir STRING, DOUBLE'a yükseltilir.
- Daraltma işlemi asla kendiliğinden gerçekleşmez, bu nedenle INT sütununa atanan bir DOUBLE değeri yazılı bir dönüştürme gerektirir.
- CAST işlemi, yazılan değeri dönüştürür ve değer dönüştürülemediğinde hata yerine NULL döndürür.
SELECT CAST(salary AS DECIMAL(10,2)) FROM employees;
Aşağıdaki hatalar, yeni başlayanların ilk şema çalışmalarında karşılaştıkları sürprizlerin çoğunu açıklamaktadır.
| Semptom | Sebep ve çözüm |
|---|---|
| Veritabanında hala tablolar varken silme işlemi başarısız oluyor. | Varsayılan ayar RESTRICT'tir. Bununla birlikte tabloları silmek için CASCADE'i ekleyin. |
| Uzun bir ip kısaltılmış olarak gelir. | VARCHAR, belirtilen uzunluğun ötesinde sessizce kırpma işlemi yapar. Sınırlama istenmiyorsa STRING kullanın. |
| Dönüştürme işleminden sonra bir sütun NULL olarak okunuyor. | CAST işlemi değeri ayrıştıramadı. Türü genişletmeden önce kaynak verileri kontrol edin. |
| Para birimlerinin değerleri kuruş veya sent cinsinden değerini kaybeder. | Argüman içermeyen DECIMAL ifadesi DECIMAL(10,0) anlamına gelir. Ölçeği açıkça belirtin. |
| Birbirine tıpatıp benzeyen iki randevu asla aynı olmaz. | Bir STRING tarih sütunu ve bir DATE sütunu farklı türlerdir. Karşılaştırmadan önce bir tarafı dönüştürün. |
Türler düzgün çalışmaya başladıktan sonraki adım, verilerin yüklenmesi ve sorgulanmasıdır; bu konu aşağıda ele alınmıştır. Hive sorguları, ORDER BY, GROUP BY ve Cluster By.


