Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Unity Kataloğu'nda dış tablo, veri dosyalarını bulut kiracınızdaki bulut nesne depolama alanında depolar. Unity Kataloğu tablonun meta verilerini yönetmeye devam ederek tüm sorgularda tam veri idaresi sağlar. Ancak verilerin yaşam döngüsünü, iyileştirmesini, depolama konumunu veya düzenini yönetmez.
Unity Kataloğu dış tablosu tanımlarken bir depolama konumu belirtmeniz gerekir. Bu konum, Unity Kataloğu'nda kayıtlı bir dış konumdur . Dış tabloyu bıraktığınızda Unity Kataloğu tablo meta verilerini kaldırır ancak temel alınan veri dosyalarını silmez.
Bu sayfa Unity Kataloğu dış tablolarına odaklanır. Eski Hive meta veri deposundaki dış tabloların farklı davranışları vardır. Bkz. Eski Hive meta veri deposundaki veritabanı nesneleri.
Dış tablolar ne zaman kullanılır?
Databricks, aşağıdaki kullanım örnekleri için dış tabloların kullanılmasını önerir:
- JSON veya Avro gibi, Unity Catalog tarafından yönetilen tablolarla uyumlu olmayan mevcut verilere dayanan bir tabloyu kaydetmeniz gerekir. Bkz. Dış tablolar için dosya biçimleri.
- Diğer dış erişim desenlerini desteklemeyen Databricks dışı istemcilerden verilere doğrudan erişime ihtiyacınız vardır. Unity Kataloğu ayrıcalıkları, kullanıcılar dış sistemlerden veri dosyalarına eriştiğinde uygulanmaz. Bkz. dış sistemleri kullanarak Databricks verilerine erişme.
Çoğu durumda Databricks, otomatik tablo iyileştirme, daha hızlı sorgu performansı ve daha düşük maliyetlerden yararlanmak için Unity Kataloğu yönetilen tablolarının kullanılmasını önerir. Dış tabloları yönetilen tablolara taşımak için bkz. Dış veya yabancı Delta Lake tablolarını Unity Catalog yönetilen tablolarına dönüştürme.
Önemli
Databricks dışı bir istemci kullanarak veya Databricks'in içinden yol tabanlı erişim kullanarak dış tablo meta verilerini güncelleştirirseniz, bu meta veriler Unity Kataloğu ile durumu otomatik olarak eşitlemez. Databricks bu tür meta veri güncelleştirmelerine karşı öneride bulunur, ancak bunu yaparsanız, Unity Kataloğu'nda şemayı güncel hale getirmek için MSCK REPAIR TABLE <table-name> SYNC METADATA çalıştırmanız gerekir. Bkz. REPAIR TABLE.
Dış tablolar için dosya biçimleri
Dış tablolar aşağıdaki dosya biçimlerini kullanabilir:
- DELTA
- CSV
- JSON veri formatı
- AVRO
- PARKE
- Ork
- METİN
Dış tablo oluşturma
SQL komutlarını veya DataFrame yazma işlemlerini kullanarak dış tablolar oluşturabilirsiniz.
başlamadan önce
Dış tablo oluşturmadan önce bulut depolama alanınıza erişim izni veren bir dış konum yapılandırmanız gerekir.
Dış konumları yapılandırma hakkında daha fazla bilgi için bkz. Azure Data Lake Storage 2. Nesil (ADLS 2. Nesil) dış konumuna bağlanma.
Dış tablo oluşturmak için aşağıdaki izin gereksinimlerini karşılamanız gerekir:
- Dış tablo tarafından erişilen
CREATE EXTERNAL TABLEerişim sağlayan bir dış konumdakiLOCATIONayrıcalığı. -
USE CATALOGtablonun ana kataloğundaki izin. -
USE SCHEMATablonun ana şeması üzerindeki izin. -
CREATE TABLETablonun ana şeması üzerindeki izin.
Uyarı
S3 dış konumu birden çok meta veri deposuyla ilişkilendirildiğinde, farklı meta veri depolarından aynı dış tabloya yazma işlemleri tutarlılık sorunlarına neden olabileceğinden, bu S3 konumunu kullanan tablolara yazma erişimi vermekten kaçının. Ancak, birden çok meta veri deposu arasında aynı S3 dış konumundan okuma güvenlidir.
Örnekler
Dış tablo oluşturmak için bir not defterinde veya SQL sorgu düzenleyicisinde aşağıdaki örneklerden birini kullanın.
Aşağıdaki örneklerde yer tutucu değerlerini değiştirin:
-
<catalog>: Tabloyu içerecek kataloğun adı. -
<schema>: Tabloyu içerecek şemanın adı. -
<table-name>: Tablonun adı. -
<column-name>ve<data-type>: Her sütunun adı ve veri türü. -
<bucket-path>: Tablonun oluşturulacağı bulut depolama demetinin yolu. -
<table-directory>: Tablonun oluşturulacağı dizin. Her tablo için benzersiz bir dizin kullanın. -
<source-table>: Sorgu sonuçlarından tablo oluştururken veri kaynağı olarak kullanılacak tablo.
SQL
ADLS 2. Nesil'de tanımlı şemayla bir dış tablo oluşturmak için aşağıdakileri çalıştırın:
CREATE TABLE <catalog>.<schema>.<table-name>
(
<column-name> <data-type>
)
LOCATION 'abfss://<bucket-path>/<table-directory>';
ADLS 2. Nesil'de sorgu sonuçlarından bir dış tablo oluşturmak için aşağıdakileri çalıştırın:
CREATE TABLE <catalog>.<schema>.<table-name>
LOCATION 'abfss://<bucket-path>/<table-directory>'
AS SELECT * FROM <source-table>;
S3'te tanımlı şemayla bir dış tablo oluşturmak için aşağıdakileri çalıştırın:
CREATE TABLE <catalog>.<schema>.<table-name>
(
<column-name> <data-type>
)
LOCATION 's3://<bucket-path>/<table-directory>';
S3'te sorgu sonuçlarından bir dış tablo oluşturmak için aşağıdakileri çalıştırın:
CREATE TABLE <catalog>.<schema>.<table-name>
LOCATION 's3://<bucket-path>/<table-directory>'
AS SELECT * FROM <source-table>;
Python
ADLS 2. Nesil'de tanımlı şemayla bir dış tablo oluşturmak için aşağıdakileri çalıştırın:
from pyspark.sql.types import StructType, StructField, StringType
schema = StructType([StructField("<column-name>", <data-type>())])
spark.createDataFrame([], schema).write \
.option("path", "abfss://<bucket-path>/<table-directory>") \
.saveAsTable("<catalog>.<schema>.<table-name>")
ADLS 2. Nesil'de bir DataFrame'den dış tablo oluşturmak için aşağıdakileri çalıştırın:
df.write \
.option("path", "abfss://<bucket-path>/<table-directory>") \
.saveAsTable("<catalog>.<schema>.<table-name>")
S3'te tanımlı şemayla bir dış tablo oluşturmak için aşağıdakileri çalıştırın:
from pyspark.sql.types import StructType, StructField, StringType
schema = StructType([StructField("<column-name>", <data-type>())])
spark.createDataFrame([], schema).write \
.option("path", "s3://<bucket-path>/<table-directory>") \
.saveAsTable("<catalog>.<schema>.<table-name>")
DataFrame'den S3'te dış tablo oluşturmak için aşağıdakileri çalıştırın:
df.write \
.option("path", "s3://<bucket-path>/<table-directory>") \
.saveAsTable("<catalog>.<schema>.<table-name>")
Tablo oluşturma parametreleri hakkında daha fazla bilgi için bkz. CREATE TABLE.
Aşağıdaki SQL söz dizimi seçenekleri DataFrame işlemleriyle çalışır:
Dış tabloyu sil
Bir tabloyu silmek için sahibi olmalısınız veya tabloda MANAGE ayrıcalığına sahip olmalısınız. Dış tabloyu bırakmak için aşağıdaki komutu çalıştırın:
SQL
DROP TABLE IF EXISTS catalog_name.schema_name.table_name;
Python
spark.sql("DROP TABLE IF EXISTS catalog_name.schema_name.table_name")
Alternatif olarak, Databricks Runtime 18.2 ve sonraki sürümleri için kullanın spark.catalog.dropTable():
spark.catalog.dropTable("catalog_name.schema_name.table_name", ifExists=True)
Unity Kataloğu, dış tabloyu bıraktığınızda bulut depolamadaki temel verileri silmez. Tabloyla ilişkili verileri kaldırmanız gerekiyorsa, temel alınan veri dosyalarını doğrudan silmeniz gerekir.
Örnek not defteri: Dış tablolar oluşturma
Katalog, şema ve dış tablo oluşturmak ve bunlar üzerindeki izinleri yönetmek için aşağıdaki örnek not defterini kullanabilirsiniz.