Aracılığıyla paylaş


Delta tablolarını Iceberg istemcileriyle okumak için UniForm kullanma

Delta Lake Universal Format (UniForm), Iceberg okuyucu istemcileriyle Delta tablolarını okumanızı sağlar. Bu özellik Databricks Runtime 14.3 LTS veya üzerini gerektirir.

Önemli

Eski UniForm IcebergCompatV1 tablo özelliğine ilişkin belgeler için bkz . Eski UniForm IcebergCompatV1.

Unity Kataloğu'nu Iceberg kataloğu olarak görev yapmak için dış bağlantı yapılandırabilirsiniz. Bkz . Unity Kataloğu Iceberg katalog uç noktasını kullanarak okuma.

UniForm Iceberg, temel parquet veri dosyaları için sıkıştırma codec'i olarak Snappy yerine Zstandard kullanır.

Not

UniForm meta veri oluşturma işlemi Delta tablolarına veri yazmak için kullanılan işlemde zaman uyumsuz olarak çalıştırılır ve bu da sürücü kaynak kullanımını artırabilir.

UniForm nasıl çalışır?

UniForm, Delta Lake ve Iceberg'in Parquet veri dosyalarından ve meta veri katmanından oluşmasından yararlanır. UniForm, Iceberg istemcilerinin Delta tablolarını okuyabilmesi için verileri yeniden yazmadan zaman uyumsuz olarak Iceberg meta verilerini otomatik olarak oluşturur. Veri dosyalarının tek bir kopyası birden çok biçime hizmet eder.

Gereksinimler

UniForm Iceberg'i etkinleştirmek için aşağıdaki gereksinimlerin karşılanması gerekir:

Not

UniForm Iceberg'in etkinleştirildiği bir tabloda silme vektörlerini etkinleştiremezsiniz.

Silme vektörleri etkin olan mevcut bir tabloda UniForm Iceberg'i etkinleştirirken silme vektörlerini devre dışı bırakmak ve temizlemek için kullanın REORG . Bkz . REORG kullanarak etkinleştirme veya yükseltme.

UniForm Buzdağı'nı etkinleştirme

Önemli

Delta UniForm'un etkinleştirilmesi Delta tablosu özelliğini IcebergCompatV2, bir yazma protokolü özelliğini ayarlar. Yalnızca bu tablo özelliğini destekleyen istemciler UniForm özellikli tablolara yazabilir. Bu özelliğin etkinleştirildiği Delta tablolarına yazmak için Databricks Runtime 14.3 LTS veya üzerini kullanmanız gerekir.

Tablo özelliğini sıfırlayarak UniForm'u delta.universalFormat.enabledFormats kapatabilirsiniz. Delta Lake okuyucu ve yazıcı protokolü sürümlerine yükseltmeler geri alınamaz.

UniForm Iceberg'i etkinleştirmek için aşağıdaki tablo özelliklerini ayarlamanız gerekir:

'delta.enableIcebergCompatV2' = 'true'
'delta.universalFormat.enabledFormats' = 'iceberg'

UniForm'un ilk etkinleştirildiğinde zaman uyumsuz meta veri oluşturma işlemi başlar. Dış istemcilerin Iceberg kullanarak tabloyu sorgulayabilmesi için bu görevin tamamlanması gerekir. Bkz . Iceberg meta veri oluşturma durumunu denetleme.

Sınırlamaların listesi için bkz . Sınırlamalar.

Tablo oluşturma sırasında etkinleştirme

UniForm Iceberg kullanmak için sütun eşleme etkinleştirilmelidir. Aşağıdaki örnekte olduğu gibi tablo oluşturma sırasında UniForm Iceberg'i etkinleştirirseniz bu otomatik olarak gerçekleşir:

CREATE TABLE T(c1 INT) TBLPROPERTIES(
  'delta.enableIcebergCompatV2' = 'true',
  'delta.universalFormat.enabledFormats' = 'iceberg');

Mevcut bir tabloyu değiştirerek etkinleştirme

Databricks Runtime 15.4 LTS ve üzerinde, aşağıdaki söz dizimini kullanarak var olan bir tabloda UniForm Iceberg'i etkinleştirebilir veya yükseltebilirsiniz:

ALTER TABLE table_name SET TBLPROPERTIES(
  'delta.enableIcebergCompatV2' = 'true',
  'delta.universalFormat.enabledFormats' = 'iceberg');

kullanarak etkinleştirme veya yükseltme REORG

Aşağıdaki örnekte olduğu gibi UniForm Iceberg'i etkinleştirmek ve temel alınan veri dosyalarını yeniden yazmak için kullanabilirsiniz REORG :

REORG TABLE table_name APPLY (UPGRADE UNIFORM(ICEBERG_COMPAT_VERSION=2));

Aşağıdakilerden biri doğruysa kullanın REORG :

  • Tablonuzda silme vektörleri etkinleştirilmiş.
  • Daha önce UniForm Iceberg sürümünü etkinleştirmiştiniz IcebergCompatV1 .
  • Athena veya Redshift gibi Hive stili Parquet dosyalarını desteklemeyen Iceberg altyapılarından okumanız gerekir.

UniForm ne zaman Iceberg meta verileri oluşturur?

Azure Databricks, Delta Lake yazma işlemi tamamlandıktan sonra meta veri oluşturmayı zaman uyumsuz olarak tetikler. Bu meta veri oluşturma işlemi, Delta işlemini tamamlayan işlemi kullanır.

Not

Iceberg meta veri oluşturmayı el ile de tetikleyebilirsiniz. Bkz. Iceberg meta veri dönüştürmeyi el ile tetikleme.

Meta veri oluşturma ile ilişkili yazma gecikme sürelerini önlemek için, sık işlemeleri olan Delta tabloları birden çok Delta işlemesini Iceberg meta verilerine yönelik tek bir işlemede gruplandırabilir.

Delta Lake, belirli bir işlem kaynağında herhangi bir anda yalnızca bir meta veri oluşturma işleminin devam etmesini sağlar. İkinci bir eşzamanlı meta veri oluşturma işlemini tetikleyen işlemeler Delta'ya başarıyla işlenir, ancak zaman uyumsuz Iceberg meta veri oluşturma işlemini tetiklemez. Bu, sık işlemeleri olan iş yükleri için meta veri oluşturma için basamaklı gecikme süresini önler (işlemeler arasında saniyeler arası).

Bkz. Delta ve Iceberg tablo sürümleri.

Delta ve Iceberg tablo sürümleri

Delta Lake ve Iceberg, tablo meta verilerinde depolanan tablo sürümlerini veya zaman damgalarını kullanarak zaman yolculuğu sorgularına izin verir.

Genel olarak Delta tablosu sürümleri, yürütme zaman damgası veya sürüm kimliğine göre Iceberg sürümleriyle uyumlu değildir. Iceberg tablosunun belirli bir sürümüne karşılık gelen Delta tablosunun hangi sürümüne karşılık olduğunu doğrulamak için ilgili tablo özelliklerini kullanabilirsiniz. Bkz . Iceberg meta veri oluşturma durumunu denetleme.

Iceberg meta veri oluşturma durumunu denetleme

UniForm, meta veri oluşturma durumunu izlemek için Unity Kataloğu ve Iceberg tablosu meta verilerine aşağıdaki alanları ekler:

Meta veri alanı Açıklama
converted_delta_version Iceberg meta verilerinin başarıyla oluşturulduğu Delta tablosunun en son sürümü.
converted_delta_timestamp Iceberg meta verilerinin başarıyla oluşturulduğu en son Delta işlemesinin zaman damgası.

Azure Databricks'te aşağıdakilerden birini yaparak bu meta veri alanlarını gözden geçirebilirsiniz:

  • tarafından DESCRIBE EXTENDED table_namedöndürülen bölüm gözden geçirildiDelta Uniform Iceberg.
  • Katalog Gezgini ile tablo meta verilerini gözden geçirme.
  • Tablo almak için REST API kullanma.

Azure Databricks dışındaki tablo özelliklerini gözden geçirme hakkında bilgi edinmek için Iceberg okuyucu istemcinizin belgelerine bakın. OSS Apache Spark için aşağıdaki söz dizimini kullanarak bu özellikleri görebilirsiniz:

SHOW TBLPROPERTIES <table-name>;

Iceberg meta veri dönüştürmeyi el ile tetikleme

Delta tablosunun en son sürümü için Iceberg meta veri oluşturma işlemini el ile tetikleyebilirsiniz. Bu işlem zaman uyumlu bir şekilde çalıştırılır, yani tamamlandığında Iceberg'de bulunan tablo içeriği, dönüştürme işlemi başlatıldığında kullanılabilen Delta tablosunun en son sürümünü yansıtır.

Bu işlem normal koşullarda gerekli olmamalıdır, ancak aşağıdakilerle karşılaşırsanız yardımcı olabilir:

  • Otomatik meta veri oluşturma başarılı olmadan önce küme sonlandırlanır.
  • Hata veya iş hatası meta veri oluşturmayı kesintiye uğratır.
  • UniForm Iceberg meta veri gneration'sını desteklemeyen bir istemci Delta tablosuna yazar.

Iceberg meta veri oluşturma işlemini el ile tetikleme için aşağıdaki söz dizimini kullanın:

MSCK REPAIR TABLE <table-name> SYNC METADATA

Bkz. REPAIR TABLE.

Meta veri JSON yolu kullanarak okuma

Bazı Iceberg istemcileri, dış Iceberg tablolarını kaydetmek için sürümlenmiş meta veri dosyalarına bir yol sağlamanızı gerektirir. UniForm, Delta tablosunun yeni bir sürümünü Iceberg'e her dönüştürdüğünde yeni bir meta veri JSON dosyası oluşturur.

Iceberg'i yapılandırmak için meta veri JSON yollarını kullanan istemciler BigQuery'yi içerir. Yapılandırma ayrıntıları için Iceberg okuyucu istemcisi belgelerine bakın.

Delta Lake, aşağıdaki deseni kullanarak Iceberg meta verilerini tablo dizini altında depolar:

<table-path>/metadata/<version-number>-<uuid>.metadata.json

Azure Databricks'te aşağıdakilerden birini yaparak bu meta veri konumunu gözden geçirebilirsiniz:

  • tarafından DESCRIBE EXTENDED table_namedöndürülen bölüm gözden geçirildiDelta Uniform Iceberg.
  • Katalog Gezgini ile tablo meta verilerini gözden geçirme.
  • REST API ile aşağıdaki komutu kullanarak:
GET api/2.1/unity-catalog/tables/<catalog-name>.<schame-name>.<table-name>

Yanıt aşağıdaki bilgileri içerir:

{
    ...
          "delta_uniform_iceberg": {
              "metadata_location":  "<cloud-storage-uri>/metadata/v<version-number>-<uuid>.metadata.json"
    }
}

Önemli

Yol tabanlı Iceberg okuyucu istemcileri, geçerli tablo sürümlerini okumak için meta veri JSON yollarının el ile güncelleştirilmesini ve yenilenmesini gerektirebilir. Parquet veri dosyaları ile Delta tablosundan kaldırıldığından kullanıcılar güncel olmayan sürümleri kullanarak Iceberg tablolarını sorgularken hatalarla VACUUMkarşılaşabilir.

Unity Kataloğu Iceberg katalog uç noktasını kullanarak okuyun

Bazı Iceberg istemcileri Iceberg REST kataloğuna bağlanabilir. Unity Kataloğu, uç nokta /api/2.1/unity-catalog/icebergkullanılarak UniForm'un etkinleştirildiği Delta tabloları için Iceberg REST katalog API'sinin salt okunur bir uygulamasını sağlar. Bu REST API'yi kullanma hakkında ayrıntılı bilgi için Iceberg REST API belirtimlerine bakın.

Iceberg katalog API'sini desteklediği bilinen istemciler Apache Spark, Flink ve Trino'ları içerir. Yapılandırma ayrıntıları için Iceberg okuyucu istemcisi belgelerine bakın.

Kimlik doğrulaması ve yetkilendirme

Dış hizmetlerden uç noktayı kullanarak api/2.1/unity-catalog/iceberg Unity Kataloğu'nda kayıtlı verilere erişmek için iki gereksinim vardır:

  • OAuth veya Databricks kişisel erişim belirteci kullanarak kimlik doğrulaması. Bkz. Azure Databricks kaynaklarına erişimin kimliğini doğrulama.
  • Meta veri deponuz için Dış veri erişimini etkinleştirin. Bu, erişimi API'nin EXTERNAL USE SCHEMA okuduğu şemada ayrıcalığı olan kullanıcılarla sınırlar. Bkz. Unity Kataloğu'nda verilere dış erişimi denetleme.

Apache Spark yapılandırma örneği

Aşağıda, OSS Apache Spark'ı UniForm'u Iceberg olarak okuyacak şekilde yapılandırmak için kullanılan ayarların bir örneği verilmiştir:

"spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions",
"spark.sql.catalog.unity": "org.apache.iceberg.spark.SparkCatalog",
"spark.sql.catalog.unity.type": "rest",
"spark.sql.catalog.unity.uri": "<api-root>/api/2.1/unity-catalog/iceberg",
"spark.sql.catalog.unity.token": "<your_personal_access_token>",
"spark.sql.catalog.unity.warehouse": "<uc_catalog_name>"

için <api-root>kişisel erişim belirtecini oluşturduğunuz çalışma alanının tam URL'sini kullanın.

Spark yapılandırmalarını kullanarak Unity Kataloğu'nda tabloları sorgularken aşağıdakileri göz önünde bulundurun:

  • Nesne tanımlayıcıları desenini unity.<schema-name>.<table-name>kullanır.

    Bu düzen, Unity Kataloğu'nda kullanılan üç katmanlı ad alanını kullanır, ancak katalog adı ile unitydeğiştirilir.

  • Yalnızca Iceberg'e özgü saklı yordamları çalıştırıyorsanız gereklidir"spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions".

  • Depolama için bir bulut sağlayıcısı kullanıyorsanız buluta özgü Iceberg paket jar'larını spark paketleri olarak eklemeniz gerekir:

    • AWS: org.apache.iceberg:iceberg-aws-bundle:<iceberg-version>
    • Azure: org.apache.iceberg:iceberg-azure-bundle:<iceberg-version>
    • GCP: org.apache.iceberg:iceberg-gcp-bundle:<iceberg-version>

    Ayrıntılar için Spark için Iceberg AWS tümleştirmesi belgelerine bakın.

REST API curl örneği

Tablo yüklemek için bu curl örneğindeki gibi bir REST API çağrısı da kullanabilirsiniz:

curl -X GET -H "Authentication: Bearer $OAUTH_TOKEN" -H "Accept: application/json" \
https://<workspace-instance>/api/2.1/unity-catalog/iceberg/v1/catalogs/<uc_catalog_name>/namespaces/<uc_schema_name>/tables/<uc_table_name>

Ardından aşağıdaki gibi bir yanıt almanız gerekir:

{
  "metadata-location": "abfss://my-container@my-storage-account.dfs.core.windows.net/path/to/iceberg/table/metadata/file",
  "metadata": <iceberg-table-metadata-json>,
  "config": {
    "expires-at-ms": "<epoch-ts-in-millis>",
    "adls.sas-token.<storage-account-name>.dfs.core.windows.net": "<temporary-sas-token>"
  }
}

Not

Yanıttaki expires-at-ms alan, kimlik bilgilerinin sona erme süresini belirtir ve varsayılan süre sonu süresi bir saattir. Daha iyi performans için, istemcinin yeni bir kimlik bilgisi istemeden önce kimlik bilgilerini son kullanma tarihine kadar önbelleğe almalarını sağlayın.

Sınırlamalar

Tüm UniForm tablolarında aşağıdaki sınırlamalar vardır:

  • UniForm, silme vektörlerinin etkinleştirildiği tablolarda çalışmaz. Bkz . Silme vektörleri nedir?.
  • UniForm etkin delta tabloları türleri desteklemez VOID .
  • Buzdağı istemcileri yalnızca UniForm'dan okuyabilir. Yazma işlemleri desteklenmez.
  • Buzdağı okuyucu istemcilerinin UniForm'a bakılmaksızın bireysel sınırlamaları olabilir. Seçtiğiniz istemcinin belgelerine bakın.
  • Delta Sharing alıcıları, UniForm etkinleştirildiğinde bile tabloyu yalnızca Delta olarak okuyabilir.
  • UniForm Iceberg tarafından kullanılan bazı Delta Lake tablo özellikleri bazı Delta Sharing okuyucu istemcileri tarafından desteklenmez. Bkz . Delta Sharing nedir?.

Değişiklik Veri Akışı, UniForm etkinleştirildiğinde Delta istemcilerinde çalışır, ancak Iceberg'de desteği yoktur.