Eşitlenmiş tablolarla göl evi verilerini sunma

Önemli

Lakebase Otomatik Ölçeklendirme, otomatik ölçeklendirme işlemi, sıfıra ölçeklendirme, dallanma ve anında geri yükleme ile Lakebase'in en son sürümüdür. Desteklenen bölgeler için bkz . Bölge kullanılabilirliği. Lakebase Tedarik Edilmiş bir kullanıcıysanız, bkz. Lakebase Tedarik Edilmiş.

Eşitlenmiş tablolar, Lakebase Postgres 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.

Lakehouse'tan Lakebase'e ve uygulamalara veri akışını gösteren mimari diyagramı

Eşitlenen tablolar nedir?

Eşitlenmiş tablolar, Unity Kataloğu'ndan Lakebase Postgres aracılığıyla analiz sınıfı veriler sunmanızı sağlayarak düşük gecikme süreli sorgular (10ms altı) 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.

Desteklenen kaynaklar

Eşitlenen tablolar aşağıdaki Unity Kataloğu kaynak türlerini destekler:

  • Yönetilen ve harici Delta tabloları
  • Yönetilen ve harici Iceberg tabloları
  • Görünümler ve materyalize edilmiş görünümler

Nasıl çalışır?

Databricks senkronize tablolar, Lakebase'de Unity Kataloğunuzun yönetilen bir kopyasını oluşturur. Eşitlenmiş tablo oluşturduğunuzda şunları elde edersiniz:

  1. Unity Kataloğu'nda senkronizasyon işlem hattına referans veren senkronize edilmiş tablo
  2. Lakebase'de bir Postgres tablosu (salt okunur ve uygulamalarınız tarafından sorgulanabilir)

Eşitlenmiş tablolardaki üç tablo ilişkisini gösteren diyagram

Örneğin, altın tabloları, mühendislik özelliklerini veya ML çıkışlarını analytics.gold.user_profiles yeni bir eşitlenmiş tabloyla analytics.gold.user_profiles_synced eşitleyebilirsiniz. Postgres'te Unity Kataloğu şema adı Postgres şema adı olur, bu nedenle şöyle görünür gold.user_profiles_synced:

SELECT * FROM gold.user_profiles_synced WHERE user_id = 12345;

Uygulamalar standart Postgres sürücülerine bağlanır ve eşitlenen verileri kendi işletim durumlarıyla birlikte sorgular.

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.

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 Spark Bildirimli İşlem Hatları kullanır. Her eşitleme, Lakebase veritabanınıza en fazla 16 bağlantı kullanabilir.

Lakebase Postgres, işlem garantileri ile 1.000'e kadar eşzamanlı bağlantıyı destekler, böylece uygulamalar zenginleştirilmiş verileri okurken aynı veritabanındaki eklemeleri, güncelleştirmeleri ve silmeleri de işleyebilir.

Eşitleme modları

Uygulamanızın gereksinimlerine göre doğru eşitleme modunu seçin:

Modu Açıklama Ne zaman kullanılır? Performans
Snapshot Tüm verilerin tek seferlik kopyası Kaynak her döngüde satırların %10'unu değiştirir veya kaynak CDF'yi (görünümler, Iceberg tabloları) desteklemez. 10% kaynak veriyi değiştirirken >10 kat daha verimli
Tetiklenen İsteğe bağlı veya aralıklarla çalışan zamanlanmış güncelleştirmeler Kaynak satırlar bilinen bir ritimde değişir. Ekleme, güncelleme ve silme işlemleri her yenilemede aktarılır. İyi maliyet/gecikme dengesi. Eğer < 5 dakikalık aralıklarla çalıştırılırsa pahalı olur.
Devamlı Saniyeler süren gecikme süresiyle gerçek zamanlı akış 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. En az 15 saniyelik aralıklar

Tetiklenen ve Sürekli modlar, kaynak tablonuzda Değişiklik Veri Akışı'nın (CDF) etkinleştirilmesini gerektirir. CDF etkin değilse, kullanıcı arabiriminde tam olarak çalıştırılacak komutu içeren ALTER TABLE bir uyarı görürsünüz. Veri Akışını Değiştirme hakkında daha fazla bilgi için bkz. Databricks'te Delta Lake değişiklik veri akışını kullanma.

Kullanım örnekleri

Aşağıdakiler gibi veri sunma kullanım örnekleri için eşitlenmiş tabloları kullanabilirsiniz:

  • Databricks Uygulamalarına yeni kullanıcı profilleri sunan kişiselleştirme altyapıları
  • Lakehouse'da hesaplanan model tahminlerine veya özellik değerlerine hizmet veren uygulamalar
  • KPI'lere gerçek zamanlı olarak hizmet veren müşteriye yönelik panolar
  • Anında işlem için risk puanlarına hizmet veren sahtekarlık algılama hizmetleri
  • Lakehouse verilerinden zenginleştirilmiş müşteri kayıtları sunan destek araçları

Eşitlenmiş tablo oluşturma

Önkoşullar

Şunlara sahip olmanız gerekir:

  • Lakebase'in etkinleştirildiği bir Databricks çalışma alanı.
  • Bir Lakebase projesi (bkz. Proje oluşturma).
  • Eşitlemek için bir Unity Catalog tablo.
  • Eşitlenmiş tablolar oluşturma izinleri. Kullandığınız herhangi bir şemada USE_SCHEMA ve CREATE_TABLE gerekir.

Tetiklenen veya Sürekli modlar için Kaynak tablonuzda Veri Akışını Değiştir etkinleştirilmelidir:

ALTER TABLE your_catalog.your_schema.your_table
SET TBLPROPERTIES (delta.enableChangeDataFeed = true)

Kapasite planlaması ve veri türü uyumluluğu için bkz. Veri türleri ve uyumluluk ile Kapasite planlaması.

Kullanıcı Arayüzü (UI)

  1. Çalışma alanı kenar çubuğunda Katalog'a gidin ve eşitlemek istediğiniz Unity Kataloğu tablosunu seçin.

    Seçili tabloyu gösteren Katalog Gezgini

  2. Tablo ayrıntıları görünümündeEşitlenmiş Tablo> tıklayın.

    Eşitlenmiş tablo seçeneğini gösteren açılır menü Oluştur düğmesi

  3. Eşitlenmiş tablo oluştur iletişim kutusunda:

    Katalog ve şema listeleri yalnızca geçerli kullanıcının USE_SCHEMA ve CREATE_TABLE ayrıcalıklarına sahip olduğu Unity Kataloğu şemalarını içerir. Beklediğiniz bir şemayı görmüyorsanız katalog yöneticinizle izinlerinizi onaylayın.

    1. Tablo adı: Eşitlenmiş tablonuz için bir ad girin (kaynak tablonuzla aynı katalogda ve şemada oluşturulur). Bu, hem Unity Kataloğu eşitlenmiş tablosu hem de sorgulayabileceğiniz bir Postgres tablosu oluşturur.
    2. Veritabanı türü: Lakebase Sunucusuz (Otomatik Ölçeklendirme) öğesini seçin.
    3. Eşitleme modu: Gereksinimlerinize göre Anlık Görüntü, Tetiklenen veya Sürekli'yi seçin (yukarıdaki eşitleme modlarına bakın).
    4. Proje, dal ve veritabanı seçimlerinizi yapılandırın.
    5. Birincil anahtarın doğru olduğunu doğrulayın (genellikle otomatik olarak algılanır).

    Tetiklenmiş veya Sürekli modu seçtiyseniz ve Veri Akışını Değiştir'i henüz etkinleştirmediyseniz, tam olarak çalıştırılacak komutu içeren bir uyarı görürsünüz. Veri türü uyumluluğu soruları için bkz. Veri türleri ve uyumluluk.

    Eşitlenmiş tabloyu oluşturmak için Oluştur'a tıklayın.

  4. Katalog'da eşitlenmiş tabloyu izleyin. Genel Bakış sekmesinde eşitleme durumu, yapılandırma, işlem hattı durumu ve son eşitleme zaman damgası gösterilir. El ile yenileme için Şimdi eşitle'yi kullanın.

Python SDK'sı

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.postgres import (
    SyncedTable,
    SyncedTableSyncedTableSpec,
    SyncedTableSyncedTableSpecSyncedTableSchedulingPolicy,
)

w = WorkspaceClient()

synced_table = w.postgres.create_synced_table(
    synced_table=SyncedTable(spec=SyncedTableSyncedTableSpec(
        source_table_full_name="main.sales.orders",
        branch="projects/my-project/branches/production",
        primary_key_columns=["order_id"],
        scheduling_policy=SyncedTableSyncedTableSpecSyncedTableSchedulingPolicy.SNAPSHOT,
        postgres_database="mydb",
        create_database_objects_if_missing=True,
    )),
    synced_table_id="my-catalog.sales.orders",
).wait()

print(f"Synced table created: {synced_table.name}")

biçimi synced_table_idcatalog.schema.table kullanır ve Unity Kataloğu eşitlenmiş tablo adı olur. Postgres'te tablo {table}, postgres_database ayarladığınız veritabanı içinde, {schema} şemasında oluşturulur (burada, mydb).

Java SDK'sı

import com.databricks.sdk.WorkspaceClient;
import com.databricks.sdk.service.postgres.*;
import java.util.List;

WorkspaceClient w = new WorkspaceClient();

SyncedTable syncedTable = w.postgres().createSyncedTable(
    new CreateSyncedTableRequest()
        .setSyncedTableId("my-catalog.sales.orders")
        .setSyncedTable(new SyncedTable()
            .setSpec(new SyncedTableSyncedTableSpec()
                .setSourceTableFullName("main.sales.orders")
                .setBranch("projects/my-project/branches/production")
                .setPrimaryKeyColumns(List.of("order_id"))
                .setSchedulingPolicy(SyncedTableSyncedTableSpecSyncedTableSchedulingPolicy.SNAPSHOT)
                .setPostgresDatabase("mydb")
                .setCreateDatabaseObjectsIfMissing(true))))
    .waitForCompletion();

System.out.println("Synced table created: " + syncedTable.getName());

Kıvrım

curl -X POST "https://your-workspace.cloud.databricks.com/api/2.0/postgres/synced_tables?synced_table_id=my-catalog.sales.orders" \
  -H "Authorization: Bearer ${DATABRICKS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "spec": {
      "source_table_full_name": "main.sales.orders",
      "branch": "projects/my-project/branches/production",
      "primary_key_columns": ["order_id"],
      "scheduling_policy": "SNAPSHOT",
      "postgres_database": "mydb",
      "create_database_objects_if_missing": true
    }
  }'

Bu, uzun süren bir işlemi geri döndürür. Döndürülen name alanını done: true kadar yoklayın. Bkz. Uzun süre çalışan işlemler. Kimlik doğrulaması kurulumu için bkz. Kimlik doğrulaması.

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.

  1. Kenar çubuğunda İş Akışları'na tıklayın.
  2. İş oluştur'a tıklayın veya var olan bir işi açın.
  3. Görevler sekmesinde + Başka bir görev türü ekle'ye tıklayın.
  4. Veri Alım ve Dönüştürme altında Veritabanı Tablo Eşitleme işlem hattı'nı seçin.
  5. İşlem hattı alanında, eşitlenmiş tablonuzla ilişkili işlem hattını seçin.
  6. Zamanlamalar ve Tetikleyiciler'in altında Tetikleyici ekle'ye tıklayın.
  7. Tetikleyici türü olarak Tablo güncelleştirmesi'ni seçin.
  8. Tablolar'ın altında, izlenecek kaynak Unity Kataloğu tablosunu seçin.
  9. 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.

  1. Bir işe Veritabanı Tablo Eşitleme işlem hattı görevi eklemek için yukarıdaki 1-5. adımları izleyin.
  2. Zamanlamalar ve Tetikleyiciler'in altında Tetikleyici ekle'ye tıklayın.
  3. Tetikleyici türü olarak Zamanlanmış'ı seçin.
  4. Cron zamanlamanızı ve saat diliminizi ayarlayın, ardından Kaydet'e tıklayın.

Eşitleme durumunu denetleme

Eşitlenen tablonun geçerli durumunu ve son eşitleme zamanını denetlemek için:

Kullanıcı Arayüzü (UI)

Katalog'da eşitlenmiş tablonuza gidin ve Genel Bakış sekmesini seçin. Geçerli eşitleme durumunu, işlem hattı durumunu ve son eşitleme zaman damgasını gösterir.

Python SDK'sı

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()

table = w.postgres.get_synced_table("synced_tables/my-catalog.sales.orders")
print(f"State: {table.status.detailed_state}")
print(f"Last sync: {table.status.last_sync_time}")
print(f"Message: {table.status.message}")

Java SDK'sı

import com.databricks.sdk.WorkspaceClient;
import com.databricks.sdk.service.postgres.SyncedTable;

WorkspaceClient w = new WorkspaceClient();

SyncedTable table = w.postgres().getSyncedTable("synced_tables/my-catalog.sales.orders");
System.out.println("State: " + table.getStatus().getDetailedState());
System.out.println("Last sync: " + table.getStatus().getLastSyncTime());
System.out.println("Message: " + table.getStatus().getMessage());

Kıvrım

curl "https://your-workspace.cloud.databricks.com/api/2.0/postgres/synced_tables/my-catalog.sales.orders" \
  -H "Authorization: Bearer ${DATABRICKS_TOKEN}"

Veri türleri ve uyumluluk

Unity Kataloğu veri türleri, eşitlenmiş tablolar oluşturulurken Postgres türleriyle eşlenir. Karmaşık türler (ARRAY, MAP, STRUCT) Postgres'te JSONB olarak depolanır.

Kaynak sütun türü Postgres sütun türü
BIGINT BIGINT
BINARY BYTEA
BOOLEAN BOOLEAN
DATE DATE
ONDALıK(p,s) SAYISAL
ÇİFT ÇİFT KESİNLIK
FLOAT GERÇEK
INT INTEGER
INTERVAL INTERVAL
SMALLINT (Küçük Tamsayı) SMALLINT (Küçük Tamsayı)
STRING METİN
TIMESTAMP SAAT DILIMI ILE ZAMAN DAMGASı
TIMESTAMP_NTZ SAAT DILIMI OLMADAN ZAMAN DAMGASı
TINYINT SMALLINT (Küçük Tamsayı)
ARRAY<elemanTürü> JSONB
MAP<anahtarTür, değerTür> JSONB
STRUCT<alanAdı:alanTürü[, ...]> JSONB

Uyarı

GEOGRAPHY, GEOMETRY, VARIANT ve OBJECT türleri desteklenmez.

Geçersiz karakterleri işleme

Unity Catalog STRING, ARRAY, MAP veya STRUCT sütunlarında null bayt (0x00) gibi bazı karakterlere izin verilir, ancak Postgres TEXT veya JSONB sütunlarında desteklenmez. Bu, hatalar aşağıdaki gibi olduğunda eşitleme hatalarına neden olabilir:

ERROR: invalid byte sequence for encoding "UTF8": 0x00
ERROR: unsupported Unicode escape sequence DETAIL: \u0000 cannot be converted to text

Çözümler:

  • Dize alanlarını temizleme: Eşitlemeden önce desteklenmeyen karakterleri kaldırın. STRING sütunlarındaki null baytlar için:

    SELECT REPLACE(column_name, CAST(CHAR(0) AS STRING), '') AS cleaned_column FROM your_table
    
  • binary'ye dönüştür: Ham baytları korumanın gerekli olduğu STRING sütunları için BINARY türüne dönüştürün.

Kapasite planlaması

Eşitlenmiş tablo uygulamanızı planlarken şu kaynak gereksinimlerini göz önünde bulundurun:

  • Bağlantı kullanımı: Senkronize edilen her tablo, örnek bağlantı sınırına dahil olacak şekilde Lakebase veritabanınıza en fazla 16 bağlantı kullanır.
  • Boyut sınırları: Tüm eşitlenen tablolarda toplam mantıksal veri boyutu sınırı 8 TB'tır. Tek tek tabloların sınırı yoktur, ancak Databricks yenileme gerektiren tablolar için 1 TB'ı aşmamanızı önerir.
  • Adlandırma gereksinimleri: Veritabanı, şema ve tablo adları yalnızca alfasayısal karakterler ve alt çizgi ([A-Za-z0-9_]+) içerebilir.
  • Şema evrimi: Tetiklenen ve Sürekli modlar için yalnızca eklemeli şema değişiklikleri (sütun ekleme gibi) desteklenir.
  • Güncelleştirme hızı: Lakebase Otomatik Ölçeklendirme için eşitleme işlem hattı, Kapasite Birimi (CU) başına saniyede yaklaşık 150 satırda Sürekli ve Tetiklenen yazı işlemlerini destekler ve CU başına saniyede 2.000 satıra kadar Anlık Görüntü yazma işlemleri gerçekleştirir.

Postgres'te eşitlenmiş tablolarda izin verilen 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, eşitleme işlem hattına müdahale eder.

Eşitlenmiş tabloyu silme

Unity Kataloğu'ndan eşitlenmiş bir tablo silindiğinde ilgili Postgres tablosu da düşer.

Kullanıcı Arayüzü (UI)

Katalog'da eşitlenmiş tablonuzu bulun, Kebap menü simgesine tıklayın. menüsüne tıklayın ve Sil'i seçin.

Python SDK'sı

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()

w.postgres.delete_synced_table("synced_tables/my-catalog.sales.orders").wait()

Java SDK'sı

import com.databricks.sdk.WorkspaceClient;

WorkspaceClient w = new WorkspaceClient();

w.postgres().deleteSyncedTable("synced_tables/my-catalog.sales.orders").waitForCompletion();

Kıvrım

curl -X DELETE "https://your-workspace.cloud.databricks.com/api/2.0/postgres/synced_tables/my-catalog.sales.orders" \
  -H "Authorization: Bearer ${DATABRICKS_TOKEN}"

Daha fazla bilgi edinin

Görev Açıklama
Bir proje oluştur Bir Lakebase projesi ayarlayın
Veritabanınıza bağlanma Lakebase için bağlantı seçeneklerini öğrenin
Unity Kataloğu'nda veritabanını kaydetme Birleşik idare ve kaynaklar arası sorgular için Lakebase verilerinizi Unity Kataloğu'nda görünür hale getirme
Unity Kataloğu tümleştirmesi İdareyi ve izinleri anlama

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.

Diğer seçenekler

Verileri Databricks dışındaki sistemlerle eşitlemek için Census veya Hightouch gibi Partner Connect ters ETL çözümleri'ne bakın.