Aracılığıyla paylaş


Apache Iceberg istemcilerinden Azure Databricks tablolarına erişme

Önemli

Unity Kataloğu Apache Iceberg REST Katalog API'si, Databricks Runtime 16.4 LTS ve üzerinde Genel Önizleme aşamasındadır. Bu uç nokta Iceberg istemcilerinden gelen tabloları okumak ve tablolara yazmak için önerilir.

Unity Kataloğu'nun salt okunur bir Iceberg REST Kataloğu API'si uç noktası da vardır. Bu eski bir uç noktadır. Bkz. Apache Iceberg istemcilerinden Databricks tablolarını okuma (eski).

Apache Iceberg REST kataloğu Apache Spark, Apache Flink ve Trino gibi desteklenen istemcilerin Azure Databricks'te Unity Kataloğu'na kayıtlı Iceberg tablolarından okumasına ve bu tablolara yazmasına olanak tanır.

Desteklenen tümleştirmelerin tam listesi için bkz. Unity Kataloğu tümleştirmeleri.

Unity Kataloğu Iceberg katalog uç noktasını kullanma

Unity Kataloğu, Iceberg REST kataloğu API belirtiminin bir uygulamasını sağlar.

uç nokta /api/2.1/unity-catalog/iceberg-restkullanarak erişimi yapılandırın. Bu REST API'yi kullanma hakkında ayrıntılı bilgi için bkz. Iceberg REST API belirtimi.

Not

Azure Databricks, bazı Iceberg okuyucu müşterileri için kimlik bilgisi verme özelliğini tanıttı. Databricks, desteklenen sistemler için bulut depolama konumlarına erişimi kontrol etmek için kimlik bilgisi yönetiminin kullanılmasını önerir. Bkz. dış sistem erişimi için Unity Kataloğu kimlik bilgileri dağıtımı.

Kimlik bilgisi sağlama istemciniz için desteklenmiyorsa, delta veya Iceberg tablosu için dosyaları ve meta verileri içeren depolama konumuna istemciden erişimi yapılandırmanız gerekir. Yapılandırma ayrıntıları için Iceberg istemcinizin belgelerine bakın.

Gereksinimler

Azure Databricks, Unity Kataloğu'nun bir parçası olarak Iceberg REST kataloğunun tablolara erişimini destekler. Bu uç noktaları kullanmak için çalışma alanınızda Unity Kataloğu'nu etkinleştirmiş olmanız gerekir. Aşağıdaki tablo türlerine Iceberg REST Kataloğu aracılığıyla erişilebilir:

Konu Okumak Yazmak
Yönetilen Buzdağı Evet Evet
Yabancı Buzdağı Evet Hayı
Yönetilen Delta (Iceberg okuma özelliği etkinleştirildiğinde) Evet Hayı
Dış Delta ("Iceberg" okuması etkinleştirildiğinde) Evet Hayı

Iceberg REST Katalog API'sini okurken harici Iceberg tabloları otomatik olarak güncellenmez. Yenilemek için en son anlık görüntüyü okumak için komutunu çalıştırmanız REFRESH FOREIGN TABLE gerekir. Yabancı Iceberg tablolarında kimlik bilgisi dağıtımı desteklenmiyor.

Not

Delta tablolarına Iceberg REST Katalog API'sini kullanarak erişilebilecek şekilde yapılandırmanız gerekir. Bkz. Iceberg istemcileri ile Delta tablolarını okuma.

Iceberg REST kataloğunu kullanarak Iceberg istemcilerinden Azure Databricks tablolarını okuma veya yazma erişimini yapılandırmak için aşağıdaki yapılandırma adımlarını tamamlamanız gerekir:

Apache Spark ile Iceberg tablolarını kullanma

Aşağıda Apache Spark'ın OAuth kimlik doğrulamasını kullanarak Iceberg REST Katalog API'sini kullanarak Azure Databricks tablolarına erişecek şekilde nasıl yapılandırılmaya yönelik bir örnek verilmiştir:

"spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions",

# Configuration for accessing tables in Unity Catalog
"spark.sql.catalog.<spark-catalog-name>": "org.apache.iceberg.spark.SparkCatalog",
"spark.sql.catalog.<spark-catalog-name>.type": "rest",
"spark.sql.catalog.<spark-catalog-name>.rest.auth.type": "oauth2",
"spark.sql.catalog.<spark-catalog-name>.uri": "<workspace-url>/api/2.1/unity-catalog/iceberg-rest",
"spark.sql.catalog.<spark-catalog-name>.oauth2-server-uri": "<workspace-url>/oidc/v1/token",
"spark.sql.catalog.<spark-catalog-name>.credential":"<oauth_client_id>:<oauth_client_secret>",
"spark.sql.catalog.<spark-catalog-name>.warehouse":"<uc-catalog-name>"
"spark.sql.catalog.<spark-catalog-name>.scope":"all-apis"

Aşağıdaki değişkenleri değiştirin:

  • <uc-catalog-name>: Unity Kataloğu'nda tablolarınızı içeren kataloğun adı.
  • <spark-catalog-name>: Spark oturumunuzda kataloğu atamak istediğiniz ad.
  • <workspace-url>: Azure Databricks çalışma alanı URL'si.
  • <oauth_client_id>: Kimlik doğrulama sorumlusu için OAuth istemci kimliği.
  • <oauth_client_secret>: Kimlik doğrulayıcı için OAuth istemci gizli anahtarı.

Bu yapılandırmalarla, Apache Spark kullanarak Unity Kataloğu'ndaki tabloları sorgulayabilirsiniz. Birden çok katalogda tablolara erişmek için her kataloğu ayrı ayrı yapılandırmanız gerekir.

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

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

  • Azure Databricks, tüm tablolar için bulut nesne depolama kullanır. Iceberg-spark-runtime JAR dosyasını Spark paketleri olarak eklemeniz gerekir:

    • AWS: org.apache.iceberg:iceberg-aws-bundle:<iceberg-version>
    • Gök mavisi: org.apache.iceberg:iceberg-azure-bundle:<iceberg-version>
    • GCP: org.apache.iceberg:iceberg-gcp-bundle:<iceberg-version>

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

    Not

    Azure Databricks'ten Iceberg tablolarına erişirken bu yapılandırmalar gerekli değildir. Dış Iceberg JAR'lerinin Azure Databricks kümelerine yüklenmesi desteklenmez.

Snowflake ile Azure Databricks tablolarına erişme

Aşağıda, Unity Kataloğu'nda Iceberg REST Kataloğu'na bağlanarak Snowflake'in Azure Databricks tablolarına erişmesine yönelik yapılandırma ayarlarına bir örnek verilmiştir:

CREATE OR REPLACE CATALOG INTEGRATION <catalog-integration-name>
  CATALOG_SOURCE = ICEBERG_REST
  TABLE_FORMAT = ICEBERG
  CATALOG_NAMESPACE = '<uc-schema-name>'
  REST_CONFIG = (
    CATALOG_URI = '<workspace-url>/api/2.1/unity-catalog/iceberg-rest',
    WAREHOUSE = '<uc-catalog-name>'
  )
  REST_AUTHENTICATION = (
    TYPE = BEARER
    BEARER_TOKEN = '<token>'
  )
  ENABLED = TRUE;

Aşağıdaki değişkenleri değiştirin:

  • <catalog-integration-name>: Snowflake'e kayıtlı kataloğu atamak istediğiniz ad.
  • <uc-schema-name>: Erişmeniz gereken Unity Kataloğu'ndaki şemanın adı.
  • <uc-catalog-name>: Erişmeniz gereken Unity Kataloğu'ndaki kataloğun adı.
  • <workspace-url>: Azure Databricks çalışma alanı URL'si.
  • <token>: Tümleştirmeyi yapılandıran sorumlu için PAT belirteci.

PyIceberg ile Azure Databricks tablolarını kullanma

Aşağıda, PyIceberg'in Unity Kataloğu'ndaki Iceberg REST Kataloğu'na bağlanarak Azure Databricks tablolarına erişmesine izin veren yapılandırma ayarlarına bir örnek verilmiştir:

catalog:
  unity_catalog:
    uri: https://<workspace-url>/api/2.1/unity-catalog/iceberg-rest
    warehouse: <uc-catalog-name>
    token: <token>

Aşağıdaki değişkenleri değiştirin:

  • <workspace-url>: Azure Databricks çalışma alanı URL'si.
  • <uc-catalog-name>: Erişmeniz gereken Unity Kataloğu'ndaki kataloğun adı.
  • <token>: Tümleştirmeyi yapılandıran sorumlu için PAT belirteci.

PyIceberg REST katalog yapılandırması belgelerine bakın.

REST API curl örneği

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

curl -X GET -H "Authorization: Bearer $OAUTH_TOKEN" -H "Accept: application/json" \
https://<workspace-instance>/api/2.1/unity-catalog/iceberg-rest/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.