Aracılığıyla paylaş


Iceberg istemcilerinden Databricks tablolarını okuma

Apache Spark, Apache Flink, Trino ve Snowflake gibi desteklenen Iceberg istemcilerinden Azure Databricks'te Unity Kataloğu'na kayıtlı tabloları okumak için Iceberg REST kataloğunu kullanın.

Unity Catalog Iceberg kataloğu uç noktasını kullanarak okuma

Unity Kataloğu, Iceberg okumaları etkinleştirilmiş tablolar için Iceberg REST katalog API'sinin salt okunur bir uygulamasını sağlar.

uç nokta /api/2.1/unity-catalog/icebergkullanarak 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 denetlemek için kimlik bilgisi otomatlarının kullanılmasını önerir. Bkz. dış sistem erişimi için Unity Kataloğu kimlik bilgileri.

İstemciniz için kimlik bilgisi otomatları desteklenmiyorsa, Iceberg okumaları (UniForm) için etkinleştirilmiş delta tablosunun dosyalarını ve meta verilerini içeren bulut depolama konumuna, istemciden erişimi yapılandırmanız gerekir. Yapılandırma ayrıntıları için Iceberg okuyucu 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ürleri Iceberg REST katalog okumaları için uygundur:

  • Iceberg okumaları (UniForm) etkinleştirilmiş Unity Kataloğu tarafından yönetilen tablolar.
  • Iceberg okumaları (UniForm) etkinleştirilmiş Delta Lake ile depolanan Unity Kataloğu harici tabloları.

Bkz. Iceberg istemcileri ile Delta tablolarını okuma.

Iceberg REST kataloğunu kullanarak Iceberg istemcilerinden Databricks tablolarını okuma 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ı okuma

Aşağıda Apache Spark'ı Azure Databricks tablolarını Iceberg olarak okuyacak şekilde yapılandırma ayarlarına bir örnek verilmiştir:

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

# Configuration for accessing Uniform 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>.uri": "<workspace-url>/api/2.1/unity-catalog/iceberg",
"spark.sql.catalog.<spark-catalog-name>.token":"<token>",
"spark.sql.catalog.<spark-catalog-name>.warehouse":"<uc-catalog-name>"

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ının URL'si.
  • <token>: Tümleştirmeyi yapılandıran sorumlu için PAT belirteci.

Bu yapılandırmalarla, <catalog-name>.<schema-name>.<table-name>tanımlayıcısını kullanarak Apache Spark'ta Azure Databricks tablolarını Iceberg olarak 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. Buluta özgü Iceberg paketi JAR'sini Spark paketi 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 Iceberg AWS tümleştirmesi belgelerine , Spark'e bakın.

Snowflake ile Databricks tablolarını okuma

Aşağıda Snowflake'in Azure Databricks tablolarını Iceberg olarak okumasına izin vermek için önerilen 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',
    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ının URL'si.
  • <token>: Tümleştirmeyi yapılandıran sorumlu için PAT belirteci.

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 "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.