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.

  • 🔢 Sayısal türler: TINYINT'ten BIGINT'e kadar olan veri tipleri tam sayıları kapsarken, DECIMAL (hassasiyet, ölçek) FLOAT ve DOUBLE'ın sağlayamadığı kesin değerleri korur.
  • 🔤 Dize türleri: STRING veri tipinin belirtilmiş bir sınırı yoktur, VARCHAR 1 ile 65535 karakter arasında değer kabul eder ve CHAR veri tipi en fazla 255 karakterle sınırlıdır.
  • 📅 Tarih ve saat: DATE parametresi düz bir YYYY-MM-DD değeri saklar ve TIMESTAMP parametresi isteğe bağlı olarak buna nanosaniye hassasiyeti ekler.
  • 🧩 Karmaşık türler: ARRAY, MAP, STRUCT ve UNIONTYPE, birçok sütun yerine birbiriyle ilişkili birden fazla değeri tek bir sütunda bir araya getirir.
  • 🏗️ Bir veritabanı oluşturun: CREATE DATABASE komutu metastore'da bir ad alanı kaydeder ve SHOW DATABASES komutu bunun var olduğunu doğrular.
  • 🗑️ Veritabanını silme: DROP DATABASE komutu ad alanını kaldırır ve içinde hala tablolar bulunduğunda CASCADE komutu gereklidir.

Hive veri tipleri ve Hive'da veritabanı oluşturma ve silme işlemleri

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.

Hive shell'de guru99 veritabanı oluşturuluyor ve `show` komutuyla veritabanları listeleniyor.

Yukarıdaki ekran görüntüsünden de anlaşıldığı gibi, iki şey yapıyoruz:

  1. Hive'da “guru99” veritabanı oluşturuluyor
  2. “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.

Kovan kabuğu düşmesiping guru99 veritabanı ve kaldırma işleminin onaylanması

Yukarıdaki ekran görüntüsünde iki şey yapıyoruz:

  1. Biz bıraktıkping Hive'dan 'guru99' veritabanı
  2. 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.

SSS

Hayır. HiveQL'de DATABASE ve SCHEMA birbirinin yerine kullanılabilen anahtar kelimelerdir, bu nedenle CREATE SCHEMA sales ve CREATE DATABASE sales aynı metastore nesnesini üretir. Seçim tamamen kurumsal stil meselesidir.

Veri deposu dizini altında, normalde HDFS üzerinde /user/hive/warehouse/database_name.db bulunur. CREATE DATABASE komutundaki LOCATION yan tümcesi bu yolu geçersiz kılar ve DESCRIBE DATABASE komutu gerçekte hangi konumun kullanıldığını bildirir.

Genellikle tercih edilen tür STRING'dir çünkü belirtilmiş bir sınırı yoktur ve dolguya ihtiyaç duymaz. VARCHAR, uzunluğun zorunlu olduğu durumlarda yardımcı olur ve CHAR, ülke kısaltmaları gibi kısa, sabit genişlikli kodlar için uygundur.

DOUBLE ikili kayan noktalı sayı sistemidir, bu nedenle tekrarlanan toplamlar sentin kesirleri kadar sapma gösterir. DECIMAL ise belirtilen hassasiyet ve ölçekte kesin değerler saklar, bu da finansal toplamların farklı çalıştırmalar arasında tekrarlanabilir olmasını sağlar.

Düz bir TIMESTAMP, saat dilimi içermez ve yazıldığı gibi aynen okunur. Hive 3.1, yazma sırasında değeri UTC'ye normalleştiren ve okuma sırasında dönüştüren TIMESTAMP WITH LOCAL TIME ZONE özelliğini ekledi.

Evet. Bir STRUCT bir ARRAY'in içinde yer alabilir ve bir MAP değeri de kendisi bir STRUCT olabilir, dolayısıyla ARRAY de olabilir. > geçerlidir kovanDerin iç içe geçme ayırıcıları karmaşıklaştırır, bu nedenle sığ tutun.

Evet. Veri profilleme araçları, kardinaliteyi, boş değer oranlarını ve değer aralıklarını örnekler, ardından en dar uygulanabilir türü ve dosya biçimini önerir. Model gelecekteki iş yüklerini öngöremediği için öneriyi bir taslak olarak değerlendirin.

Copilot, kısa bir yorumdan CREATE TABLE ve CREATE DATABASE ifadeleri taslakları oluşturur ve yardımcı yazılımlar örnek bir dosyayı şemaya dönüştürebilir. Sonucu çalıştırmadan önce her zaman DECIMAL ölçeğini ve ayırıcı maddeleri kontrol edin.

Bu yazıyı şu şekilde özetleyin: