Hive'da Tablo Oluşturma: Dahili, Değiştirme ve Silme İşlemleri Örneklerle

⚡ Akıllı Özet

Oluşturma, değiştirme ve silmeping Apache Hive'daki tablolar, bilindik SQL tarzı DDL kullanır, ancak sonuç, tablonun Hive'ın sahip olduğu dahili mi yoksa yalnızca dosyaları tanımlayan harici mi olduğuna bağlıdır.

  • 🧱 TABLO OLUŞTUR: Tek bir ifade, bir Hive tablosunun sütunlarını, satır biçimini ve isteğe bağlı olarak depolama konumunu tanımlar.
  • ???? ️ TABLOYU DEĞİŞTİR: RENAME komutu tablo adını değiştirir, ADD COLUMNS veya CHANGE COLUMN komutu ise verileri yeniden yüklemeden şemayı düzenler.
  • 🗑️ TABLOYU SİL: Damlaping Dahili bir tablo hem şemayı hem de verileri silerken, drop işlemi de aynı işlevi görür.ping Harici bir tablo yalnızca meta verileri siler.
  • 🔒 İçsel mülkiyet şunlara aittir: Dahili veya yönetilen bir tablo, veri ambarı dizini altında yer alır ve Hive, tablonun tüm yaşam döngüsünü kontrol eder.
  • 🔗 Harici referans verilmiştir: Harici bir tablo, diğer araçların da okuduğu dosyalara işaret eder, bu nedenle bu dosyalar silinme işleminden sonra da korunur.
  • 🔎 Türü doğrulayın: DESCRIBE FORMATTED, MANAGED_TABLE veya EXTERNAL_TABLE raporlarını oluşturur ve bu da silme işleminden önce herhangi bir tahmini ortadan kaldırır.

Hive'da tablo oluşturma, değiştirme ve silme komutları ve örnekleri

Tablo işlemleri; oluşturma, değiştirme ve silme gibi işlemleri içerir.ping Bu kılavuzda Hive'daki tablolar incelenebilir. Her işlem önce canlı bir oturum olarak, ardından yeniden kullanılabilir bir ifade olarak gösterilmektedir.

Hive'da Tablo Oluşturma, Değiştirme ve Silme İşlemleri

Aşağıdaki ekran görüntüsünde sütunlu bir tablo oluşturup tablo adını değiştiriyoruz.

  1. "empid" ve "empname" gibi iki sütun adına sahip "guru_sample" tablosu oluşturuluyor.
  2. Guru99 veritabanında bulunan tabloları görüntüleme
  3. guru_sample tabloların altında görüntüleniyor
  4. “guru_sample” tablosunu “guru_sampleNew” olarak değiştiriyorum.
  5. Tekrar belirtelim, "show" komutunu çalıştırdığınızda, yeni ad olan guru_sampleNew görüntülenecektir.

Aşağıdaki oturumda beş adımın tamamı sırayla uygulanmaktadır. kovan> Komut istemi ve yeniden adlandırmadan önce ve sonra yapılan iki SHOW TABLES çağrısı, etkinin görünür olmasını sağlar.

Hive oturumu guru_sample adlı bir dosya oluşturuyor ve adını guru_sampleNew olarak değiştiriyor.

Damlaping tablo guru_sampleNew:

Tek bir DROP TABLE komutu, yeniden adlandırılan tabloyu siler ve Hive "OK" yanıtı verir.

Kovan kabuğu düşmesiping guru_sampleNew tablosu OK yanıtıyla

Hive CREATE TABLE Sözdizimi ve Yaygın Kullanılan Maddeler

Yukarıdaki örnek, mümkün olan en kısa formu kullanmaktadır. Belgelenmiş ifade, birkaç isteğe bağlı maddeyi kabul eder ve her biri, örneğin varsayılan değerinde bıraktığı bir şeye karar verir.

CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name
  [(col_name data_type [COMMENT col_comment], ...)]
  [COMMENT table_comment]
  [PARTITIONED BY (col_name data_type, ...)]
  [CLUSTERED BY (col_name, ...) INTO num_buckets BUCKETS]
  [ROW FORMAT row_format]
  [STORED AS file_format]
  [LOCATION hdfs_path]
  [TBLPROPERTIES (property_name=property_value, ...)];
fıkra Ne kontrol ediyor?
DIŞ Harici bir tablo oluşturur, bu nedenle DROP işlemi veri dosyalarını yerinde bırakır.
GEÇİCİ Oturum süresi boyunca geçerli olan ve oturum sona erdiğinde kaybolan bir tablo oluşturur.
VAR DEĞİLSE Belirtilen isimde bir tablo zaten mevcut olduğunda hatayı gizler.
BÖLÜMLENDİRİLMİŞ Tabloyu her anahtar değeri için ayrı bir dizine böler.
... TARAFINDAN KÜMELENMİŞ n KOVAYA Satırları belirli sayıda dosyaya karma (hash) olarak ayırır.
SATIR FORMATI / SAKLAMA ŞEKLİ Ayırıcıyı veya SerDe'yi ve TEXTFILE, ORC veya Parquet gibi dosya biçimini ayarlar.
KONUM Tabloyu varsayılan veri ambarı yerine belirli bir HDFS yoluna yönlendirir.
TBLPROPERTIES external.table.purge dahil olmak üzere meta veri anahtar-değer çiftlerini ekler.

İlgili bir form, CREATE TABLE new_table LIKE existing_tableBu komut, herhangi bir satırı kopyalamadan bir şemayı kopyalar. PARTITIONED BY ve CLUSTERED BY gibi yapısal maddeler, kılavuzda ayrıntılı olarak ele alınmıştır. Hive bölümleri ve kovaları.

Tablo Çeşitleri ve Kullanımı

Tablolara gelince, geleneksel ilişkisel veritabanlarında oluşturduğumuz yöntemle tamamen aynıdır. Filtreleme ve birleştirme gibi işlevler tablolar üzerinde gerçekleştirilebilir.

Hive, şemanın yüklenmesine ve tasarımına bağlı olarak Dahili ve Harici tablolar olmak üzere iki tür tablo yapısıyla ilgilenir. kovanBu seçim kozmetik bir tercih değil: veri dosyalarının kime ait olacağına ve tablo silindiğinde onlara ne olacağına karar veriyor.

Hive'da Dahili Tablolar

  • Dahili tablolar doğası gereği sıkı bir şekilde birbirine bağlıdır. Bu tür tablolarda öncelikle tabloyu oluşturmamız ve verileri yüklememiz gerekir.
  • Bunu şema üzerindeki veri olarak adlandırabiliriz.
  • Damla ileping Bu tablodaki hem veriler hem de şema silinecektir.
  • Bu tablonun saklandığı konum /user/Hive/warehouse olacaktır.
  • Dahili tablolar, yönetilen tablolar olarak da adlandırılır ve yalnızca bu tablolar TRUNCATE, ARCHIVE, MERGE, CONCATENATE ve ACID işlemlerini destekler.

İç Masa Ne Zaman Seçilmeli?

  • İşleme verileri yerel dosya sisteminde mevcutsa
  • Hive'ın, silme işlemi de dahil olmak üzere veri yaşam döngüsünün tamamını yönetmesini istiyorsak

Dahili Tablo için örnek kod Parçacığı

  1. Dahili tabloyu oluşturmak için
     Hive>CREATE TABLE guruhive_internaltable (id INT,Name STRING);
    	 Row format delimited 
    	 Fields terminated by '\t';
  2. Verileri dahili tabloya yükleyin
        Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO table guruhive_internaltable;
  3. Tablonun içeriğini görüntüle
        Hive>select * from guruhive_internaltable;
  4. Dahili tabloyu bırakmak için
        Hive>DROP TABLE guruhive_internaltable;

Eğer guruhive_internaltable'ı silerseniz, meta verileri ve verileri de dahil olmak üzere Hive'dan silinecektir. PURGE belirtilmediği sürece, dosyalar hemen silinmek yerine HDFS çöp kutusu klasörüne taşınır.

Aşağıdaki ekran görüntüsünden, dört ifadenin de tek bir oturumda nasıl sonuçlandığını ve başarılı bir şekilde silme işleminin gerçekleştiğini gözlemleyebiliriz.

Hive oturumu oluşturma, yükleme, sorgulama ve silmeping guruhive_dahili tablo

Yukarıdaki kodda ve ekran görüntüsünde aşağıdaki işlemleri yapıyoruz:

  • Dahili tabloyu oluşturun
  • Verileri dahili tabloya yükleyin
  • Tablonun içeriğini görüntüle
  • Dahili tabloyu bırakmak için

Hive'da Harici Tablolar

  • Harici tablo, doğası gereği gevşek bağlantılıdır. Veriler HDFS'de bulunacaktır. Tablo, HDFS verileri üzerinde oluşturulacaktır.
  • Başka bir deyişle, veriler üzerinde şema oluşturmak diyebiliriz.
  • Düşme anındaping Bu işlem yalnızca şemayı siler, veriler HDFS'de eskisi gibi kalır.
  • Harici tablolar, şema her güncellendiğinde verileri silmek yerine, HDFS'de depolanan veriler için birden fazla şema oluşturma seçeneği sunar
  • Hive 4.0.0 sürümünden itibaren, `external.table.purge` tablo özelliğini `true` olarak ayarlamak, `DROP` komutunun verileri de silmesini sağlar.

Dış Masa Ne Zaman Seçilmeli?

  • İşleme verileri HDFS'de mevcutsa
  • Dosyalar Hive dışında kullanıldığında kullanışlıdır

Harici Tablo için örnek kod Parçacığı

  1. Harici tablo oluştur
    Hive>CREATE EXTERNAL TABLE guruhive_external(id INT,Name STRING)
    	 Row format delimited
    	 Fields terminated by '\t'
    	 LOCATION '/user/guru99hive/guruhive_external';
  2. Tablo oluşturma sırasında konum belirtmezsek, verileri manuel olarak yükleyebiliriz.
        Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO TABLE guruhive_external;
  3. Tablonun içeriğini görüntüle
      Hive>select * from guruhive_external;
  4. Harici tabloyu silmek için
      Hive>DROP TABLE guruhive_external;

Aşağıdaki ekran görüntüsünden çıktıyı gözlemleyebiliriz. Sondaki silme işleminin yalnızca şemayı kaldırdığını, LOCATION yolundaki dosyanın ise dokunulmadan kaldığını unutmayın.

Hive oturumu oluşturma, yükleme, sorgulama ve silmeping guruhive_harici

Yukarıdaki kodda aşağıdaki işlemleri yapıyoruz.

  • Harici tabloyu oluşturun
  • Verileri Harici tabloya yükleyin
  • Tablonun içeriğini görüntüle
  • Damlaping dış tablo

Dahili ve Harici Tablolar Arasındaki Fark

Özellik İç dış
Şema Şemadaki Veriler Veri Şeması
Depolama yeri /kullanıcı/kovan/depo LOCATION tarafından verilen HDFS konumu
Veri kullanılabilirliği Yerel dosya sistemi içinde HDFS'de
DROP'un Etkisi Şemayı ve verileri siler. external.table.purge true olmadığı sürece yalnızca şemayı siler.
TRUNCATE desteği destekli Desteklenmez
ASİT işlemleri destekli Desteklenmez

MKS Apache Hive dokümantasyonu Kuralı açıkça belirtiyor: Hive, yönetilen tablolar için verilerin kendisine ait olduğunu varsayar ve harici tablolar için sahip olmadığını varsayar; yukarıdaki tüm farklılıklar bu tek varsayımdan kaynaklanır.

ALTER TABLE ve DROP TABLE Komut Referansı

Yukarıdaki ekran görüntülerinde yalnızca yeniden adlandırma ve silme işlemleri gösterilmektedir. Bunlar, bir uzmanın mevcut bir tabloda en sık kullandığı ifadelerdir.

Açıklama Amaç
ALTER TABLE table_name RENAME TO new_name; Tablonun adını değiştirir; yönetilen bir tablo için bu işlem aynı zamanda HDFS dizinini de taşır.
ALTER TABLE table_name ADD COLUMNS (col_name data_type); Şemanın sonuna bir veya daha fazla sütun ekler.
ALTER TABLE table_name CHANGE COLUMN old_name new_name data_type; Bir sütunun adını değiştirir veya türünü değiştirir.
ALTER TABLE table_name REPLACE COLUMNS (…); Sütun listesinin tamamını yeni bir listeyle değiştirir.
ALTER TABLE table_name SET TBLPROPERTIES ('EXTERNAL'='TRUE'); Yönetilen bir tabloyu harici bir tabloya dönüştürür ve FALSE ise bunu tersine çevirir.
[Eğer mevcutsa] tablo_adı tablosunu sil; Tabloyu siler; PURGE işlemi çöp kutusu klasörünü atladığı için veriler kurtarılamaz.
[TABLO] tablo_adı'nı boşalt; Şemayı koruyarak tüm satırları siler; yalnızca yönetilen tablolar için geçerlidir.

Herhangi bir betiğe iki güvenlik önlemi eklemekte fayda var. IF EXISTS, zaten kaldırılmış bir tabloda silme işleminin başarısız olmasını önler ve DESCRIBE FORMATTED, silme işlemi çalışmadan önce hedefin MANAGED_TABLE mi yoksa EXTERNAL_TABLE mı olduğunu doğrular.

SSS

DESCRIBE FORMATTED table_name komutunu çalıştırın. Tablo Türü satırı ya MANAGED_TABLE ya da EXTERNAL_TABLE olarak raporlanır. Silme işleminden önce kontrol etmek, diğer işlemlerin hala okuduğu verileri silmekten kaçınmanın en ucuz yoludur.

Evet. ALTER TABLE table_name SET TBLPROPERTIES ('EXTERNAL'='TRUE') komutu metastore'daki veri türünü değiştirir, FALSE komutu ise eski haline getirir. Veri dosyaları oldukları yerde kalır, bu nedenle yeniden yükleme gerekmez.

Normalde hayır, yalnızca metastore girdisi silinir. Ancak Hive 4.0.0'dan itibaren, external.table.purge özelliği true olarak ayarlanmış harici bir tablonun verileri de DROP işlemiyle silinir, bu nedenle önce özellikleri kontrol edin.

Artık basit bir CREATE TABLE komutu, varsayılan olarak basit bir metin tablosu yerine yönetilen, işlemsel bir ORC tablosu oluşturuyor. EXTERNAL anahtar kelimesinin eklenmesi, Hive 3 kümesinde eski, ACID olmayan davranışı koruyor.

TRUNCATE komutu, şemayı koruyarak tüm satırları siler ve yalnızca yönetilen tablolarda çalışır. DROP komutu ise şemayı da siler. Tablo tanımının yeniden yüklemeden sonra da korunması gerektiğinde TRUNCATE daha güvenli bir seçenektir.

Hayır. Hive, metastore'da tanımlayıcıları küçük harfe dönüştürür, bu nedenle GURU_SAMPLE ve guru_sample aynı tabloya atıfta bulunur. Veri içindeki dize değerleri büyük/küçük harf duyarlıdır, bu nedenle WHERE karşılaştırması yine de satırları atlayabilir.

Evet. Katalog araçlarındaki makine öğrenimi özellikleri, sütun kardinalitesini, boş değer oranlarını ve sorgu kalıplarını profillendirir, ardından veri türlerini, dosya biçimlerini ve bölümleme anahtarlarını önerir. Çıktıyı taslak olarak değerlendirin, çünkü model planlanan iş yüklerini göremez.

Copilot, kısa bir yorumdan CREATE, ALTER ve DROP komutlarını tamamlar ve yardımcı araçlar tüm bir geçiş komut dosyasını oluşturabilir. RevEXTERNAL anahtar kelimesini ve herhangi bir PURGE seçeneğini inceleyin, çünkü orada yapılacak yanlış bir tahmin gerçek verileri siler.

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