Aracılığıyla paylaş


Dış tablolar için bölüm bulma

Bu makalede Unity Kataloğu dış tabloları için varsayılan bölüm bulma stratejisi ve bölüm bulma işlemini Hive meta veri deposuyla tutarlı hale getiren bölüm meta veri günlüğünü etkinleştirmek için isteğe bağlı bir ayar açıklanmaktadır.

Databricks, bölümleri olan Unity Kataloğu dış tabloları için gelişmiş okuma hızları ve sorgu performansı için bölüm meta veri günlüğünün etkinleştirilmesini önerir.

Unity Kataloğu için varsayılan bölüm bulma stratejisi nedir?

Varsayılan olarak, Unity Kataloğu bölümleri otomatik olarak bulmak için tablo konumundaki tüm dizinleri yinelemeli olarak listeler. Birçok bölüm dizini olan büyük tablolar için bu, birçok tablo işlemi için gecikme süresini artırabilir.

Bölüm meta veri günlüğünü kullanma

Önemli

Bu özellik Genel Önizlemededir.

Databricks Runtime 13.3 LTS ve üzerinde, Unity Kataloğu'na kayıtlı dış tablolar için bölüm bulma stratejisi olan bölüm meta veri günlüğünü isteğe bağlı olarak etkinleştirebilirsiniz. Bu davranış Hive meta veri deposunda kullanılan bölüm bulma stratejisiyle tutarlıdır. Bu davranış yalnızca bölümleri olan ve Parquet, ORC, CSV veya JSON kullanan Unity Kataloğu dış tablolarını etkiler. Databricks, bu tablolar için geliştirilmiş okuma hızları ve sorgu performansı için yeni davranışın etkinleştirilmesini önerir.

Önemli

Bölüm meta veri günlüğünün etkinleştirildiği tablolar, bölüm bulma için davranışsal bir değişiklik gösterir. Unity Kataloğu, bölümler için tablo konumunu otomatik olarak taramak yerine yalnızca bölüm meta verilerinde kayıtlı bölümleri dikkate alır. Bkz. Bölüm meta verilerini el ile ekleme, bırakma veya onarma.

Bu davranış, gelecekteki Bir Databricks Runtime sürümünde varsayılan olacaktır. Bu özelliğin etkinleştirildiği tablolar yalnızca Databricks Runtime 13.3 LTS ve üzeri kullanılarak okunabilir veya yazılabilir.

Not

Yeni bölüm günlüğü davranışını kullanmadığını onaylamak için Databricks Runtime 12.2 LTS veya altındaki bir tabloyu sorgulamayı denemeniz gerekir.

Bölüm meta veri günlüğünü etkinleştirme

Bir tabloda bölüm meta verileri günlüğünü etkinleştirmek için, geçerli SparkSession'unuz için bir Spark konfederasyonu etkinleştirmeniz ve ardından bir dış tablo oluşturmanız gerekir. Bu ayar yalnızca tabloyu oluşturan SparkSession'da gereklidir. Bölüm meta veri günlüğünün etkinleştirildiği bir tablo oluşturduktan sonra, bu ayar tablo meta verilerinin bir parçası olarak kalır ve sonraki tüm iş yüklerinde bu özelliği kullanır.

Aşağıdaki söz diziminde, not defterinde Spark konfederasyonunu ayarlamak için SQL'in kullanılması gösterilmektedir. İşlem yapılandırırken Spark yapılandırmalarını da ayarlayabilirsiniz.

SET spark.databricks.nonDelta.partitionLog.enabled = true;

Önemli

Tabloları yalnızca Databricks Runtime 13.3 LTS ve üzerinde bölüm meta veri günlüğü etkinken okuyabilir ve yazabilirsiniz. Databricks Runtime 12.2 LTS veya altında çalışan ve tablolarla etkileşim kurması gereken iş yükleriniz varsa bu ayarı kullanmayın.

Dış tablolar, temel alınan veri dosyalarını bıraktığınızda silmez. Databricks, aşağıdaki örnekte olduğu gibi, tabloları bölüm meta veri günlüğünü kullanacak şekilde yükseltmek için söz diziminin kullanılmasını CREATE OR REPLACE önerir:

CREATE OR REPLACE TABLE <catalog>.<schema>.<table-name>
USING <format>
PARTITIONED BY (<partition-column-list>)
LOCATION 'abfss://<bucket-path>/<table-directory>';

Unity Kataloğu, tablolar ve birimler için yol çakışmalarında kuralları zorunlu kılar. Bu konumda zaten bir tablo varsa, veri dosyaları koleksiyonuna yeni bir Unity Kataloğu tablosu kaydedemezsiniz.

Bölüm meta verileriyle tablolarla çalışma

Databricks, Unity Kataloğu'na kayıtlı tüm tablolarda tüm okuma ve yazma işlemlerinde tablo adlarının kullanılmasını önerir. Bölüm meta verilerine sahip tablolar için bu, tabloya eklenen yeni bölümlerin Unity Kataloğu'na kaydedilmesini ve tabloda yapılan sorguların tüm kayıtlı bölümleri okumasını garanti eder.

Okumalar veya yazmalar için yol tabanlı desenlerin kullanılması bölümlerin yoksayılması veya Unity Kataloğu meta deposuna kaydedilmemesiyle sonuçlanabilir. Bkz. Sınırlamalar.

Bölümleri listeleme

Unity Kataloğu'na bölüm meta verileri olarak kaydedilen tüm bölümleri göstermek için aşağıdaki komutu kullanın:

SHOW PARTITIONS <table-name>

Tek bir bölümün Unity Kataloğu'na kayıtlı olup olmadığını denetlemek için aşağıdaki komutu kullanın:

SHOW PARTITIONS <table-name>
PARTITION (<partition-column-name> = <partition-column-value>)

Bölüm meta verilerini el ile ekleme, bırakma veya onarma

Unity Kataloğu, dış tablolar için tüm bölümlerin tablo kaydı sırasında yan tümcesi kullanılarak kaydedilen dizin içinde yer almalarını LOCATION gerektirir.

Bölüm meta verileri etkinleştirildiğinde, tablo konumundaki bölümlerin otomatik olarak bulunması devre dışı bırakılır. Dış sistemler tablo konumuna veri yazıyorsa veya tablonuzdaki kayıtları eklemek veya üzerine yazmak için yol tabanlı yazmalar kullanıyorsanız, bölüm meta verilerini el ile onarmanız gerekir.

Azure Databricks, Parquet, ORC, CSV ve JSON destekli tabloları depolamak için Hive stili bölümleme kullanır. Hive stilindeki bölümler, bölüm dizininde bir eşittir işaretiyle bağlanan anahtar-değer çiftleri içerir, örneğin year=2021/month=01/.

Tablonuzda Hive stili bölümleme kullanılıyorsa, Unity Kataloğu'ndaki bölüm meta verilerini tablo konumundaki bölümlerle eşitlemek için kullanabilirsiniz MSCK REPAIR . Aşağıdaki söz dizimi örnekleri yaygın işlemleri gösterir:

-- Add and remove parition metadata to match directories in table location
MSCK REPAIR TABLE <table_name> SYNC PARTITIONS;

-- Add partitions in the table location that are not registered as partition metadata
MSCK REPAIR TABLE <table_name> ADD PARTITIONS;

-- Drop partitions registered as partition metadata that are not in the table location
MSCK REPAIR TABLE <table_name> DROP PARTITIONS;

Bkz. REPAIR TABLE.

Diğer bölüm türleri için yolları el ile belirtme

Tablonuz Hive stili bölümleme kullanmıyorsa, bölüm eklerken bölüm konumlarını el ile belirtmeniz gerekir. Bölümleri el ile belirtmek, özellikle çok sayıda bölümü olan tablolar için söz dizimine kıyasla MSCK REPAIR gecikme süresini azaltabilir. Aşağıdaki söz dizimi örneği bölüm eklemeyi gösterir:

ALTER TABLE <table-name>
ADD PARTITION (<partition-column-name> = <partition-column-value>)
LOCATION 'abfss://<bucket-path>/<table-directory>/<partition-directory>';

Bölümleri bırakmak, yeniden adlandırmak, kurtarmak ve konumları ayarlamak için söz dizimini de kullanabilirsiniz ALTER TABLE . Bkz. ALTER TABLE ... PARTITION.

Yeni bölüm meta verilerini devre dışı bırakma

Yeni tabloların bölüm meta verilerini kullanıp kullanmadığını denetleyan Spark konferansı varsayılan olarak devre dışı bırakılır. Ayrıca bu davranışı açıkça devre dışı bırakabilirsiniz. Aşağıdaki söz diziminde Spark konfunu devre dışı bırakmak için SQL kullanılır:

SET spark.databricks.nonDelta.partitionLog.enabled = false;

Bu yalnızca SparkSession'da oluşturulan tabloların bölüm meta verilerini kullanıp kullanmayacağını denetler. Davranışı kullanan bir tabloda bölüm meta verilerini devre dışı bırakmak için, Spark konfeksiyonunun etkinleştirilmediği bir SparkSession'da tabloyu bırakmanız ve yeniden oluşturmanız gerekir.

Not

Databricks Runtime 12.2 LTS veya altında bölüm meta verilerinin etkinleştirildiği tabloları okuyamaz veya bu tablolara yazamazsınız ancak Unity Kataloğu'nda yeterli ayrıcalığınız varsa veya deyimlerini bu tablolarda çalıştırabilirsiniz DROPCREATE OR REPLACE TABLE .

Sınırlamalar

Şu sınırlamalar geçerlidir:

  • Databricks Runtime 12.2 LTS veya üzerini kullanarak bölüm meta verilerinin etkinleştirildiği tabloları okuyamaz veya bu tablolara yazamazsınız.
  • Dizin yolunu kullanarak bir tablo okunması, el ile eklenen veya bırakılan bölümler de dahil olmak üzere tüm bölümleri döndürür.
  • Tablo adı yerine yol kullanarak tabloya kayıt ekler veya üzerine yazarsanız, bölüm meta verileri kaydedilmez.
  • Avro dosya biçimi desteklenmiyor.