Databricks'te CREATE TABLE: Tabloları Oluşturma ve Yönetmeye Yönelik Kapsamlı Rehber
Databricks'te CREATE TABLE komutunu kullanarak nasıl tablo oluşturacağınızı keşfedin. Farklı senaryolar için farklı yöntemleri öğrenin; mevcut verilerden tablo oluşturma ve CREATE TABLE AS SELECT kullanımı dahil.
Databricks tabloları, geniş ölçekli veri depolama ve işlemeyi yönetmek üzere tasarlanmış Databricks Lakehouse platformunun temel bir bileşenidir. Bu tablolar, yapılandırılmış ve yapılandırılmamış verileri birleştirerek ve analitik iş yüklerini destekleyerek ekipler arasında iş birliğine olanak tanır.
Bu yazıda, farklı kullanım senaryolarına uyum sağlamak için çeşitli sözdizimi varyasyonlarıyla CREATE TABLE komutunu kullanarak Databricks'te tablo oluşturmanın farklı tekniklerini adım adım göstereceğim. Ayrıca, Databricks'te tabloları verimli ve güvenilir biçimde oluşturup yönetirken benimseyebileceğiniz en iyi uygulamalara dair ipuçları sunacağım.
Başlarken, Databricks'in temel özelliklerini ve kullanım alanlarını anlamanıza ve öğrenmeye yapılı bir yol ile başlamanıza yardımcı olmak için DataCamp’in Databricks Nasıl Öğrenilir: Birleşik Veri Platformuna Yeni Başlayanlar İçin Rehber blog yazısını okumanızı şiddetle öneririm. Ayrıca Introduction to Databricks kursumuzu da almanızı tavsiye ederim. SQL konusunda deneyiminiz olsa bile, Databricks Lakehouse platformunda bazı şeylerin farklı görünebildiğini göreceksiniz. Kursumuzdaki etkileşimli alıştırmalar, hem SQL sorgularında hem de platform özellikleri ve harici sistem bağlantılarında size yol gösterecektir.
Databricks Tablolarına Giriş
Öncelikle şunu söyleyelim: Databricks tabloları, Databricks Lakehouse ortamında veri organizasyonunu ve erişimini kolaylaştıran yapılandırılmış veri kümeleridir. İki tür vardır:
Yönetilen Tablolar: Bu tablolar Databricks tarafından tamamen kontrol edilir; hem depolama hem de meta veriler Databricks tarafından yönetilir. Yönetilen bir tablo oluşturulduğunda Databricks alttaki veri dosyalarıyla ilgilenir ve tablo silinirse, ilgili veriler de kaldırılır.
Harici Tablolar: Harici tablolar, genellikle AWS S3 veya Azure Blob Storage gibi bulut depolama sistemlerinde, Databricks dışında bulunan verilere referans verir. Databricks bu tabloların meta verilerini yönetirken, tablo düşürülse (drop) bile gerçek veriler yerinde kalır. Bunlar yönetilmeyen tablolar olarak da bilinir.
Databricks'teki tablolar, gelişmiş özellikleri ve optimizasyonları nedeniyle sıklıkla varsayılan olarak Delta Lake’i kullanır. Delta Lake, ACID işlemleri, ölçeklenebilirlik, önbellekleme ve indeksleme gibi performans iyileştirmeleri ve toplu ve akış verisi işlemede birliktelik sağlar.
Not olarak, Azure Databricks’in erken sürümleri eski “Hive formatı” tabloları kullanıyordu; modern Delta tablolar bu yapıyı değiştirmiştir. Genel olarak modern Delta tablolar, güvenilirlik ve performans açısından eski Hive tablolardan üstündür ve Databricks iş akışları için varsayılan tercih haline gelmiştir.
Aşağıdaki özet, ikisi arasındaki farkı görmenize yardımcı olabilir:
Özellik
Hive formatlı tablo
Delta tablosu
Veri formatı
Apache Hive (CSV, Parquet, ORC, vb.)
Delta Lake (Parquet tabanlı, meta verilerle)
İşlemler
ACID desteği yok (sonunda tutarlılık)
Tam ACID işlemleri
Şema yönetimi
Sınırlı zorlayıcılık
Sıkı şema zorlaması
Performans optimizasyonu
Manuel ayar gerekir
Dahili optimizasyonlar (önbellekleme, sıkıştırma)
Zaman yolculuğu
Geçmiş sorguları için yerleşik destek yok
Verinin önceki sürümlerini sorgulamak için zaman yolculuğunu destekler
Eşzamanlılık
Güncelleme veya silmelerde çakışmalara yatkın
Eşzamanlı işlemleri verimli biçimde yönetir
CREATE TABLE Sözdizimi Varyasyonları
Databricks'teki CREATE TABLE komutu, farklı durumları karşılamak üzere çoklu varyasyonları destekler. Her varyasyonun dosya konumu, klonlama ve meta veri yönetimi gibi hedefe yönelik seçenekleriyle belirli bir amacı vardır. Databricks SQL bilginizi tazelemeniz gerekiyorsa, bir Databricks SQL ambarında Notebook kullanımını da içeren konuları öğrenmek için Databricks SQL eğitimimizi okumanızı öneririm.
Aşağıda başlıca sözdizimi biçimleri, örneklerle ve açıklamalarla verilmiştir.
CREATE TABLE [USING]
Bu sözdizimi, belirli bir şema ve veri formatıyla yeni bir tablo oluşturur. Aşağıdaki sorgu, belirli bir konumda saklanan Parquet dosyalarından veri okuyarak sales_data adlı bir tablo oluşturur.
-- Create a table from files in a specific formatCREATETABLE sales_data
USING PARQUET
LOCATION '/mnt/data/sales';Altyapı:
CREATE TABLE (Hive formatı)
Bu eski sözdizimi, harici dosyalara referans vermeye gerek kalmadan meta verileri Databricks tarafından yönetilen bir tablo tanımlarken kullanılan standart SQL CREATE TABLE komutuna benzer. Aşağıdaki sorgu, önceden tanımlı bir şema ve ek meta veri özellikleriyle hive_table adlı Hive tarzı bir tablo oluşturur.
-- Hive-style table creation with schema definitionCREATETABLE hive_table (
id INT,
name STRING
)COMMENT'Hive format example'
TBLPROPERTIES ('created_by'='databricks');Altyapı:
Yukarıdaki sorguda COMMENT ifadesi açıklayıcı meta veriler eklerken, TBLPROPERTIES tabloya ilişkin özel özellikleri saklar.
CREATE TABLE LIKE
Bu komut, mevcut bir tablonun şema ve özelliklerini kullanarak yeni bir tablo oluşturur. Bir tablonun yapısını, verilerini kopyalamadan çoğaltmak istediğinizde bu sözdizimini kullanmalısınız. Test veya geliştirme amaçları için kullanışlıdır.
-- Create a table with the same schema as another tableCREATETABLE new_table LIKE existing_table;Altyapı:
CREATE TABLE CLONE
Bu sözdizimi, mevcut bir Delta Lake tablosunu derin ya da sığ klonlayarak yeni bir tablo oluşturmanıza olanak tanır. Bu nedenle, bir tablonun veri ve meta verilerinin bağımsız bir kopyasına (derin klon) ya da yalnızca meta verilere, veriyi aslına referanslayarak (sığ klon) ihtiyacınız olduğunda CREATE TABLE CLONE sözdizimini kullanmalısınız. Sürümleme veya yedekleme oluşturma için düşünebilirsiniz.
Aşağıdaki örnek, Databricks'te derin ve sığ klon tabloları oluşturma sorgularını gösterir.
-- Deep clone by defaultCREATETABLE cloned_table CLONE original_table;-- Shallow cloneCREATETABLE shallow_clone_table SHALLOW CLONE original_table;Altyapı:
CREATE OR REPLACE TABLE
Bu birleşik komut, aynı tablo adını koruyarak mevcut bir tabloyu tek bir işlemde yenisiyle değiştirir. Bir tablonun adını korurken içeriğini tamamen üzerine yazmak istediğinizde bu sözdizimini kullanmalısınız. Özellikle bir tabloyu önce drop etmeye gerek kalmadan yapısını veya verisini güncellemek için kullanışlıdır.
Aşağıdaki örnek sorgu, sales tablosunu yeni bir şemayla oluşturur veya değiştirir.
-- Create or replace a sales table with a new schemaCREATEORREPLACETABLE sales (
sale_id INT,
amount FLOAT)USING DELTA
LOCATION '/mnt/delta/sales';Altyapı:
Databricks'teki CREATE TABLE sözdizimiyle birlikte, tablolarınızı belirli gereksinimlere göre yönetmek için kullanabileceğiniz başka ilgili ifadeler de vardır. Aşağıda bu ifadelerin her birinin kullanımına dair bir özet bulunmaktadır. Bunların bazılarını örneklerde kullandım, ancak hepsini değil.
IF NOT EXISTS: Tablo zaten varsa oluşturmayı atlayarak hataları önler.
EXTERNAL: Verilerin Databricks'in yönetilen depolaması dışında bulunduğu tabloyu tanımlar.
PARTITIONED BY: Büyük veri kümelerini optimize etmek için bölümleri tanımlar.
LOCATION: Tablo verilerinin bulunduğu dizini işaret eder.
TBLPROPERTIES: Özel tablo yapılandırmaları ve optimizasyonları için meta veriler ekler.
Adım Adım Gösterimler
Bu bölümde, kısa örnekler ve önemli ifadelerin açıklamalarıyla Databricks'te tablo oluşturmanın ve yönetmenin farklı yollarını göstereceğim. Databricks platformunda SQL komutları çalıştırmayı öğrenmek için Databricks Eğitimi: Her Veri Uzmanının Bilmesi Gereken 7 Kavram yazımıza göz atmanızı öneririm.
Boş bir tablo nasıl oluşturulur
Boş bir Delta tablosu oluşturmak için tablo şemasını sütun adları ve veri tipleriyle tanımlayın. Tablo formatını tanımlamak için USING DELTA ifadesini ve açıklayıcı meta veriler eklemek için COMMENT ifadesini kullanın.
Bu sorgu, id, name, department ve hire_date sütunlarını içeren, önceden tanımlı şemaya sahip employees adlı boş bir Delta tablosu oluşturur.
-- Create an empty Delta table with a defined schemaCREATETABLE employees (
id BIGINT,
name STRING,
department STRING,
hire_date DATE)USING DELTA
COMMENT'Table to store employee information';Altyapı:
Mevcut verilerden tablo nasıl oluşturulur
Mevcut verilerden tablo oluşturmak için tabloyu CSV, Parquet veya JSON gibi formatlardaki harici veri dosyalarına bağlayın. Dosya yolunu belirtmek için LOCATION ifadesini ve veri formatını belirtmek için USING ifadesini kullanabilirsiniz.
Örneğin, aşağıdaki sorgu /mnt/data/sales_data/ konumunda saklanan Parquet dosyalarına referans vererek sales_data adlı bir tablo oluşturur.
-- Create a table from Parquet files in a specified locationCREATETABLE sales_data
USING PARQUET
LOCATION '/mnt/data/sales_data/';Altyapı:
SELECT ile tablo nasıl oluşturulur (CTAS)
Bir sorgu çalıştırıp sonucunu saklayarak da tablo oluşturabilirsiniz. Bu senaryoda AS SELECT ifadesi, tabloyu sorgu sonucuyla doldurur.
Örneğin, aşağıdaki sorgu mevcut sales_data tablosundan veri seçip dönüştürerek high_value_sales adlı yeni bir tablo oluşturur. total_amount değeri 1000’den büyük olan satırları filtreler ve yalnızca sale_id, customer_id ve total_amount sütunlarını tutar.
-- Create a table by selecting and transforming data from another tableCREATETABLE high_value_sales ASSELECT
sale_id,
customer_id,
total_amount
FROM sales_data
WHERE total_amount >1000;Altyapı:
Harici tablo nasıl oluşturulur
Harici tablo oluşturmak, Databricks'in yönetilen depolaması dışında saklanan verilere referans vermeyi içerir. Harici veri konumunu belirtmek için LOCATION ifadesini kullanmalısınız.
Aşağıdaki sorgu, /mnt/external_storage/external_table/ konumunda saklanan verilere referans vererek external_table adlı harici bir Delta tablosu oluşturur.
-- Create an external table referencing data outside Databricks storageCREATETABLE external_table
USING DELTA
LOCATION '/mnt/external_storage/external_table/';Altyapı:
LIKE ile tablo nasıl oluşturulur
Bir tabloyu LIKE ile oluşturmak için, mevcut bir tablonun şemasını verileri kopyalamadan çoğaltın. Aşağıdaki örnekte, sorgu mevcut sales tablosuyla aynı şemaya sahip sales_backup adlı yeni bir tablo oluşturur.
-- Create a new sales table with the same schema as an existing tableCREATETABLE sales_backup LIKE sales;Altyapı:
TABLE CLONE nasıl oluşturulur
Yedekleme veya test için bir Delta tablosunun sığ ya da derin kopyasını oluşturmak üzere CLONE ifadesini kullanarak tablo klonu oluşturabilirsiniz.
Aşağıdaki örnekteki sorgu, yalnızca meta verileri (şema ve tablo özellikleri) kopyalayarak sales_shallow_clone adlı yeni bir tablo oluşturur.
-- Shallow clone: Copies only metadata (references original data)CREATETABLE sales_shallow_clone CLONE sales_data;Altyapı:
Aşağıdaki örnek, hem meta verileri hem de gerçek verileri kopyalayarak sales_deep_clone adlı yeni bir tablo oluşturur.
-- Deep clone: Copies both metadata and actual dataCREATETABLE sales_deep_clone CLONE sales_data DEEP;Altyapı:
Geçici tablo (temp table) nasıl oluşturulur
Geçici tablolar oluştururken, tablonun oturuma özgü olmasını sağlamak için TEMPORARY ifadesini kullanın.
Aşağıdaki sorgu, yalnızca geçerli oturum süresince var olan temp_table adlı bir geçici tablo oluşturur. sales_data tablosundan id, name ve sales_amount seçer ve region = 'US' olan satırları filtreler.
-- Create a temporary table that exists only in the sessionCREATETEMPORARYTABLE temp_table ASSELECT
id,
name,
sales_amount
FROM sales_data
WHERE region ='US';Altyapı:
Bir tablo nasıl değiştirilir (replace)
Tablo tanımını ve içeriğini değiştirmek için CREATE OR REPLACE ifadesini kullanabilirsiniz. Aşağıdaki sorgu, mevcut updated_table tablosunu yeni bir şema ve verilerle değiştirir. Tabloyu üç sütunla (id, name, total_sales) tanımlar.
-- Replace an existing table with a new schema or dataCREATEORREPLACETABLE updated_table (
id BIGINT,
name STRING,
total_sales DOUBLE)USING DELTA
LOCATION '/mnt/delta/updated_table/';Altyapı:
İleri Düzey Konular
Bu bölümde, işlevsellik, performans ve güvenliği artıran gelişmiş Databricks tablo özelliklerini ele alacağım.
Oluşturulan sütunlar ve kimlik (identity) sütunları
Databricks, her yeni satır için otomatik olarak benzersiz değerler üreten identity sütunlarını destekler. Bu özellik, veri ambarlarında vekil anahtarlar (surrogate key) oluşturmak için kullanışlıdır.
Aşağıdaki sorgu, id, name ve department olmak üzere üç sütunlu bir employees tablosu oluşturur. id sütunu, her yeni satırla artan bir identity sütunudur.
-- Identity column: auto-incremented valueCREATETABLE employees (
id BIGINT GENERATED ALWAYS ASIDENTITY,-- Auto-incremented column
name STRING,
department STRING
);Altyapı:
Bir diğer sorgu, sale_id, sale_date ve sale_year olmak üzere üç sütunlu bir sales tablosu oluşturur. sale_year sütunu, YEAR(sale_date) fonksiyonu kullanılarak sale_date sütununa göre otomatik olarak hesaplanan oluşturulmuş (generated) bir sütundur.
-- Generated column: derived from other columnsCREATETABLE sales (
sale_id BIGINT,
sale_date DATE,
sale_year INT GENERATED ALWAYS AS(YEAR(sale_date))-- Derived column);Altyapı:
Bölümleme (partitioning) ve kümeleme (clustering)
Bölümleme, veriyi daha küçük parçalara ayırarak sorgu performansını artırırken; kümeleme, daha hızlı okuma için bölümler içinde veriyi düzenler.
Örneğin aşağıdaki sorgu, region sütununa göre veriyi parçalara ayıran bölümlenmiş bir tablo oluşturur; bölgeye göre filtreleme yaparken sorgu performansını artırır.
-- Partitioned tableCREATETABLE partitioned_table (
id BIGINT,
region STRING,
sales_amount DOUBLE)USING DELTA
PARTITIONED BY(region);-- Querying by region will be fasterAltyapı:
Aşağıdaki sorgu, sales_amount sütununa göre her bölüm içinde veriyi kümeyerek bölümlenmiş tabloyu optimize eder. Veri yerleşimini iyileştirerek sales_amount üzerindeki sorguları hızlandırır. ZORDER BY ifadesi, okuma performansını iyileştirmek için veriyi bölümler içinde kümeler; bölümler arasında değil.
-- Clustered tableOPTIMIZE partitioned_table
ZORDER BY(sales_amount);-- Clusters data within partitions for efficient readsAltyapı:
Sütun maskeleme ve satır filtreleri
Sütun maskeleme ve satır filtreleri, hassas bilgileri koruyarak kullanıcı rollerine veya koşullara göre veri görünürlüğünü sınırlar.
Örneğin aşağıdaki sorgu, employees tablosuna dayalı masked_table adlı maskelenmiş bir görünüm oluşturur. salary sütunu, manager rolüne sahip kullanıcılar dışında sansürlenir (REDACTED ile değiştirilir). CASE ifadesi, yalnızca yöneticilerin gerçek maaşı görebilmesini, diğerlerinin maskelenmiş veriyi görmesini sağlar
Benzer şekilde, aşağıdaki sorgu sales tablosuna dayalı filtered_table adlı bir görünüm oluşturur veya değiştirir. Görünüm, yalnızca region = 'US' olan verileri içerecek şekilde satırları filtreler ve erişimi yalnızca ABD satış verileriyle sınırlar.
-- Row filters: Fine-grained access controlCREATEORREPLACEVIEW filtered_table ASSELECT*FROM sales
WHERE region ='US';-- Limit data visibility to a specific regionAltyapı:
Şema evrimi
Databricks, CREATE OR REPLACE TABLE ve tablo değişiklikleri (alter) ile şema evrimini destekler. Şemayı ve veriyi üzerine yazmak için CREATE OR REPLACE TABLE ifadesini; veriyi etkilemeden şemayı artımlı olarak değiştirmek için ALTER TABLE ifadesini kullanmalısınız.
Aşağıdaki sorgu, mevcut employees tablosunu yeni bir şemayla değiştirir; Delta formatında depolamayı sürdürürken yeni bir hire_date sütunu ekler.
-- Schema evolution with CREATE OR REPLACE TABLECREATEORREPLACETABLE employees (
id BIGINT,
name STRING,
department STRING,
hire_date DATE-- New column added)USING DELTA;Altyapı:
Diğer bir sorgu, mevcut şemaya yeni bir salary sütunu ekleyerek employees tablosunu değiştirir.
-- Altering a table schemaALTERTABLE employees ADDCOLUMNS(salary DOUBLE);Altyapı:
Performans ayarlama
Geniş ölçekli tabloların performansını optimize etmek için otomatik optimizasyon ve Z-ordering gibi çeşitli tablo özellikleri ve tekniklerden yararlanabilirsiniz.
Aşağıdaki örnekte, küçük dosyaları otomatik olarak sıkıştırmak ve yazma sırasında dosyaları birleştirmek için özellikler ayarlanarak delta_table üzerinde otomatik optimizasyon etkinleştirilir; bu da depolama verimliliğini artırır.
-- Enable automatic optimizationsALTERTABLE delta_table
SET TBLPROPERTIES ('delta.autoOptimize.optimizeWrite'='true',-- Automatically compact small files'delta.autoOptimize.autoCompact'='true'-- Automatically merge files);Altyapı:
Benzer şekilde, aşağıdaki sorgu delta_table tablosunu region ve sales_date sütunlarına göre kümleyerek optimize eder; özellikle bu sütunlardaki filtreler için sorgu performansını artırır.
-- Perform clustering for faster query performanceOPTIMIZE delta_table
ZORDER BY(region, sales_date);-- Improves query efficiency for frequent filtersAltyapı:
En iyi uygulamalar ve dikkat edilmesi gerekenler
Databricks'te tablo oluştururken doğru şekilde ilerlemek için göz önünde bulundurmanız gereken bazı noktalar şunlardır:
Tablo adlandırma kuralları: Keşfedilebilirliği artırmak ve hataları azaltmak için her zaman açık ve tutarlı adlar kullanın. Uyumluluk sorunlarını önlemek için özel karakterlerden veya aşırı uzun adlardan kaçının.
Güvenlik ve izinler: Tüm veri varlıkları arasında merkezi erişim denetimi için Unity Catalog'u kullanın. Kimin veriyi görüntüleyebileceğini veya değiştirebileceğini sınırlamak için Erişim Kontrol Listeleri (ACL) uygulayın. Ayrıca hassas verileri sütun maskeleme veya satır filtreleriyle maskeleyin.
Yedekleme ve kurtarma: Kolay kurtarma ve zaman yolculuğu için Delta Lake'in sürüm geçmişine güvenin. Depolama maliyetleri ile kurtarma ihtiyaçlarını dengelemek için geçmiş sürümlerin saklama süresini düzenli olarak izleyin ve yönetin.
Yönetilen vs. harici tablolar: Yönetilen ve harici tabloları anlamak da önemlidir. Yönetilen tablolarda Databricks hem meta verileri hem de verileri yönetir. Bu, veri yaşam döngüsü yönetimini tamamen kontrol etmek istediğiniz senaryolar için idealdir. Harici tablolarda ise referans verilen veriler Databricks dışında saklanır. Bu, farklı platformlar veya sistemler arasında paylaşılabilecek veriler üzerinde kontrolü sürdürmek için kullanışlıdır.
Yaygın Hatalar ve Sorun Giderme
Artık Databricks'te tabloları yönetmeye yönelik en iyi uygulamaları ele aldığımıza göre, Databricks tablolarında sık karşılaşabileceğiniz sorunları, tipik hata mesajlarını ve çözümlerini anlatayım.
CREATE ve CREATE OR REPLACE kullanırken boş olmayan konum hataları
Belirtilen bir konumla (LOCATION ifadesi) CREATE TABLE kullanırken, dizin boş değilse şu tür bir hatayla karşılaşabilirsiniz:
Error: Cannot createtable because the location isnot empty.Altyapı:
Bu hata, CREATE TABLE komutunun belirtilen konum için boş bir dizin beklemesinden, ancak mevcut dosyaların veya meta verilerin bu gereksinimle çakışmasından kaynaklanır.
Bu hatayı çözmek için, mevcut veri ve meta verileri üzerine yazmak üzere CREATE OR REPLACE TABLE ifadesini kullanın. Ya da CREATE TABLE ifadesini kullanmadan önce dizini manuel olarak temizleyin.
CREATEORREPLACETABLE delta_table
USING DELTA
LOCATION '/mnt/data/delta_table';-- Overwrites table and filesAltyapı:
Şema uyuşmazlığı veya belirli veri tipleriyle ilgili sorunlar
Veri ekleme veya sorgulama, şu tür şema uyuşmazlığı hatalarıyla sonuçlanabilir:
Error: Schema mismatch: Expected columntype STRING, but found INT.Altyapı:
Hata, tablo şeması ile gelen veri tipleri arasındaki uyumsuzluktan kaynaklanabilir. Ayrıca desteklenmeyen veya belirsiz veri tipi dönüştürmeleri (ör. karmaşık iç içe tipler) de şema uyuşmazlığına yol açabilir. Bu hatayı çözmek için, tablo oluşturma sırasında şemayı doğrulayarak şema eşleşmesini zorlayın veya Delta tablolarda şema zorlamasını kullanın.
-- Enforce schema matching during table creationCREATETABLE schema_table (
id INT,
name STRING
)USING DELTA
TBLPROPERTIES ('delta.schema.enforce'='true');-- Enforces strict schemaAltyapı:
Ayrıca, yeni sütunlar eklerken veya veri tiplerini değiştirirken şema evrimine izin vermelisiniz.
Identity sütunları durumsaldır ve birden fazla işlem aynı anda veri eklemeye çalıştığında çakışmalarla karşılaşabilir. Bu hatayı gidermek için, uuid() veya monotonically_increasing_id() gibi fonksiyonlarla üretilen belirleyici vekil anahtarlar kullanarak identity sütunlarının yerine vekil anahtarlar kullanın.
CREATETABLE better_table ASSELECT
monotonically_increasing_id()AS id,-- Replaces identity column
name, department
FROM source_data;Altyapı:
Ayrıca, identity sütunlarına güvenmeden karmaşık ekleme ve güncelleme iş akışları için Delta Lake’in MERGE özelliğini kullanabilirsiniz.
MERGEINTO target_table AS t
USING source_table AS s
ON t.id = s.id
WHENMATCHEDTHENUPDATESET*WHENNOTMATCHEDTHENINSERT*;Altyapı:
Sonuç
Databricks'te CREATE TABLE komutu; veri yapıları tanımlamak, harici verilere bağlanmak ve sorgularla yeni veri kümeleri türetmek için çok yönlü bir araçtır. İhtiyaçlarınıza göre Databricks'te tablo oluşturma ve yönetmenin farklı sözdizimlerini anlamak önemlidir. Gördüğünüz gibi, seçebileceğiniz birkaç farklı tablo oluşturma yöntemi vardır.
Databricks’in temel kavramlarını keşfetmek isterseniz, Databricks’i İş Zekâsı (BI) için bir veri ambarı çözümü olarak öğrenmek üzere DataCamp’in Introduction to Databricks kursunu almanızı önemle tavsiye ederim. Ayrıca, Databricks sertifikalarını nasıl alabileceğinizi, kariyer faydalarını ve kariyer hedefleriniz için doğru sertifikayı nasıl seçeceğinizi öğrenmek için 2025’te Databricks Sertifikaları blog yazımıza da göz atmanızı öneririm.
Veri analitiği, iş zekâsı ve veri bilimi alanlarında pratik deneyime sahip Veri Bilimi Teknik Yazarı. SQL, Python, Power BI, Databricks ve veri mühendisliği üzerine, gerçek dünya analitik çalışmalarına dayanan, uygulamaya dönük ve sektöre odaklı içerikler yazıyorum. Yazılarım teknik derinlikle iş etkisi arasındaki köprüyü kurarak profesyonellerin veriyi güvenle karara dönüştürmelerine yardımcı olur.
Databricks CREATE TABLE SSS
Databricks'te CREATE TABLE komutunun amacı nedir?⌄
Databricks'te CREATE TABLE komutu, kullanıcıların tablonun şemasını, veri formatını ve depolama konumunu belirtmesine olanak tanıyarak yeni bir tablo tanımlamak için kullanılır.
Yönetilen ve harici tablolar arasındaki fark nedir?⌄
Yönetilen tablolar hem meta verileri hem de verileri Databricks içinde saklarken, harici tablolar yalnızca meta verileri saklar; veriler harici bir konumda kalır.
Harici tablo, yönetilmeyen tabloyla aynı şey midir? ⌄
Evet, harici tablolar ve yönetilmeyen tablolar Databricks'te aynı kavramı ifade eder. Meta verileri Databricks'te tutar, ancak gerçek veriler harici bir konumda kalır; böylece veri yaşam döngüsünü bağımsız olarak yönetebilirsiniz.
Sığ klon ile derin klon arasındaki fark nedir?⌄
Sığ (shallow) klon yalnızca meta verileri kopyalar; derin (deep) klon ise hem verileri hem de meta verileri kopyalar.
Geçici tablolar nedir?⌄
Geçici tablolar yalnızca geçerli oturum süresince var olur ve oturum sona erdiğinde otomatik olarak silinir.
Databricks'te şema evrimi nedir?⌄
Şema evrimi, mevcut bir tablonun şemasını (ör. sütun ekleme veya değiştirme) tüm tabloyu yeniden oluşturmadan değiştirmenize olanak tanır; Delta tablolar için özellikle faydalıdır.
Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Databricks tabloları, geniş ölçekli veri depolama ve işlemeyi yönetmek üzere tasarlanmış Databricks Lakehouse platformunun temel bir bileşenidir. Bu tablolar, yapılandırılmış ve yapılandırılmamış verileri birleştirerek ve analitik iş yüklerini destekleyerek ekipler arasında iş birliğine olanak tanır.
Bu yazıda, farklı kullanım senaryolarına uyum sağlamak için çeşitli sözdizimi varyasyonlarıyla
CREATE TABLEkomutunu kullanarak Databricks'te tablo oluşturmanın farklı tekniklerini adım adım göstereceğim. Ayrıca, Databricks'te tabloları verimli ve güvenilir biçimde oluşturup yönetirken benimseyebileceğiniz en iyi uygulamalara dair ipuçları sunacağım.Başlarken, Databricks'in temel özelliklerini ve kullanım alanlarını anlamanıza ve öğrenmeye yapılı bir yol ile başlamanıza yardımcı olmak için DataCamp’in Databricks Nasıl Öğrenilir: Birleşik Veri Platformuna Yeni Başlayanlar İçin Rehber blog yazısını okumanızı şiddetle öneririm. Ayrıca Introduction to Databricks kursumuzu da almanızı tavsiye ederim. SQL konusunda deneyiminiz olsa bile, Databricks Lakehouse platformunda bazı şeylerin farklı görünebildiğini göreceksiniz. Kursumuzdaki etkileşimli alıştırmalar, hem SQL sorgularında hem de platform özellikleri ve harici sistem bağlantılarında size yol gösterecektir.
Databricks Tablolarına Giriş
Öncelikle şunu söyleyelim: Databricks tabloları, Databricks Lakehouse ortamında veri organizasyonunu ve erişimini kolaylaştıran yapılandırılmış veri kümeleridir. İki tür vardır:
Databricks'teki tablolar, gelişmiş özellikleri ve optimizasyonları nedeniyle sıklıkla varsayılan olarak Delta Lake’i kullanır. Delta Lake, ACID işlemleri, ölçeklenebilirlik, önbellekleme ve indeksleme gibi performans iyileştirmeleri ve toplu ve akış verisi işlemede birliktelik sağlar.
Not olarak, Azure Databricks’in erken sürümleri eski “Hive formatı” tabloları kullanıyordu; modern Delta tablolar bu yapıyı değiştirmiştir. Genel olarak modern Delta tablolar, güvenilirlik ve performans açısından eski Hive tablolardan üstündür ve Databricks iş akışları için varsayılan tercih haline gelmiştir.
Aşağıdaki özet, ikisi arasındaki farkı görmenize yardımcı olabilir:
CREATE TABLE Sözdizimi Varyasyonları
Databricks'teki
CREATE TABLEkomutu, farklı durumları karşılamak üzere çoklu varyasyonları destekler. Her varyasyonun dosya konumu, klonlama ve meta veri yönetimi gibi hedefe yönelik seçenekleriyle belirli bir amacı vardır. Databricks SQL bilginizi tazelemeniz gerekiyorsa, bir Databricks SQL ambarında Notebook kullanımını da içeren konuları öğrenmek için Databricks SQL eğitimimizi okumanızı öneririm.Aşağıda başlıca sözdizimi biçimleri, örneklerle ve açıklamalarla verilmiştir.
CREATE TABLE [USING]
Bu sözdizimi, belirli bir şema ve veri formatıyla yeni bir tablo oluşturur. Aşağıdaki sorgu, belirli bir konumda saklanan Parquet dosyalarından veri okuyarak
sales_dataadlı bir tablo oluşturur.CREATE TABLE (Hive formatı)
Bu eski sözdizimi, harici dosyalara referans vermeye gerek kalmadan meta verileri Databricks tarafından yönetilen bir tablo tanımlarken kullanılan standart SQL
CREATE TABLEkomutuna benzer. Aşağıdaki sorgu, önceden tanımlı bir şema ve ek meta veri özellikleriylehive_tableadlı Hive tarzı bir tablo oluşturur.Yukarıdaki sorguda
COMMENTifadesi açıklayıcı meta veriler eklerken,TBLPROPERTIEStabloya ilişkin özel özellikleri saklar.CREATE TABLE LIKE
Bu komut, mevcut bir tablonun şema ve özelliklerini kullanarak yeni bir tablo oluşturur. Bir tablonun yapısını, verilerini kopyalamadan çoğaltmak istediğinizde bu sözdizimini kullanmalısınız. Test veya geliştirme amaçları için kullanışlıdır.
CREATE TABLE CLONE
Bu sözdizimi, mevcut bir Delta Lake tablosunu derin ya da sığ klonlayarak yeni bir tablo oluşturmanıza olanak tanır. Bu nedenle, bir tablonun veri ve meta verilerinin bağımsız bir kopyasına (derin klon) ya da yalnızca meta verilere, veriyi aslına referanslayarak (sığ klon) ihtiyacınız olduğunda
CREATE TABLE CLONEsözdizimini kullanmalısınız. Sürümleme veya yedekleme oluşturma için düşünebilirsiniz.Aşağıdaki örnek, Databricks'te derin ve sığ klon tabloları oluşturma sorgularını gösterir.
CREATE OR REPLACE TABLE
Bu birleşik komut, aynı tablo adını koruyarak mevcut bir tabloyu tek bir işlemde yenisiyle değiştirir. Bir tablonun adını korurken içeriğini tamamen üzerine yazmak istediğinizde bu sözdizimini kullanmalısınız. Özellikle bir tabloyu önce drop etmeye gerek kalmadan yapısını veya verisini güncellemek için kullanışlıdır.
Aşağıdaki örnek sorgu,
salestablosunu yeni bir şemayla oluşturur veya değiştirir.Databricks'teki
CREATE TABLEsözdizimiyle birlikte, tablolarınızı belirli gereksinimlere göre yönetmek için kullanabileceğiniz başka ilgili ifadeler de vardır. Aşağıda bu ifadelerin her birinin kullanımına dair bir özet bulunmaktadır. Bunların bazılarını örneklerde kullandım, ancak hepsini değil.IF NOT EXISTS: Tablo zaten varsa oluşturmayı atlayarak hataları önler.USING: Dosya formatını belirtir (ör. Delta, Parquet, CSV).EXTERNAL: Verilerin Databricks'in yönetilen depolaması dışında bulunduğu tabloyu tanımlar.PARTITIONED BY: Büyük veri kümelerini optimize etmek için bölümleri tanımlar.LOCATION: Tablo verilerinin bulunduğu dizini işaret eder.TBLPROPERTIES: Özel tablo yapılandırmaları ve optimizasyonları için meta veriler ekler.Adım Adım Gösterimler
Bu bölümde, kısa örnekler ve önemli ifadelerin açıklamalarıyla Databricks'te tablo oluşturmanın ve yönetmenin farklı yollarını göstereceğim. Databricks platformunda SQL komutları çalıştırmayı öğrenmek için Databricks Eğitimi: Her Veri Uzmanının Bilmesi Gereken 7 Kavram yazımıza göz atmanızı öneririm.
Boş bir tablo nasıl oluşturulur
Boş bir Delta tablosu oluşturmak için tablo şemasını sütun adları ve veri tipleriyle tanımlayın. Tablo formatını tanımlamak için
USING DELTAifadesini ve açıklayıcı meta veriler eklemek içinCOMMENTifadesini kullanın.Bu sorgu,
id,name,departmentvehire_datesütunlarını içeren, önceden tanımlı şemaya sahipemployeesadlı boş bir Delta tablosu oluşturur.Mevcut verilerden tablo nasıl oluşturulur
Mevcut verilerden tablo oluşturmak için tabloyu CSV, Parquet veya JSON gibi formatlardaki harici veri dosyalarına bağlayın. Dosya yolunu belirtmek için
LOCATIONifadesini ve veri formatını belirtmek içinUSINGifadesini kullanabilirsiniz.Örneğin, aşağıdaki sorgu
/mnt/data/sales_data/konumunda saklanan Parquet dosyalarına referans verereksales_dataadlı bir tablo oluşturur.SELECT ile tablo nasıl oluşturulur (CTAS)
Bir sorgu çalıştırıp sonucunu saklayarak da tablo oluşturabilirsiniz. Bu senaryoda
AS SELECTifadesi, tabloyu sorgu sonucuyla doldurur.Örneğin, aşağıdaki sorgu mevcut
sales_datatablosundan veri seçip dönüştürerekhigh_value_salesadlı yeni bir tablo oluşturur.total_amountdeğeri 1000’den büyük olan satırları filtreler ve yalnızcasale_id,customer_idvetotal_amountsütunlarını tutar.Harici tablo nasıl oluşturulur
Harici tablo oluşturmak, Databricks'in yönetilen depolaması dışında saklanan verilere referans vermeyi içerir. Harici veri konumunu belirtmek için
LOCATIONifadesini kullanmalısınız.Aşağıdaki sorgu,
/mnt/external_storage/external_table/konumunda saklanan verilere referans vererekexternal_tableadlı harici bir Delta tablosu oluşturur.LIKE ile tablo nasıl oluşturulur
Bir tabloyu
LIKEile oluşturmak için, mevcut bir tablonun şemasını verileri kopyalamadan çoğaltın. Aşağıdaki örnekte, sorgu mevcutsalestablosuyla aynı şemaya sahipsales_backupadlı yeni bir tablo oluşturur.TABLE CLONE nasıl oluşturulur
Yedekleme veya test için bir Delta tablosunun sığ ya da derin kopyasını oluşturmak üzere
CLONEifadesini kullanarak tablo klonu oluşturabilirsiniz.Aşağıdaki örnekteki sorgu, yalnızca meta verileri (şema ve tablo özellikleri) kopyalayarak
sales_shallow_cloneadlı yeni bir tablo oluşturur.Aşağıdaki örnek, hem meta verileri hem de gerçek verileri kopyalayarak
sales_deep_cloneadlı yeni bir tablo oluşturur.Geçici tablo (temp table) nasıl oluşturulur
Geçici tablolar oluştururken, tablonun oturuma özgü olmasını sağlamak için
TEMPORARYifadesini kullanın.Aşağıdaki sorgu, yalnızca geçerli oturum süresince var olan
temp_tableadlı bir geçici tablo oluşturur.sales_datatablosundanid,namevesales_amountseçer veregion = 'US'olan satırları filtreler.Bir tablo nasıl değiştirilir (replace)
Tablo tanımını ve içeriğini değiştirmek için
CREATE OR REPLACEifadesini kullanabilirsiniz. Aşağıdaki sorgu, mevcutupdated_tabletablosunu yeni bir şema ve verilerle değiştirir. Tabloyu üç sütunla (id,name,total_sales) tanımlar.İleri Düzey Konular
Bu bölümde, işlevsellik, performans ve güvenliği artıran gelişmiş Databricks tablo özelliklerini ele alacağım.
Oluşturulan sütunlar ve kimlik (identity) sütunları
Databricks, her yeni satır için otomatik olarak benzersiz değerler üreten identity sütunlarını destekler. Bu özellik, veri ambarlarında vekil anahtarlar (surrogate key) oluşturmak için kullanışlıdır.
Aşağıdaki sorgu,
id,namevedepartmentolmak üzere üç sütunlu biremployeestablosu oluşturur.idsütunu, her yeni satırla artan bir identity sütunudur.Bir diğer sorgu,
sale_id,sale_datevesale_yearolmak üzere üç sütunlu birsalestablosu oluşturur.sale_yearsütunu,YEAR(sale_date)fonksiyonu kullanılaraksale_datesütununa göre otomatik olarak hesaplanan oluşturulmuş (generated) bir sütundur.Bölümleme (partitioning) ve kümeleme (clustering)
Bölümleme, veriyi daha küçük parçalara ayırarak sorgu performansını artırırken; kümeleme, daha hızlı okuma için bölümler içinde veriyi düzenler.
Örneğin aşağıdaki sorgu,
regionsütununa göre veriyi parçalara ayıran bölümlenmiş bir tablo oluşturur; bölgeye göre filtreleme yaparken sorgu performansını artırır.Aşağıdaki sorgu,
sales_amountsütununa göre her bölüm içinde veriyi kümeyerek bölümlenmiş tabloyu optimize eder. Veri yerleşimini iyileştirereksales_amountüzerindeki sorguları hızlandırır.ZORDER BYifadesi, okuma performansını iyileştirmek için veriyi bölümler içinde kümeler; bölümler arasında değil.Sütun maskeleme ve satır filtreleri
Sütun maskeleme ve satır filtreleri, hassas bilgileri koruyarak kullanıcı rollerine veya koşullara göre veri görünürlüğünü sınırlar.
Örneğin aşağıdaki sorgu,
employeestablosuna dayalımasked_tableadlı maskelenmiş bir görünüm oluşturur.salarysütunu,managerrolüne sahip kullanıcılar dışında sansürlenir (REDACTEDile değiştirilir).CASEifadesi, yalnızca yöneticilerin gerçek maaşı görebilmesini, diğerlerinin maskelenmiş veriyi görmesini sağlarBenzer şekilde, aşağıdaki sorgu
salestablosuna dayalıfiltered_tableadlı bir görünüm oluşturur veya değiştirir. Görünüm, yalnızcaregion = 'US'olan verileri içerecek şekilde satırları filtreler ve erişimi yalnızca ABD satış verileriyle sınırlar.Şema evrimi
Databricks,
CREATE OR REPLACE TABLEve tablo değişiklikleri (alter) ile şema evrimini destekler. Şemayı ve veriyi üzerine yazmak içinCREATE OR REPLACE TABLEifadesini; veriyi etkilemeden şemayı artımlı olarak değiştirmek içinALTER TABLEifadesini kullanmalısınız.Aşağıdaki sorgu, mevcut
employeestablosunu yeni bir şemayla değiştirir; Delta formatında depolamayı sürdürürken yeni birhire_datesütunu ekler.Diğer bir sorgu, mevcut şemaya yeni bir
salarysütunu ekleyerekemployeestablosunu değiştirir.Performans ayarlama
Geniş ölçekli tabloların performansını optimize etmek için otomatik optimizasyon ve Z-ordering gibi çeşitli tablo özellikleri ve tekniklerden yararlanabilirsiniz.
Aşağıdaki örnekte, küçük dosyaları otomatik olarak sıkıştırmak ve yazma sırasında dosyaları birleştirmek için özellikler ayarlanarak
delta_tableüzerinde otomatik optimizasyon etkinleştirilir; bu da depolama verimliliğini artırır.Benzer şekilde, aşağıdaki sorgu
delta_tabletablosunuregionvesales_datesütunlarına göre kümleyerek optimize eder; özellikle bu sütunlardaki filtreler için sorgu performansını artırır.En iyi uygulamalar ve dikkat edilmesi gerekenler
Databricks'te tablo oluştururken doğru şekilde ilerlemek için göz önünde bulundurmanız gereken bazı noktalar şunlardır:
Yaygın Hatalar ve Sorun Giderme
Artık Databricks'te tabloları yönetmeye yönelik en iyi uygulamaları ele aldığımıza göre, Databricks tablolarında sık karşılaşabileceğiniz sorunları, tipik hata mesajlarını ve çözümlerini anlatayım.
CREATE ve CREATE OR REPLACE kullanırken boş olmayan konum hataları
Belirtilen bir konumla (
LOCATIONifadesi)CREATE TABLEkullanırken, dizin boş değilse şu tür bir hatayla karşılaşabilirsiniz:Bu hata,
CREATE TABLEkomutunun belirtilen konum için boş bir dizin beklemesinden, ancak mevcut dosyaların veya meta verilerin bu gereksinimle çakışmasından kaynaklanır.Bu hatayı çözmek için, mevcut veri ve meta verileri üzerine yazmak üzere
CREATE OR REPLACE TABLEifadesini kullanın. Ya daCREATE TABLEifadesini kullanmadan önce dizini manuel olarak temizleyin.Şema uyuşmazlığı veya belirli veri tipleriyle ilgili sorunlar
Veri ekleme veya sorgulama, şu tür şema uyuşmazlığı hatalarıyla sonuçlanabilir:
Hata, tablo şeması ile gelen veri tipleri arasındaki uyumsuzluktan kaynaklanabilir. Ayrıca desteklenmeyen veya belirsiz veri tipi dönüştürmeleri (ör. karmaşık iç içe tipler) de şema uyuşmazlığına yol açabilir. Bu hatayı çözmek için, tablo oluşturma sırasında şemayı doğrulayarak şema eşleşmesini zorlayın veya Delta tablolarda şema zorlamasını kullanın.
Ayrıca, yeni sütunlar eklerken veya veri tiplerini değiştirirken şema evrimine izin vermelisiniz.
Veri eklerken açık tip dönüşümü kullanmak da bu tür hataların giderilmesine yardımcı olur.
Identity sütunlarıyla eşzamanlı işlem sınırlamaları
Identity sütunları kullanırken, şu tür eşzamanlı işlem sorunlarıyla karşılaşabilirsiniz:
Identity sütunları durumsaldır ve birden fazla işlem aynı anda veri eklemeye çalıştığında çakışmalarla karşılaşabilir. Bu hatayı gidermek için,
uuid()veyamonotonically_increasing_id()gibi fonksiyonlarla üretilen belirleyici vekil anahtarlar kullanarak identity sütunlarının yerine vekil anahtarlar kullanın.Ayrıca, identity sütunlarına güvenmeden karmaşık ekleme ve güncelleme iş akışları için Delta Lake’in
MERGEözelliğini kullanabilirsiniz.Sonuç
Databricks'te
CREATE TABLEkomutu; veri yapıları tanımlamak, harici verilere bağlanmak ve sorgularla yeni veri kümeleri türetmek için çok yönlü bir araçtır. İhtiyaçlarınıza göre Databricks'te tablo oluşturma ve yönetmenin farklı sözdizimlerini anlamak önemlidir. Gördüğünüz gibi, seçebileceğiniz birkaç farklı tablo oluşturma yöntemi vardır.Databricks’in temel kavramlarını keşfetmek isterseniz, Databricks’i İş Zekâsı (BI) için bir veri ambarı çözümü olarak öğrenmek üzere DataCamp’in Introduction to Databricks kursunu almanızı önemle tavsiye ederim. Ayrıca, Databricks sertifikalarını nasıl alabileceğinizi, kariyer faydalarını ve kariyer hedefleriniz için doğru sertifikayı nasıl seçeceğinizi öğrenmek için 2025’te Databricks Sertifikaları blog yazımıza da göz atmanızı öneririm.