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.
Important
Bu özellik Genel Önizleme aşamasındadır.
Yerleşik toplu işleme, otomatik yeniden deneme ve çalışma alanı yönetimli kimlik doğrulamasıyla Lakebase'e yazmak için Structured Streaming'i kullanın.
Lakebase havuzu ne zaman kullanılır?
Lakebase'e düşük gecikme süreli akış yazma işlemleri için Lakebase havuzu kullanın. Bu alıcı, toplu işleme, bağlantı yönetimi ve hata işleme için özel foreachBatch işlevleri uygulamanızı gerektirmez.
Yaygın kullanım örnekleri şunlardır:
- İşletimsel panolar veya müşteriye yönelik özellikler için uygulama veritabanlarını gerçek zamanlı olarak güncelleştirin.
- Toplu veya filtrelenmiş akış sonuçları gibi sürekli değişen verileri işlemsel bir veritabanına eşitleyin.
- Gerçek zamanlı modu kullanarak bir Yapılandırılmış Akış sorgusunun çıkışını bir Lakebase tablosuna saniyenin altında gecikme süresiyle yazın.
Lakebase'den Lakehouse içindeki Delta Lake tablolarına veri eşitlemek için, yani ters yönde, bkz. Lakebase Değişiklik Veri Akışı.
Gereksinimler
- Databricks Runtime 18 ve üzeri
- Ayrılmış veya standart erişim modlarıyla klasik işlem.
- Lakebase veritabanı
Veritabanına bağlan
Lakebase havuzu aşağıdaki bağlantı yöntemlerini destekler:
Unity Kataloğu'yla kaydedilen Lakebase tabloları
Unity Kataloğu'na kayıtlı Lakebase tabloları için bağlayıcı kimlik bilgilerini otomatik olarak yönetir ve sorguyu çalıştıran kullanıcı veya hizmet sorumlusunun kimliğini kullanır. Tablo yoksa, bağlayıcı tabloyu oluşturur.
Bir Lakebase veritabanını Unity Kataloğu'na kaydetmek için bkz. Unity Kataloğu'nda Lakebase veritabanını kaydetme.
Lakebase tablosuna yazmak için, tam nitelikli tablo adı olarak .toTable() kullanıp catalog.schema.table yöntemini kullanın. Aşağıdaki örnek, gerekli seçeneklerin yanı sıra isteğe bağlı upsertkey seçeneği gösterir:
Python
(df.writeStream
.outputMode("update")
.option("upsertkey", "<primary-key-column>") # Optional. Inferred from the table's primary key if omitted.
.option("checkpointLocation", "/Volumes/<catalog>/<schema>/<volume>/<checkpoint-name>")
.toTable("<catalog>.<schema>.<table>")
)
Scala
df.writeStream
.outputMode("update")
.option("upsertkey", "<primary-key-column>") // Optional. Inferred from the table's primary key if omitted.
.option("checkpointLocation", "/Volumes/<catalog>/<schema>/<volume>/<checkpoint-name>")
.toTable("<catalog>.<schema>.<table>")
Aşağıdaki yer tutucuları değiştirin:
-
<catalog>.<schema>.<table>: Hedef tablonun tam adı.catalog, Lakebase veritabanını kaydettiğinizde oluşturduğunuz Unity Kataloğu kataloğudur. Bkz. Unity Kataloğu'nda Bir Lakebase veritabanını kaydetme. Tablo yoksa, bağlayıcı bunu oluşturur. -
<primary-key-column>: İsteğe bağlı. Upsert anahtarını oluşturan sütunların virgülle ayrılmış listesi, örneğinidveyauser_id,event_type.upsertkeyöğesini atarsanız, sink anahtarı hedef tablonun birincil anahtarından çıkarır. Bkz. Upsert davranışı. -
/Volumes/<catalog>/<schema>/<volume>/<checkpoint-name>: Sorgunun denetim noktası verilerini depoladığı bir Unity Catalog birim yolu. Bulut nesnesi depolama URI'sini de kullanabilirsiniz. Konum, yerel diskte değil, yazabileceğiniz depolama alanı olmalı ve her akış sorgusu için benzersiz olmalıdır. Bu, hedef tablodan bağımsızdır. Bkz . Yapılandırılmış Akış denetim noktaları.
batchsize ve batchinterval gibi isteğe bağlı yapılandırmalar için, Yapılandırma seçenekleri bölümüne bakın.
Unity Kataloğu'yla kaydedilmeyen Lakebase tabloları
Unity Kataloğu'na kayıtlı olmayan Lakebase tabloları için bağlayıcı kimlik bilgilerini otomatik olarak yönetir ve sorguyu çalıştıran kullanıcı veya hizmet sorumlusunun kimliğini kullanır. Tablo yoksa, bağlayıcı tabloyu oluşturur.
Lakebase tablosuna yazmak için endpoint ve dbtable seçeneklerini kullanın. Aşağıdaki örnek isteğe bağlı database ve upsertkey seçenekleri de içerir:
Python
(df.writeStream
.format("postgresql")
.outputMode("update")
.option("endpoint", "<project-id>.<branch-id>.<endpoint-id>")
.option("database", "<database>") # Optional. Defaults to databricks_postgres.
.option("dbtable", "<schema>.<table>")
.option("upsertkey", "<primary-key-column>") # Optional. Inferred from the table's primary key if omitted.
.option("checkpointLocation", "/Volumes/<catalog>/<schema>/<volume>/<checkpoint-name>")
.start()
)
Scala
df.writeStream
.format("postgresql")
.outputMode("update")
.option("endpoint", "<project-id>.<branch-id>.<endpoint-id>")
.option("database", "<database>") // Optional. Defaults to databricks_postgres.
.option("dbtable", "<schema>.<table>")
.option("upsertkey", "<primary-key-column>") // Optional. Inferred from the table's primary key if omitted.
.option("checkpointLocation", "/Volumes/<catalog>/<schema>/<volume>/<checkpoint-name>")
.start()
Aşağıdaki yer tutucuları değiştirin:
-
<project-id>.<branch-id>.<endpoint-id>: Lakebase uç noktanız. Computes sekmesindeki Kimlik Al menüsünde, biçimi olanprojects/<project-id>/branches/<branch-id>/endpoints/<endpoint-id>içinde üç değerin tümünü bulabilirsiniz. Bkz . İşlem tanımlayıcıları. -
<database>: İsteğe bağlı. Hedef Postgres veritabanının adı. Varsayılan değerdatabricks_postgres’dır. Bkz. Veritabanlarını yönetme. -
<schema>.<table>:schema.tablebiçimindeki hedef tablo. Şemayı atlarsanız havuz şemayıpublickullanır. Harf veya alt çizgiyle başlayan ve yalnızca harf, sayı ve alt çizgi içeren basit tanımlayıcılar kullanın; tırnak içine alınmış tanımlayıcılar ve kısa çizgi gibi özel karakterler desteklenmez. -
<primary-key-column>: İsteğe bağlı. Upsert anahtarını oluşturan sütunların virgülle ayrılmış listesi, örneğinidveyauser_id,event_type.upsertkeyöğesini atarsanız, sink anahtarı hedef tablonun birincil anahtarından çıkarır. Bkz. Upsert davranışı. -
/Volumes/<catalog>/<schema>/<volume>/<checkpoint-name>: Sorgunun denetim noktası verilerini depoladığı bir Unity Catalog birim yolu. Bulut nesnesi depolama URI'sini de kullanabilirsiniz. Konum, yerel diskte değil, yazabileceğiniz depolama alanı olmalı ve her akış sorgusu için benzersiz olmalıdır. Bu, hedef tablodan bağımsızdır. Bkz . Yapılandırılmış Akış denetim noktaları.
batchsize ve batchinterval gibi isteğe bağlı yapılandırmalar için, Yapılandırma seçenekleri bölümüne bakın.
Yapılandırma seçenekleri
Sink, tanınmayan seçeneklerde hata verir, JDBC_STREAMING_SINK_INVALID_OPTIONS.
Aşağıdaki seçenekler tüm bağlantı yöntemleri için geçerlidir:
| Key | Varsayılan | Açıklama |
|---|---|---|
batchinterval |
100 milliseconds |
Optional. Boşaltmadan önce satırların arabellekte tutulabileceği azami süre. Örneğin, "50 milliseconds". |
batchsize |
1000 |
Optional. Her veritabanı işlemi için en fazla satır sayısı. |
checkpointLocation |
Hiçbiri | Required. Unity Catalog birimi (/Volumes/<catalog>/<schema>/<volume>/<checkpoint-name>) gibi bir denetim noktası dizininin yolu. Her sorgu için benzersiz olmalıdır. Bkz . Yapılandırılmış Akış denetim noktaları. |
upsertkey |
Hiçbiri | Optional. Upsert anahtarını oluşturan sütun adlarının virgülle ayrılmış listesi. Örneğin, "id" veya "user_id,event_type". belirtirseniz upsertkey, sütunların tablonun birincil anahtarıyla eşleşmesi gerekir, aksi takdirde sorgu başarısız olur. Bunu belirtmezseniz, sink birincil anahtarı otomatik olarak kullanır. Daha fazla bilgi için bkz . Upsert davranışı. |
Unity Kataloğu'yla kaydedilmeyen Lakebase tabloları
Unity Kataloğu'na kayıtlı olmayan bir Lakebase tablosuna bağlandığınızda aşağıdaki seçenekler geçerlidir:
| Key | Varsayılan | Açıklama |
|---|---|---|
database |
databricks_postgres |
Optional. Hedef PostgreSQL veritabanı adı. |
dbtable |
Hiçbiri | Required. Hedef tablo adı schema.table biçimindedir. Bir şema belirtmezseniz, varsayılan şema değeri olur public. Harf veya alt çizgiyle başlayan ve yalnızca harf, sayı ve alt çizgi içeren basit tanımlayıcılar kullanın. Tablo veya şema adlarını tırnak içine almayın; tırnak içine alınmış tanımlayıcılar ve kısa çizgi gibi özel karakterler içeren adlar desteklenmez. |
endpoint |
Hiçbiri | Required.
project_id.branch_id veya project_id.branch_id.endpoint_id biçimindeki Lakebase uç noktası.
endpoint_id isteğe bağlıdır; belirtmezseniz ve dalda tek bir okuma-yazma uç noktası varsa, alıcı varsayılan olarak bu uç noktayı seçer. |
Upsert davranışı
Upsert anahtarları varsa — bunlar ya upsertkey ile belirtilir ya da hedef tarafından tablonun birincil anahtarlarından çıkarılır — hedef, PostgreSQL'in INSERT INTO ... ON CONFLICT (<upsert_key>) DO UPDATE SET ... söz dizimini kullanarak tabloda upsert işlemi yapar.
Hiçbir upsert anahtarı olmadığında, havuz eklemeler gerçekleştirir. Sorgunun çıkış modunun upsert veya insert davranışı üzerinde hiçbir etkisi yoktur.
upsertkey sütunları şunları yapmalıdır:
- DataFrame sütunlarının boş olmayan bir alt kümesi olun.
- Hedef tablodaki
PRIMARY KEYile tam olarak eşleştir. Belirttiğiniz sütunlar birincil anahtarla eşleşmiyorsa sorgu başarısız olur. - Sayısal veya dize türleri gibi benzer türler olabilir. Eşzamanlı yazma işlemleri sırasında veritabanı kilitlenmelerini önlemek için havuz, satırları her toplu iş içindeki upsert anahtarına göre sıralar. Upsert anahtarları karmaşık veya yapı türlerini desteklemez.
Sütun adları, ayrılmış anahtar kelimeleri ve büyük/küçük harf karışık adları ele alan PostgreSQL varsayılanı olan "çift tırnak ile otomatik olarak alıntılanır.
Tablo ve şema adları, harf veya alt çizgiyle başlayan ve yalnızca harf, sayı ve alt çizgi içeren basit tanımlayıcılar kullanmalıdır. Havuz, tablo veya şema adlarında tırnak içine alınmış tanımlayıcıları veya kısa çizgi gibi özel karakterleri desteklemez.
Performans Ayarlama
Toplu işleme ve geri basınç
Koşullardan herhangi biri karşılandığında temizleme tetiklenir:
- Arabellek, varsayılan değeri
batchsizeolan1000satıra ulaşır. - Arabellek yaşı, varsayılan değeri
batchintervalolan100 millisecondsdeğerini aşıyor.
Veritabanı gelen veri hızına ayak uyduramadığında, alıcı geri basıncı kaynağa doğru üst akışa iletir.
Gecikme süresi ve aktarım hızı kılavuzu:
- Gerçek zamanlı moddaki düşük gecikmeli iş yüklerinde, boşaltma öncesindeki azami sürenin daha kısa olmasını sağlamak için
batchintervaldeğerini azaltın. Kavramlar için Yapılandırılmış Akış'ta Gerçek Zamanlı Mod bölümüne, kod örneği için Gerçek Zamanlı Mod Örnekleri bölümüne bakın. - Yüksek işlem hacimli iş yükleri için, işlem başına ek yükü azaltmak amacıyla
batchsizedeğerini artırın.
Bağlantı davranışı
Sink, executorlarda bağlantı havuzu kullanır. Varsayılan olarak, her görev bir veritabanı bağlantısı kullanır.
Databricks, her bağlantı için varsayılan görev değerini 1 kullanmanızı önerir. Her bağlantı için görev sayısını artırırsanız, bağlantı çakışmalarına neden olabilir ve yüksek aktarım hızı bağlantıları için gecikme sürelerini artırabilirsiniz.
Görevlerin bağlantılara oranını yapılandırmak için Spark yapılandırmasını ayarlayın spark.databricks.sql.streaming.jdbc.tasksPerConnection . Hedef veritabanında düşük bir bağlantı sınırı varsa, shuffle bölüm sayısını azaltın veya spark.databricks.sql.streaming.jdbc.tasksPerConnection değerini artırın.
Sink, bağlantı hataları, kilitlenmeler ve oran sınırlaması dahil geçici JDBC hatalarını otomatik olarak yeniden dener. Havuz tüm yeniden denemeleri tüketirse sorgu başarısız olur.
Desteklenen tetikleyiciler ve çıkış modları
Triggers
Bu tabloda Yapılandırılmış Akış tetikleyici türleri için destek gösterilmektedir:
| Trigger | Supported |
|---|---|
realTime |
Yes |
ProcessingTime |
Yes |
AvailableNow |
Yes |
Once |
Yes |
Çıkış modları
Bu tabloda Yapılandırılmış Akış çıkış modları için destek gösterilmektedir:
| Çıkış modu | Supported |
|---|---|
update |
Yes |
append |
Yes. Davranış, update ile aynıdır. Hedef tabloda birincil anahtar varsa sorgu upsert işlemi yapar, aksi takdirde ekleme yapar. Bkz. Upsert davranışı. |
complete |
Hayır |
Sınırlama
- Sunucusuz işlem ve Lakeflow işlem hatları desteklenmez.
- Yazma hedefi olarak yalnızca Lakebase desteklenir. Dış PostgreSQL uyumlu veritabanları desteklenmez.