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.
Önemli
Lakebase Provisioned, manuel olarak ölçeklendirdiğiniz sağlanmış hesaplama kaynakları kullanan özgün Lakebase teklifidir. Desteklenen bölgeler için bkz . Bölge kullanılabilirliği. Otomatik ölçeklendirme işlemi, sıfıra ölçeklendirme, dallanma ve anlık geri yükleme ile Lakebase'in en son sürümü için bkz. Lakebase Otomatik Ölçeklendirme.
12 Mart 2026'dan bu yana, yeni Lakebase örnekleri Otomatik Ölçeklendirme projeleri olarak oluşturulur. Mevcut Sağlanan örnekler, Haziran 2026'dan itibaren otomatik olarak Otomatik Ölçeklendirme'ye yükseltiliyor. Ayrıntılar için bkz. Lakebase Otomatik Ölçeklendirmesine Yükseltme.
Eşitlenmiş tablolar, Lakebase Tarafından Sağlanan Postgres örnekleri aracılığıyla lakehouse verilerini sunmanızı sağlar. Unity Kataloğu tabloları Postgres ile eşitlenir, böylece uygulamalar lakehouse verilerini düşük gecikme süresiyle doğrudan sorgulayabilir. Bu işlem genellikle ters ETL olarak bilinir. Lakehouse analiz ve zenginleştirme için iyileştirilirken, Lakebase hızlı arama stili sorgular ve işlem tutarlılığı gerektiren operasyonel iş yükleri için tasarlanmıştır.
Eşitlenen tablolar nedir?
Eşitlenmiş tablolar, Unity Kataloğu'ndan Lakebase Tarafından Sağlanan Postgres aracılığıyla analiz sınıfı veriler sunmanızı sağlayarak düşük gecikme süreli sorgular ve tam ACID işlemleri gerektiren uygulamaların kullanımına sunmanızı sağlar. Verilerinizi gerçek zamanlı uygulamalarda kullanıma hazır tutarak analiz depolama ve işletim sistemleri arasındaki boşluğu kapatır.
Eşitleme işlem hatları, hem Unity Kataloğu eşitlenen tablosunu hem de Postgres tablosunu kaynak tablodaki değişikliklerle sürekli güncelleştirmek için yönetilen Lakeflow işlem hatlarını kullanır. Oluşturulduktan sonra, eşitlenen tablolar doğrudan Postgres araçları kullanılarak sorgulanabilir.
Eşitlenen tabloların temel özellikleri şunlardır:
- Kaynakla veri bütünlüğünü korumak için Postgres'te tabloda yalnızca okuma sorguları çalıştırma
- Yönetilen Lakeflow iş hatları kullanılarak otomatik olarak senkronize edilir
- Standart PostgreSQL arabirimleri aracılığıyla sorgulanabilir
- İdare ve yaşam döngüsü yönetimi için Unity Kataloğu aracılığıyla yönetilir
Uyarı
Eşitlenmiş bir tabloyu doğrudan Postgres'te değiştirmek mümkün olsa da Azure Databricks kaynakla veri bütünlüğünü korumak için yalnızca okuma sorguları çalıştırmanızı kesinlikle önerir. Eşitlenen tablolarda desteklenen işlemler için bkz . Desteklenen işlemler.
Başlamadan önce
- Herhangi bir katalogda Unity Kataloğu tablonuz var.
- Veritabanı örneği üzerinde izinleriniz var
CAN USE.
Eşitlenmiş tablo oluşturma
Kullanıcı Arayüzü (UI)
Unity Kataloğu tablosunu Postgres ile eşitlemek için aşağıdakileri yapın:
Çalışma alanı kenar çubuğunda Katalog'a tıklayın.
Eşitlenmiş tablo oluşturmak istediğiniz Unity Kataloğu tablosunu bulun ve seçin.
Eşitlenmiş tablo oluştur'a> tıklayın.
Kataloğunuzu, şemanızı seçin ve yeni eşitlenen tablo için bir tablo adı girin.
- Eşitlenmiş tablolar, bazı ek yapılandırmalarla Standart kataloglarda da oluşturulabilir. Standart kataloğunuzu, bir şemayı seçin ve yeni oluşturulan eşitlenmiş tablo için bir tablo adı girin.
Bir veritabanı örneği seçin ve eşitlenen tablonun oluşturulacağı Postgres veritabanının adını girin. Postgres veritabanı alanı varsayılan olarak seçili durumdaki hedef kataloğu kullanır. Bu ad altında bir Postgres veritabanı yoksa, Azure Databricks yeni bir veritabanı oluşturur.
Birincil Anahtar seçin. Okuma, güncelleştirme ve silme işlemleri için satırlara verimli erişim sağladığı için birincil anahtar gereklidir .
Önemli
Eşitlenen tabloda birincil anahtarın sütunlarına null değer atanamaz. Bu nedenle, birincil anahtar sütunlarında null değerleri olan satırlar eşitlemenin dışında tutulur.
Kaynak tabloda iki satır aynı birincil anahtara sahipse, yinelenenleri kaldırmayı yapılandırmak için bir Timeseries Anahtarı seçin. Bir Timeseries Anahtarı belirtildiğinde, eşitlenen tablolar yalnızca her birincil anahtar için en son timeseries anahtar değerine sahip satırları içerir.
Anlık Görüntü, Tetiklenen ve Sürekli'den eşitleme modunu seçin. Her eşitleme modu hakkında daha fazla bilgi için bkz. Eşitleme modları açıklandı.
Bu eşitlenmiş tabloyu yeni veya mevcut bir işlem hattından oluşturmak isteyip istemediğinizi seçin.
- Yeni bir işlem hattı oluşturuyor ve yönetilen katalog kullanıyorsanız, hazırlama tablosunun depolama konumunu seçin. Standart katalog kullanılıyorsa, hazırlama tablosu otomatik olarak katalogda depolanır.
- Mevcut bir işlem hattını kullanıyorsanız, yeni eşitleme modunun işlem hattı moduyla eşleşip eşleşmediğini denetleyin.
(İsteğe bağlı) Sunucusuz kullanım ilkesi seçin. Sunucusuz kullanım ilkesi oluşturmak için bkz . Sunucusuz kullanım ilkeleriyle öznitelik kullanımı. Bu, faturalama kullanımını belirli sunucusuz kullanım ilkelerine bağlamanıza olanak tanır.
- Eşitlenmiş tablolar için faturalanabilir varlık, altyapıdaki işlem hattıdır. Kullanım ilkesini değiştirmek için temel alınan işlem hattı nesnesini değiştirin. Bkz . Sunucusuz işlem hattı yapılandırma.
Eşitlenen tablo durumuÇevrimiçi olduktan sonra veritabanı örneğinize oturum açın ve yeni oluşturulan tabloyu sorgulayın. SQL düzenleyicisini, dış araçları veya not defterlerini kullanarak tablonuzu sorgulayın.
Python SDK'sı
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.database import SyncedDatabaseTable, SyncedTableSpec, NewPipelineSpec, SyncedTableSchedulingPolicy
# Initialize the Workspace client
w = WorkspaceClient()
# Create a synced table in a database catalog
synced_table = w.database.create_synced_database_table(
SyncedDatabaseTable(
name="database_catalog.schema.synced_table", # Full three-part name
spec=SyncedTableSpec(
source_table_full_name="source_catalog.source_schema.source_table",
primary_key_columns=["id"], # Primary key columns
scheduling_policy=SyncedTableSchedulingPolicy.TRIGGERED, # SNAPSHOT, TRIGGERED, or CONTINUOUS
# Optional: timeseries_key="timestamp" # For deduplication
new_pipeline_spec=NewPipelineSpec(
storage_catalog="storage_catalog",
storage_schema="storage_schema"
)
),
)
)
print(f"Created synced table: {synced_table.name}")
# Create a synced table in a standard UC catalog
synced_table = w.database.create_synced_database_table(
SyncedDatabaseTable(
name="standard_catalog.schema.synced_table", # Full three-part name
database_instance_name="my-database-instance", # Required for standard catalogs
logical_database_name="postgres_database", # Required for standard catalogs
spec=SyncedTableSpec(
source_table_full_name="source_catalog.source_schema.source_table",
primary_key_columns=["id"],
scheduling_policy=SyncedTableSchedulingPolicy.CONTINUOUS,
create_database_objects_if_missing=True, # Create database/schema if needed
new_pipeline_spec=NewPipelineSpec(
storage_catalog="storage_catalog",
storage_schema="storage_schema"
)
),
)
)
print(f"Created synced table: {synced_table.name}")
# Check the status of a synced table
synced_table_name = "database_catalog.schema.synced_table"
status = w.database.get_synced_database_table(name=synced_table_name)
print(f"Synced table status: {status.data_synchronization_status.detailed_state}")
print(f"Status message: {status.data_synchronization_status.message}")
CLI
# Create a synced table in a database catalog
databricks database create-synced-database-table \
--json '{
"spec": {
"name": "database_catalog.schema.synced_table",
"source_table_full_name": "source_catalog.source_schema.source_table",
"primary_key_columns": ["id"],
"scheduling_policy": "TRIGGERED"
},
"new_pipeline_spec": {
"storage_catalog": "storage_catalog",
"storage_schema": "storage_schema"
}
}'
# Create a synced table in a standard UC catalog
# new_pipeline_spec, storage_catalog, and storage_schema are optional
databricks database create-synced-database-table \
--database-instance-name "my-database-instance" \
--logical-database-name "databricks_postgres" \
--json '{
"name": "standard_catalog.schema.synced_table",
"spec": {
"source_table_full_name": "source_catalog.source_schema.source_table",
"primary_key_columns": ["id"],
"scheduling_policy": "CONTINUOUS",
"create_database_objects_if_missing": true
}
}'
# Check the status of a synced table
databricks database get-synced-database-table "database_catalog.schema.synced_table"
Kıvrım
Veritabanı kataloğunda eşitlenmiş tablo oluşturma.
export CATALOG_NAME=<Database catalog>
export SRC_TBL="source_catalog.source_schema.source_table"
export DEST_TBL="$CATALOG_NAME.some_schema.synced_table"
export PKS='["id"]'
export ST_CATALOG="storage_catalog"
export ST_SCHEMA="storage_schema"
curl -X POST https://$WORKSPACE/api/2.0/database/synced_tables \
-H "Content-Type: text/json" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}" \
--data-binary @- << EOF
{
"name": "$DEST_TBL",
"spec": {
"source_table_full_name": "$SRC_TBL",
"primary_key_columns": $PKS,
"scheduling_policy": "TRIGGERED",
},
"new_pipeline_spec": {
"storage_catalog": "$ST_CATALOG",
"storage_schema": "$ST_SCHEMA",
}
}
EOF
Standart Unity Kataloğu'nda senkronize bir tablo oluşturun.
export CATALOG_NAME=<Standard catalog>
export DATABASE_INSTANCE=<database instance>
export POSTGRES_DATABASE=$CATALOG_NAME
export SRC_TBL="source_catalog.source_schema.source_table"
export DEST_TBL="$CATALOG_NAME.some_schema.sync_table"
export PKS='["id"]'
export ST_CATALOG="storage_catalog"
export ST_SCHEMA="storage_schema"
curl -X POST https://$WORKSPACE/api/2.0/database/synced_tables \
-H "Content-Type: text/json" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}" \
--data-binary @- << EOF
{
"name": "$DEST_TBL",
"database_instance_name": "$DATABASE_INSTANCE",
"logical_database_name": "$POSTGRES_DATABASE",
"spec": {
"source_table_full_name": "$SRC_TBL",
"primary_key_columns": $PKS,
"scheduling_policy": "TRIGGERED",
},
"new_pipeline_spec": {
"storage_catalog": "$ST_CATALOG",
"storage_schema": "$ST_SCHEMA",
}
}
EOF
Eşitlenen tablonun durumunu denetleyin.
export SYNCEDTABLE='pg_db.silver.sbtest1_online'
curl --request GET \
"https://e2-dogfood.staging.cloud.databricks.com/api/2.0/database/synced_tables/$SYNCEDTABLE" \
--header "Authorization: Bearer dapi..."
Eşitleme modları açıklandı
Aşağıdaki eşitleme modlarından biriyle eşitlenmiş bir tablo oluşturulabilir ve bu da verilerin postgres'te kaynaktan eşitlenen tabloya nasıl eşitleneceğini belirler:
| Eşitleme modu | Description | Ne zaman kullanılır? | Performance |
|---|---|---|---|
| Anlık Görüntü | İşlem hattı bir kez çalıştırılarak kaynak tablonun anlık görüntüsünü alır ve eşitlenen tabloya kopyalar. Sonraki işlem hattı çalıştırmaları, kaynak verilerin tamamını hedefe kopyalar ve atomik olarak yerine yerleştirir. İşlem hattı bir API aracılığıyla veya bir zamanlamaya göre el ile tetiklenebilir. | Kaynak, döngü başına 10% satır değiştirir >veya kaynak Değişiklik Veri Akışını (görünümler, Iceberg tabloları) desteklemez. | Yüksek değişim sıklığına sahip tablolar için artımlı modlardan 10 kat daha verimlidir. |
| Tetiklenmiş | İşlem hattı bir kez çalıştırılarak kaynak tablonun anlık görüntüsünü alır ve eşitlenen tabloya kopyalar. Anlık görüntü eşitleme modundan farklı olarak, eşitlenen tablo yenilendiğinde, yalnızca son işlem hattı yürütmesinin ardından yapılan değişiklikler alınır ve eşitlenen tabloya uygulanır. Artımlı yenileme bir API aracılığıyla veya bir zamanlamaya göre el ile tetiklenebilir. | Kaynak satırlar bilinen bir tempoda artımlı olarak değişir. Eklemeler, güncelleştirmeler ve silme işlemleri her yenilemede yayılır. | İsteğe bağlı veya zamanlanmış eşitlemeler için iyi maliyet/gecikme süresi. Her 5 dakikadan daha sık çalışmak Sürekli moddan daha pahalıya mal olabilir. |
| Devamlı | İşlem hattı bir kez çalıştırılarak kaynak tablonun anlık görüntüsünü alır ve eşitlenen tabloya kopyalar ve işlem hattı sürekli olarak çalışır. Kaynak tabloda yapılan sonraki değişiklikler eşitlenen tabloya gerçek zamanlı olarak artımlı olarak uygulanır. El ile yenileme gerekmez. | Değişikliklerin Lakebase'de gerçek zamanlıya yakın bir şekilde görünmesi gerekir. | En düşük gecikme, en yüksek maliyet. |
Uyarı
Tetiklenen veya Sürekli eşitleme modunu desteklemek için, kaynak tabloda Değişiklik verisi akışı etkinleştirilmiş olmalıdır. Bazı kaynaklar (Görünümler gibi) değişiklik veri akışını desteklemez, bu nedenle yalnızca Anlık Görüntü modunda eşitlenebilirler.
Sonraki eşitlemeleri zamanla veya tetikle
İlk anlık görüntü oluşturulduğunda otomatik olarak çalışır. Anlık Görüntü ve Tetiklenen modlar için sonraki eşitlemelerin açıkça tetiklenmesi gerekir. Sürekli mod kendi kendini yönetir.
Veritabanı Tablo İşlem Hattı Eşitleme Görevi
Lakeflow İşleri'ndeki Veritabanı Tablo Eşitleme işlem hattı görevi, eşitlenmiş bir tablonun işlem hattını iş akışı adımı olarak çalıştırır. İşi tablo güncelleştirme tetikleyicisi veya zamanlamayla yapılandırın.
Kaynak tablo güncelleştirmelerinde tetikleyici
Kaynak Unity Kataloğu tablosu güncelleştirildiğinde görevi tetikler. Tetiklenen mod ile yalnızca yeni değişiklikler artımlı olarak uygulanır ve Sürekli modun her zaman açık maliyeti olmadan neredeyse gerçek zamanlı güncellik sağlar.
- Kenar çubuğunda İş Akışları'na tıklayın.
- İş oluştur'a tıklayın veya var olan bir işi açın.
- Görevler sekmesinde + Başka bir görev türü ekle'ye tıklayın.
- Veri Alım ve Dönüştürme altında Veritabanı Tablo Eşitleme işlem hattı'nı seçin.
- İşlem hattı alanında, eşitlenmiş tablonuzla ilişkili işlem hattını seçin.
- Zamanlamalar ve Tetikleyiciler'in altında Tetikleyici ekle'ye tıklayın.
- Tetikleyici türü olarak Tablo güncelleştirmesi'ni seçin.
- Tablolar'ın altında, izlenecek kaynak Unity Kataloğu tablosunu seçin.
- Kaydet'e tıklayın.
Zamanlanmış bir programa göre tetikleme
Eşitlemeyi sabit bir tempoda çalıştırır. Gecelik veya haftalık tam yenilemenin genellikle en verimli desen olduğu Anlık Görüntü modu için uygundur.
- Bir işe Veritabanı Tablo Eşitleme işlem hattı görevi eklemek için yukarıdaki 1-5. adımları izleyin.
- Zamanlamalar ve Tetikleyiciler'in altında Tetikleyici ekle'ye tıklayın.
- Tetikleyici türü olarak Zamanlanmış'ı seçin.
- Cron zamanlamanızı ve saat diliminizi ayarlayın, ardından Kaydet'e tıklayın.
SDK'yi kullanma
Bir eşitleme çalıştırmasını program aracılığıyla tetiklemek için, örneğin veri akışının üst kademesindeki bir not defteri veya işlem hattının sonunda:
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
# Get the pipeline ID from the synced table
table = w.database.get_synced_database_table(name="catalog.schema.synced_table")
pipeline_id = table.data_synchronization_status.pipeline_id
# Trigger a sync run
w.pipelines.start_update(pipeline_id=pipeline_id)
Desteklenen işlemler
Azure Databricks, yanlışlıkla üzerine yazma veya veri tutarsızlıklarını önlemek amacıyla eşitlenmiş tablolar için Postgres'te yalnızca aşağıdaki işlemlerin gerçekleştirilmesini önerir:
- Yalnızca okunabilir sorgular
- Dizin oluşturma
- Tabloyu silme (eşitlenen tabloyu Unity Kataloğu'ndan kaldırdıktan sonra yer açmak için)
Postgres'te eşitlenmiş tabloları başka şekillerde değiştirmek mümkün olsa da, bunu yapmak eşitleme işlem hattına müdahale eder.
Eşitlenmiş tabloyu silme
Eşitlenmiş bir tabloyu silmek için unity kataloğundan silmeniz ve sonra tabloyu veritabanı örneğine bırakmanız gerekir. Eşitlenen tablonun Unity Kataloğu'ndan silinmesi, tablonun kaydını kaldırır ve veri yenilemelerini durdurur. Ancak, tablo temel alınan Postgres veritabanında kalır. Veritabanı örneğinizde yer açmak için örneğe bağlanın ve komutunu kullanın DROP TABLE .
Kullanıcı Arayüzü (UI)
- Çalışma alanı kenar çubuğunda Katalog'a tıklayın.
- Silmek istediğiniz eşitlenmiş tabloyu bulun ve seçin.
-
> Sil'i seçin.
- Bağlanmak için
psql, SQL düzenleyicisi veya bir not defteri kullanarak örneğe bağlanın. - PostgreSQL kullanarak tabloyu bırakın.
DROP TABLE synced_table_database.synced_table_schema.synced_table
Python SDK'sı
from databricks.sdk import WorkspaceClient
# Initialize the Workspace client
w = WorkspaceClient()
# Delete a synced table from UC
synced_table_name = "catalog.schema.synced_table"
w.database.delete_synced_database_table(name=synced_table_name)
print(f"Deleted synced table from UC: {synced_table_name}")
# To free up space in your database instance, you need to connect to the
# instance and drop the table using PostgreSQL:
#
# DROP TABLE synced_table_database.synced_table_schema.synced_table;
CLI
# Delete a synced table from UC
databricks database delete-synced-database-table "catalog.schema.synced_table"
# To free up space in your database instance, you need to connect to the
# instance and drop the table using PostgreSQL:
#
# DROP TABLE synced_table_database.synced_table_schema.synced_table;
Kıvrım
# Delete a synced table from UC
curl -X DELETE --header "Authorization: Bearer ${DATABRICKS_TOKEN}" \
https://$WORKSPACE/api/2.0/database/synced_tables/$SYNCED_TABLE_NAME
# To free up space in your database instance, you need to connect to the
# instance and drop the table using PostgreSQL:
#
# DROP TABLE synced_table_database.synced_table_schema.synced_table;
Sahiplik ve izinler
Yeni bir Postgres veritabanı, şema veya tablo oluşturursanız Postgres sahipliği aşağıdaki gibi ayarlanır:
- Sahiplik, Azure Databricks oturum açma bilgileri Postgres'te rol olarak mevcutsa veritabanını, şemayı veya tabloyu oluşturan kullanıcıya atanır. Postgres'te Azure Databricks kimlik rolü eklemek için bkz. Postgres rolleri.
- Aksi takdirde, sahiplik Postgres'teki üst nesnenin sahibine atanır (genellikle ).
databricks_superuser
Eşitlenmiş tablo erişimini yönetme
Eşitlenmiş tablo oluşturulduktan sonra, databricks_superuser Postgres'ten bir eşitlenmiş tablo READ alabilir.
databricks_superuser, bu role tüm tablolardan okuma izni veren pg_read_all_data içerir. Bu rol ayrıca, tüm tablolara yazmasına olanak tanıyan pg_write_all_data ayrıcalığına sahiptir. Bu, bir databricks_superuser öğesinin Postgres'te eşitlenmiş bir tabloya da yazabileceği anlamına gelir. Lakebase, hedef tablonuzda acil değişiklikler yapmanız gerekme ihtimaline karşı bu yazma davranışını destekler. Ancak Databricks bunun yerine kaynak tablonuzda düzeltmeler yapmanızı önerir.
,
databricks_superuserdiğer kullanıcılara da şu ayrıcalıkları verebilir:GRANT USAGE ON SCHEMA synced_table_schema TO user;GRANT SELECT ON synced_table_name TO user;databricks_superuserşu ayrıcalıkları iptal edebilir:REVOKE USAGE ON SCHEMA synced_table_schema FROM user;REVOKE {SELECT | INSERT | UPDATE | DELETE} ON synced_table_name FROM user;
Eşitlenen tablo işlemlerini yönetme
, databricks_superuser eşitlenmiş bir tabloda belirli işlemleri gerçekleştirme yetkisi olan kullanıcıları yönetebilir. Eşitlenen tablolar için desteklenen işlemler şunlardır:
CREATE INDEXALTER INDEXDROP INDEXDROP TABLE
Eşitlenen tablolar için diğer tüm DDL işlemleri reddedilir.
Bu ayrıcalıkları ek kullanıcılara vermek için, databricks_superuser önce üzerinde databricks_authbir uzantı oluşturmalıdır:
CREATE EXTENSION IF NOT EXISTS databricks_auth;
Ardından, databricks_superuser eşitlenmiş tabloyu yönetmek için kullanıcı ekleyebilir:
SELECT databricks_synced_table_add_manager('"synced_table_schema"."synced_table"'::regclass, '[user]');
, databricks_superuser kullanıcının eşitlenmiş tabloyu yönetmesini kaldırabilir:
SELECT databricks_synced_table_remove_manager('[table]', '[user]');
databricks_superuser tüm yöneticileri görüntüleyebilir:
SELECT * FROM databricks_synced_table_managers;
Veri türü eşlemesi
Bu tür eşleme tablosu, kaynak Unity Kataloğu tablosundaki her veri türünün Postgres'teki hedef eşitleme tablosuna nasıl eşlenmiş olduğunu tanımlar:
| Kaynak sütun türü | Postgres sütun türü |
|---|---|
| BIGINT | BIGINT |
| İKİLİ | BYTEA |
| BOOLEAN | BOOLEAN |
| TARİH | DATE |
| DECIMAL(p,s) | SAYISAL |
| ÇİFT | ÇIFT DUYARLıK |
| YÜZMEK | GERÇEK |
| INT | INTEGER |
| INTERVAL intervalQualifier | ARALIK |
| SMALLINT | SMALLINT (Küçük Tamsayı) |
| DİZGİ | METİN |
| ZAMAN DAMGASI | SAAT DILIMI ILE ZAMAN DAMGASı |
| TIMESTAMP_NTZ | SAAT DILIMI OLMADAN ZAMAN DAMGASı |
| TINYINT | SMALLINT (Küçük Tamsayı) |
| GEOGRAPHY(srid) | DESTEKLENMEDİ |
| GEOMETRY(srid) | DESTEKLENMEDİ |
| ARRAY < elementType > | JSONB |
| MAP < keyType,valueType > | JSONB |
| STRUCT < [fieldName : fieldType [NOT NULL][COMMENT str][, ...]] > | JSONB |
| VARYANT | JSONB |
| NESNE | DESTEKLENMEDİ |
Uyarı
- ARRAY, MAP ve STRUCT türleri için eşleme Mayıs 2025'te değiştirildi. Bundan önce oluşturulmuş eşitleme tabloları, bu türleri JSON ile eşlemeye devam ediyor.
- TIMESTAMP eşlemesi Ağustos 2025'te değiştirildi. Bundan önce oluşturulan tabloları ZAMAN DILIMI OLMADAN TIMESTAMP ile eşlemeye devam eder.
Geçersiz karakterleri işleme
Null bayt (0x00) gibi bazı karakterlere Delta tablolarındaki STRING, ARRAY, MAPveya STRUCT sütunlarında izin verilir, ancak Postgres TEXT veya JSONB sütunlarda desteklenmez. Sonuç olarak, bu tür verilerin Delta'dan Postgres'e eşitlenmesi ekleme hatalarına neden olabilir.
org.postgresql.util.PSQLException: ERROR: invalid byte sequence for encoding "UTF8": 0x00
org.postgresql.util.PSQLException: ERROR: unsupported Unicode escape sequence DETAIL: \u0000 cannot be converted to text.
- İlk hata, doğrudan Postgres
TEXTile eşlenen bir üst düzey dize sütununda null bayt görüntülendiğinde oluşur. - İkinci hata, karmaşık bir tür (
STRUCT,ARRAYveyaMAP) içinde iç içe bir dizede null bayt göründüğünde ortaya çıkar; bu durumda Azure Databricks bunuJSONBolarak serileştirir. Serileştirme sırasında tüm dizeler PostgresTEXT'e yayınlanır ve burada\u0000izin verilmez.
Nasıl çözülür?
Bu sorunu aşağıdaki yollardan biriyle çözebilirsiniz:
Dize alanlarını temizle
Postgres ile eşitlemeden önce, karmaşık türlerin içindekiler de dahil olmak üzere tüm dize alanlarından desteklenmeyen karakterleri kaldırın veya değiştirin.
Üst düzey
STRINGbir sütundan null baytları kaldırmak için işlevini kullanınREPLACE:SELECT REPLACE(column_name, CAST(CHAR(0) AS STRING), '') AS cleaned_column FROM your_table;Yalnızca
STRINGsütunları için ikiliye dönüştürHam bayt içeriğinin korunması gerekiyorsa, etkilenen
STRINGsütunları olarakBINARYdönüştürün.
Sınırlamalar ve dikkat edilmesi gerekenler
Desteklenen kaynak tablolar
Eşitlenen tablonun eşitleme moduna bağlı olarak, farklı türlerde kaynak tablo desteklenir:
Anlık görüntü modu için kaynak tablonun desteklemesi
SELECT *gerekir. Örnek olarak Delta tabloları, Iceberg tabloları, görünümler, materyalize edilmiş görünümler ve diğer benzer türler verilebilir.Tetiklenen veya Sürekli eşitleme modları için, kaynak tabloda değişiklik veri akışıda etkinleştirilmiş olmalıdır.
Adlandırma ve tanımlayıcı sınırlamaları
-
İzin verilen karakterler: Eşitlenen tablolar için Postgres veritabanı, şema ve tablo adları yalnızca alfasayısal karakterler ve alt çizgi (
[A-Za-z0-9_]+) içerebilir. Kısa çizgiler (-) ve diğer özel karakterler desteklenmez. - Sütun ve tablo tanımlayıcıları: Kaynak Unity Kataloğu tablosundaki sütun veya tablo adlarında büyük harfler veya özel karakterler kullanmaktan kaçının. Eğer korunursa, Postgres'te bu tanımlayıcılara başvururken onları alıntılamanız gerekir.
Performans ve eşitleme
- Eşitleme hızı: Verileri eşitlenmiş tablolara eşitlemek, ek işlemler nedeniyle verileri yerel bir PostgreSQL istemcisiyle doğrudan veritabanı örneğine yazmaktan daha yavaş olabilir. Sürekli eşitleme modu, Unity Kataloğu yönetilen tablosundaki verileri en az 15 saniyelik bir aralıkta eşitlenen tabloya yeniler.
- Bağlantı kullanımı: Her tablo eşitlemesi, veritabanı örneğine en fazla 16 bağlantı kullanabilir ve bu da örneğin bağlantı sınırına doğru sayılır.
- API idempotensi: Eşitlenen tablo API'leri idempotens davranır ve işlemlerin zamanında gerçekleştirilmesini sağlamak için hatalar oluşursa tekrar denenmesi gerekebilir.
-
Şema değişiklikleri:
Triggeredya daContinuousmodunda eşitlenmiş tablolar için, Unity Katalog tablolarından yalnızca ekleyici şema değişiklikleri (örneğin, yeni bir sütun ekleme) eşitlenmiş tabloya yansıtılır. - Yinelenen anahtarlar: Kaynak tabloda iki satır aynı birincil anahtara sahipse, yinelenenleri kaldırmayı bir timeseries anahtarı kullanarak yapılandırmadığınız sürece eşitleme işlem hattı başarısız olur. Ancak, zaman aralığı anahtarı kullanmanın bir performans cezası vardır.
- Güncelleştirme hızı: Lakebase Provisioned için eşitleme işlem hattı, Kapasite Birimi (CU) başına saniyede yaklaşık 1200 satırda Sürekli ve Tetiklenen yazmaları destekler ve Anlık Görüntü, CU başına saniyede 15.000 satıra kadar yazar.
Kapasite ve sınırlar
-
Tablo sınırları:
- Kaynak tablo başına 20 eşitlenmiş tablo sınırı.
- Her tablo eşitlemesi en fazla 16 veritabanı bağlantısı kullanabilir.
-
Boyut sınırları ve tam yenileme:
- Eşitlenmiş bir tabloyu tam olarak yenilerseniz, yeni tablo eşitlenene kadar Postgres'teki eski sürüm silinmez. Yenileme sırasında her iki sürüm de geçici olarak mantıksal veritabanı boyutu sınırına dahil edilir.
- Eşitlenen tek tek tabloların sınırı yoktur, ancak örnekteki tüm tablolarda toplam mantıksal veri boyutu sınırı 2 TB'tır. Ancak, tam tablo rekreasyonu yerine yenilemeler gerekiyorsa, Databricks 1 TB'ı aşmamanızı önerir.
- Unity Kataloğu tablosunun sıkıştırılmamış, satır biçimi boyutu veritabanı örneği boyut sınırını (2 TB) aşarsa eşitleme başarısız olur. Postgres'ten eşitlenmiş tabloyu silmeden önce veritabanı örneğine daha fazla yazamazsınız.
Katalog tümleştirmesi
- Katalog yinelemesi: Ayrı veritabanı kataloğu olarak da kaydedilmiş bir Postgres veritabanını hedefleyen standart bir katalogda eşitlenmiş tablo oluşturmak, eşitlenen tablonun Unity Kataloğu'nda hem standart hem de veritabanı katalogları altında görünmesine neden olur.