BQ kullanarak Databricks'ten Spanner'a ters ETL

1. Google Cloud Storage ve BigQuery'yi kullanarak Databricks'ten Spanner'a ters ETL ardışık düzeni oluşturma

Giriş

Bu codelab'de, Databricks'ten Spanner'a ters ETL ardışık düzeni oluşturacaksınız. Geleneksel olarak standart ETL (Ayıklama, Dönüştürme, Yükleme) ardışık düzenleri, verileri operasyonel veritabanlarından analiz için Databricks gibi bir veri ambarına taşır. Ters ETL işlem hattı ise bunun tam tersini yaparak, veri ambarındaki düzenlenmiş ve işlenmiş verileri alıp Spanner gibi operasyonel veritabanlarına geri taşır. Spanner, yüksek kullanılabilirlik gerektiren uygulamalar için ideal olan, küresel olarak dağıtılmış bir ilişkisel veritabanıdır. Bu veriler, uygulamalara güç sağlamak, kullanıcıya yönelik özellikleri sunmak veya anlık karar verme süreçlerinde kullanılabilir.

Amaç, birleştirilmiş bir veri kümesini Databricks Iceberg tablolarından Spanner tablolarına taşımaktır.

Bunu yapmak için ara adımlar olarak Google Cloud Storage (GCS) ve BigQuery kullanılır. Veri akışı ve bu mimarinin arkasındaki mantıkla ilgili dökümü aşağıda bulabilirsiniz:

b2dae0f06b59656a.png

  1. Iceberg biçiminde Databricks'ten Google Cloud Storage'a (GCS):
  • İlk adım, verileri Databricks'ten açık ve iyi tanımlanmış bir biçimde çıkarmaktır. Tablo, Apache Iceberg biçiminde dışa aktarılır. Bu işlem, temel verileri bir dizi Parquet dosyası olarak, tablonun meta verilerini (şema, bölümler, dosya konumları) ise JSON ve Avro dosyaları olarak yazar. Bu eksiksiz tablo yapısını GCS'de hazırlamak, verileri taşınabilir hale getirir ve Iceberg biçimini anlayan tüm sistemler tarafından erişilebilir kılar.
  1. GCS Iceberg tablolarını BigQuery BigLake harici tablosuna dönüştürme:
  • Veriler doğrudan GCS'den Spanner'a yüklenmek yerine güçlü bir aracı olarak BigQuery kullanılır. BigQuery'de, doğrudan GCS'deki Iceberg meta veri dosyasına işaret eden bir BigLake harici tablosu oluşturulur. Bu yaklaşımın bazı avantajları vardır:
  • Veri Tekrarı Yok: BigQuery, tablo yapısını meta verilerden okur ve Parquet veri dosyalarını yerinde sorgular. Bu sayede, verileri içe aktarmadan önemli ölçüde zaman ve depolama maliyetlerinden tasarruf edebilirsiniz.
  • Birleşik Sorgular: GCS verileri üzerinde, yerel bir BigQuery tablosuymuş gibi karmaşık SQL sorguları çalıştırmanıza olanak tanır.
  1. BigLake harici tablosunu Spanner'a ReverseETL:
  • Son adım, verileri BigQuery'den Spanner'a taşımaktır. Bu, BigQuery'deki EXPORT DATA sorgusu adı verilen güçlü bir özellik kullanılarak gerçekleştirilir. Bu özellik, "ters ETL" adımıdır.
  • Operasyonel Hazırlık: Spanner, işlemsel iş yükleri için tasarlanmıştır ve uygulamalar için güçlü tutarlılık ve yüksek kullanılabilirlik sağlar. Veriler Spanner'a taşındığında, düşük gecikmeli nokta aramaları gerektiren kullanıcıya yönelik uygulamalar, API'ler ve diğer operasyonel sistemler tarafından erişilebilir hale gelir.
  • Ölçeklenebilirlik: Bu kalıp, büyük veri kümelerini işlemek için BigQuery'nin analitik gücünden yararlanmaya ve ardından sonuçları Spanner'ın küresel olarak ölçeklenebilir altyapısı aracılığıyla verimli bir şekilde sunmaya olanak tanır.

Hizmetler ve Terminoloji

  • DataBricks: Apache Spark üzerine kurulu bulut tabanlı veri platformu.
  • Spanner: Google tarafından tümüyle yönetilen, küresel olarak dağıtılmış bir ilişkisel veritabanı.
  • Google Cloud Storage: Google Cloud'un blob depolama teklifi.
  • BigQuery: Google tarafından tamamen yönetilen, analitik için sunucusuz bir veri ambarı.
  • Iceberg: Apache tarafından tanımlanan ve yaygın açık kaynak veri dosyası biçimleri üzerinde soyutlama sağlayan açık bir tablo biçimidir.
  • Parquet: Apache tarafından geliştirilen açık kaynaklı bir sütunlu ikili veri dosyası biçimi.

Neler öğreneceksiniz?

  • Verileri Databricks'e Iceberg tabloları olarak yükleme
  • GCS paketi oluşturma
  • Databricks tablosunu Iceberg biçiminde GCS'ye aktarma
  • GCS'deki Iceberg tablosundan BigQuery'de BigLake harici tablosu oluşturma
  • Spanner örneği oluşturma
  • BigQuery'deki BigLake harici tablolarını Spanner'a yükleme

2. Kurulum, Şartlar ve Sınırlamalar

Ön koşullar

Google Cloud kuruluşunuzda iam.allowedPolicyMemberDomains politikası etkinse bir yöneticinin, harici alanlardaki hizmet hesaplarına izin vermek için istisna vermesi gerekebilir. Bu konu, geçerli olduğu durumlarda sonraki bir adımda ele alınacaktır.

Koşullar

  • Faturalandırmanın etkin olduğu bir Google Cloud projesi.
  • Chrome gibi bir web tarayıcısı
  • Databricks hesabı (bu laboratuvarda GCP'de barındırılan bir çalışma alanı olduğu varsayılır)
  • EXPORT DATA özelliğini kullanmak için BigQuery örneği Enterprise sürümünde veya daha yüksek bir sürümde olmalıdır.
  • Google Cloud kuruluşunuzda iam.allowedPolicyMemberDomains politikası etkinse bir yöneticinin, harici alanlardaki hizmet hesaplarına izin vermek için istisna vermesi gerekebilir. Bu konu, geçerli olduğu durumlarda sonraki bir adımda ele alınacaktır.

Google Cloud Platform IAM İzinleri

Google Hesabı'nın bu codelab'deki tüm adımları yürütmek için aşağıdaki izinlere sahip olması gerekir.

Hizmet Hesapları

iam.serviceAccountKeys.create

Hizmet hesaplarının oluşturulmasına izin verir.

Spanner

spanner.instances.create

Yeni bir Spanner örneği oluşturmaya izin verir.

spanner.databases.create

DDL ifadelerinin çalıştırılmasına izin vererek

spanner.databases.updateDdl

Veritabanında tablo oluşturmak için DDL ifadelerinin çalıştırılmasına izin verir.

Google Cloud Storage

storage.buckets.create

Dışa aktarılan Parquet dosyalarını depolamak için yeni bir GCS paketi oluşturulmasına olanak tanır.

storage.objects.create

Dışa aktarılan Parquet dosyalarının GCS paketine yazılmasına izin verir.

storage.objects.get

BigQuery'nin GCS paketindeki Parquet dosyalarını okumasına izin verir.

storage.objects.list

BigQuery'nin GCS paketindeki Parquet dosyalarını listelemesine olanak tanır.

Dataflow

Dataflow.workitems.lease

Dataflow'daki iş öğelerinin talep edilmesine izin verir.

Dataflow.workitems.sendMessage

Dataflow çalışanının Dataflow hizmetine mesaj göndermesine izin verir.

Logging.logEntries.create

Dataflow çalışanlarının Google Cloud Logging'e günlük girişleri yazmasına izin verir.

Kolaylık sağlamak için bu izinleri içeren önceden tanımlanmış roller kullanılabilir.

roles/resourcemanager.projectIamAdmin

roles/iam.serviceAccountKeyAdmin

roles/spanner.instanceAdmin

roles/spanner.databaseAdmin

roles/storage.admin

roles/dataflow.serviceAgent

roles/dataflow.worker

roles/dataflow.serviceAgent

Google Cloud projesi

Proje, Google Cloud'daki temel düzenleme birimidir. Bir yönetici kullanmak üzere bir tane sağladıysa bu adım atlanabilir.

CLI kullanılarak şu şekilde proje oluşturulabilir:

gcloud projects create <your-project-name>

Proje oluşturma ve yönetme hakkında daha fazla bilgiyi burada bulabilirsiniz.

Sınırlamalar

Bu işlem hattında ortaya çıkabilecek belirli sınırlamalar ve veri türü uyumsuzlukları hakkında bilgi sahibi olmanız önemlidir.

Databricks Iceberg'den BigQuery'ye

Databricks tarafından yönetilen Iceberg tablolarını (UniForm aracılığıyla) sorgulamak için BigQuery'yi kullanırken aşağıdakileri göz önünde bulundurun:

  • Şema Evrimi: UniForm, Delta Lake şema değişikliklerini Iceberg'e çevirme konusunda iyi bir iş çıkarsa da karmaşık değişiklikler her zaman beklendiği gibi yayılmayabilir. Örneğin, Delta Lake'te sütunları yeniden adlandırma, Iceberg'e çevrilmez. Iceberg, bunu drop ve add olarak görür. Şema değişikliklerini her zaman ayrıntılı bir şekilde test edin.
  • Time Travel: BigQuery, Delta Lake'in Time Travel özelliklerini kullanamaz. Yalnızca Iceberg tablosunun en son anlık görüntüsünü sorgular.
  • Desteklenmeyen Delta Lake Özellikleri: Delta Lake'teki id moduyla silme vektörleri ve sütun eşleme gibi özellikler, Iceberg için UniForm ile uyumlu değildir. Bu laboratuvarda, desteklenen sütun eşleme için name modu kullanılır.

BigQuery'den Spanner'a

BigQuery'den Spanner'a aktarım için kullanılan EXPORT DATA komutu, tüm BigQuery veri türlerini desteklemez. Aşağıdaki türleri içeren bir tabloyu dışa aktarmak hataya neden olur:

  • STRUCT
  • GEOGRAPHY
  • DATETIME
  • RANGE
  • TIME

Ayrıca, BigQuery projesi GoogleSQL lehçesini kullanıyorsa Spanner'a aktarma için aşağıdaki sayısal türler de desteklenmez:

  • BIGNUMERIC

Sınırlamaların tam ve güncel listesi için resmi belgelere (Spanner'a Aktarma Sınırlamaları) bakın.

Sorun giderme ve dikkat edilmesi gereken noktalar

  • GCP Databricks örneğinde değilseniz GCS'de Harici Veri Konumu tanımlamak mümkün olmayabilir. Bu gibi durumlarda, dosyaların Databricks çalışma alanının bulut sağlayıcısının depolama çözümünde hazırlanması ve ardından ayrı olarak GCS'ye taşınması gerekir.
  • Bu durumda, bilgiler hazırlanan dosyaların sabit kodlanmış yollarını içereceğinden meta verilerde düzenlemeler yapılması gerekir.

3. Google Cloud Storage'ı (GCS) ayarlama

Databricks tarafından oluşturulan Parquet veri dosyalarını depolamak için Google Cloud Storage (GCS) kullanılır. Bunun için öncelikle dosya hedefi olarak kullanılacak yeni bir paket oluşturulması gerekir.

Google Cloud Storage

Yeni paket oluşturma

  1. Cloud Console'da Google Cloud Storage sayfasına gidin.
  2. Soldaki panelde Gruplar'ı seçin:

27f4bdfaba9bbd6a.png

  1. Oluştur düğmesini tıklayın:

e580967933f20cbf.png

  1. Paket ayrıntılarınızı girin:
  • Kullanılacak bir paket adı seçin. Bu laboratuvarda codelabs_retl_databricks adı kullanılacak.
  • Paketin depolanacağı bir bölge seçin veya varsayılan değerleri kullanın.
  • Depolama sınıfını standard olarak tutun.
  • Erişimi kontrol etme için varsayılan değerleri koruyun.
  • Nesne verilerini koruma için varsayılan değerleri koruma
  1. İşlemi tamamladığınızda Create düğmesini tıklayın. Herkese açık erişimin engelleneceğini onaylamanız için bir istem görünebilir. Devam edip onaylayın.
  2. Tebrikler, yeni paket başarıyla oluşturuldu. Bucket sayfasına yönlendirme yapılır.
  • Daha sonra kullanacağınız için yeni paket adını bir yere kopyalayın.

cfe4c7b70868ecac.png

Sonraki adımlara hazırlanma

Aşağıdaki ayrıntıları not edin. Bunlar sonraki adımlarda gereklidir:

  1. Google proje kimliği
  2. Google Storage paketi adı

4. Databricks'i ayarlama

TPC-H Verileri

Bu laboratuvarda, karar destek sistemleri için endüstri standardı bir karşılaştırma ölçütü olan TPC-H veri kümesi kullanılacaktır. Şeması, müşteriler, siparişler, tedarikçiler ve parçalarla gerçekçi bir iş ortamını modelliyor. Bu nedenle, gerçek dünya analizi ve veri taşıma senaryosunu göstermek için mükemmel bir seçenek.

Ham, normalleştirilmiş TPC-H tablolarını kullanmak yerine yeni bir toplu tablo oluşturulur. Bu yeni tablo, bölgesel satışlarla ilgili normalleştirilmemiş ve özetlenmiş bir görünüm oluşturmak için orders, customer ve nation tablolarındaki verileri birleştirir. Bu ön toplama adımı, verileri belirli bir kullanım alanına (bu senaryoda, operasyonel bir uygulama tarafından tüketilmek üzere) hazırladığından analizde yaygın olarak kullanılan bir yöntemdir.

Birleştirilmiş tablonun nihai şeması şu şekilde olacaktır:

Col

Tür

nation_name

dize

market_segment

dize

order_year

int

order_priority

dize

total_order_count

bigint

total_revenue

decimal(29,2)

unique_customer_count

bigint

Delta Lake Universal Format (UniForm) ile Iceberg desteği

Bu laboratuvarda, Databricks'teki tablo bir Delta Lake tablosu olacaktır. Ancak bu verilerin BigQuery gibi harici sistemler tarafından okunabilmesi için Evrensel Biçim (UniForm) adlı güçlü bir özellik etkinleştirilir.

UniForm, tablonun verilerinin tek ve paylaşılan bir kopyası için Delta Lake meta verilerinin yanı sıra otomatik olarak Iceberg meta verileri oluşturur. Bu, her iki dünyanın da en iyi özelliklerini sunar:

  • Databricks içinde: Delta Lake'in tüm performans ve yönetim avantajlarından yararlanılır.
  • Databricks dışında: Tablo, BigQuery gibi Iceberg ile uyumlu herhangi bir sorgu motoru tarafından yerel bir Iceberg tablosu gibi okunabilir.

Bu sayede, verilerin ayrı kopyalarını tutmanız veya manuel dönüşüm işleri çalıştırmanız gerekmez. UniForm, tablo oluşturulurken belirli tablo özellikleri ayarlanarak etkinleştirilir.

Databricks katalogları

Databricks kataloğu, Databricks'in birleşik yönetim çözümü olan Unity Catalog'daki veriler için üst düzey kapsayıcıdır. Unity Catalog, iyi yönetilen bir veri platformu için çok önemli olan veri varlıklarını yönetmek, erişimi kontrol etmek ve soyu izlemek için merkezi bir yol sağlar.

Verileri düzenlemek için üç düzeyli bir ad alanı kullanılır: catalog.schema.table.

  • Katalog: Verileri ortama, iş birimine veya projeye göre gruplandırmak için kullanılan en üst düzeydir.
  • Şema (veya Veritabanı): Bir katalogdaki tabloların, görünümlerin ve işlevlerin mantıksal olarak gruplandırılması.
  • Tablo: Verilerinizi içeren nesne.

Toplanmış TPC-H tablosu oluşturulmadan önce, bu tabloyu barındırmak için özel bir katalog ve şema oluşturulmalıdır. Bu sayede proje düzenli bir şekilde organize edilir ve çalışma alanındaki diğer verilerden ayrı tutulur.

Yeni katalog ve şema oluşturma

Databricks Unity Catalog'da katalog, veri varlıkları için en yüksek düzeyde düzenleme görevi görür ve birden fazla Databricks çalışma alanını kapsayabilen güvenli bir kapsayıcı görevi görür. Net bir şekilde tanımlanmış izinler ve erişim kontrolleriyle verileri iş birimlerine, projelere veya ortamlara göre düzenlemenize ve izole etmenize olanak tanır.

Kataloglarda şema (veritabanı olarak da bilinir) tabloları, görünümleri ve işlevleri daha da düzenler. Bu hiyerarşik yapı, ayrıntılı kontrol ve ilgili veri nesnelerinin mantıksal olarak gruplandırılmasına olanak tanır. Bu laboratuvarda, TPC-H verilerini barındırmak için özel bir katalog ve şema oluşturulacak. Böylece uygun izolasyon ve yönetim sağlanacak.

Katalog oluşturma
  1. 6761500bb3aaa502.png adresine gidin.
  2. + simgesini tıklayın ve açılır listeden Katalog oluştur'u seçin.

13cfc62741161182.png

  1. Aşağıdaki ayarlarla yeni bir Standart katalog oluşturulur:
  • Katalog adı: retl_tpch_project
  • Depolama konumu: Çalışma alanında ayarlanmış bir konum varsa varsayılanı kullanın veya yeni bir konum oluşturun.

a6e3c89febde9a77.png

Şema oluşturma
  1. 6761500bb3aaa502.png adresine gidin.
  2. Soldaki panelden yeni oluşturulan kataloğu seçin.

89d2935ac4c5d655.png

  1. b7a6fc9785ac3a9d.png simgesini tıklayın.
  2. Şema adı tpch_data olan yeni bir şema oluşturulur.

787631de85a6bb9.png

Harici verileri ayarlama

Databricks'ten Google Cloud Storage'a (GCS) veri aktarabilmek için Databricks'te harici veri kimlik bilgilerinin ayarlanması gerekir. Bu sayede Databricks, GCS paketine güvenli bir şekilde erişip yazabilir.

  1. Katalog ekranında 32d5a94ae444cd8e.png simgesini tıklayın.
  • External Data seçeneğini görmüyorsanız External Locations, Connect açılır listesinde yer alabilir.
  1. e03562324c0ba85e.png simgesini tıklayın.
  2. Yeni iletişim kutusunda kimlik bilgileri için gerekli değerleri ayarlayın:
  • Kimlik Bilgisi Türü: GCP Service Account
  • Kimlik Bilgisi Adı: retl-gcs-credential

7be8456dfa196853.png

  1. Oluştur'u tıklayın
  2. Ardından, Harici Konumlar sekmesini tıklayın.
  3. Konum oluştur'u tıklayın.
  4. Yeni iletişim kutusunda, harici konum için gerekli değerleri ayarlayın:
  • Harici konum adı: retl-gcs-location
  • Depolama alanı türü: GCP
  • URL: GCS paketinin URL'si (gs://YOUR_BUCKET_NAME biçiminde)
  • Depolama kimlik bilgisi: Yeni oluşturulan retl-gcs-credential öğesini seçin.

6d9240128dfcfd80.png

  1. Depolama kimlik bilgisi seçildiğinde otomatik olarak doldurulan hizmet hesabı e-postasını not edin. Bu bilgi bir sonraki adımda gereklidir.
  1. Oluştur'u tıklayın

5. Hizmet Hesabı İzinlerini Ayarlama

Hizmet hesabı, uygulamalar veya hizmetler tarafından Google Cloud kaynaklarına yetkili API çağrıları yapmak için kullanılan özel bir hesap türüdür.

Artık GCS'de yeni paket için oluşturulan hizmet hesabına izinler eklenmesi gerekecek.

  1. GCS paketi sayfasında İzinler sekmesini seçin.

240e591122612db0.png

  1. Ana hesaplar sayfasında Erişim izni ver'i tıklayın.
  2. Sağdan kayarak açılan Erişim Ver panelinde, Hizmet Hesabı Kimliği'ni Yeni ana hesaplar alanına girin.
  3. Rol Ata bölümünde Storage Object Admin ve Storage Legacy Bucket Reader'yi ekleyin. Bu roller, hizmet hesabının depolama paketindeki nesneleri okumasına, yazmasına ve listelemesine olanak tanır.

TPC-H verilerini yükleme

Katalog ve Şema oluşturulduktan sonra TPCH verileri, Databricks'te dahili olarak depolanan ve yeni tanımlanan şemada yeni bir tabloya dönüştürülen mevcut samples.tpch tablosundan yüklenebilir.

Iceberg desteğiyle tablo oluşturma

Iceberg'in UniForm ile Uyumluluğu

Databricks, bu tabloyu arka planda Delta Lake tablosu olarak yönetir. Böylece, Databricks ekosisteminde Delta'nın performans optimizasyonları ve yönetim özelliklerinin tüm avantajlarından yararlanabilirsiniz. Ancak UniForm (Universal Format'ın kısaltması) etkinleştirildiğinde Databricks'e özel bir işlem yapması talimatı verilir: Tablo her güncellendiğinde Databricks, Delta Lake meta verilerine ek olarak karşılık gelen Iceberg meta verilerini otomatik olarak oluşturur ve korur.

Bu, tek bir paylaşılan veri dosyası grubunun (Parquet dosyaları) artık iki farklı meta veri grubuyla tanımlandığı anlamına gelir.

  • Databricks için: Tabloyu okumak için _delta_log kullanılır.
  • Harici Okuyucular (ör. BigQuery) İçin: Tablonun şemasını, bölümlemesini ve dosya konumlarını anlamak için Iceberg meta veri dosyasını (.metadata.json) kullanırlar.

Sonuç, Iceberg'i destekleyen tüm araçlarla tam ve şeffaf bir şekilde uyumlu olan bir tablodur. Veri yinelenmesi olmaz ve manuel dönüştürme veya senkronizasyon gerekmez. Hem Databricks'in analitik dünyası hem de açık Iceberg standardını destekleyen daha geniş araç ekosistemi tarafından sorunsuz bir şekilde erişilebilen tek bir doğru kaynak.

  1. Yeni'yi, ardından Sorgu'yu tıklayın.

d5fad2076e475ebe.png

  1. Sorgu sayfasının metin alanında aşağıdaki SQL komutunu çalıştırın:
CREATE TABLE retl_tpch_project.tpch_data.regional_sales_iceberg
USING DELTA
LOCATION 'gs://<Your bucket name>/regional_sales_iceberg'
TBLPROPERTIES (
  'delta.columnMapping.mode' = 'name',
  'delta.enableIcebergCompatV2' = 'true',
  'delta.universalFormat.enabledFormats' = 'iceberg'
)
AS 

SELECT 
    n.n_name AS nation_name,
    c.c_mktsegment AS market_segment,
    YEAR(o.o_orderdate) AS order_year,
    o.o_orderpriority AS order_priority,
    COUNT(o.o_orderkey) AS total_order_count,
    ROUND(SUM(o.o_totalprice), 2) AS total_revenue,
    COUNT(DISTINCT c.c_custkey) AS unique_customer_count
FROM samples.tpch.orders AS o
INNER JOIN samples.tpch.customer AS c 
    ON o.o_custkey = c.c_custkey
INNER JOIN samples.tpch.nation AS n
    ON c.c_nationkey = n.n_nationkey
GROUP BY 
    n.n_name, 
    c.c_mktsegment, 
    YEAR(o.o_orderdate), 
    o.o_orderpriority;

OPTIMIZE retl_tpch_project.tpch_data.regional_sales_iceberg;

DESCRIBE EXTENDED retl_tpch_project.tpch_data.regional_sales_iceberg;

Notlar:

  • Using Delta: Delta Lake tablosu kullandığımızı belirtir. Yalnızca Databricks'teki Delta Lake tabloları harici tablo olarak saklanabilir.
  • Konum: Tablonun harici olması durumunda nerede depolanacağını belirtir.
  • TablePropertoes: delta.universalFormat.enabledFormats = ‘iceberg', Delta Lake dosyalarının yanında uyumlu Iceberg meta verileri oluşturur.
  • Optimize: Genellikle eşzamansız olarak gerçekleştiği için UniForm meta veri oluşturma işlemini zorunlu olarak tetikler.
  1. Sorgunun çıktısında, yeni oluşturulan tabloyla ilgili ayrıntılar gösterilmelidir.

285c622214824bc.png

GCS tablo verilerini doğrulama

GCS paketine gidildiğinde yeni oluşturulan tablo verileri bulunabilir.

metadata klasöründe, harici okuyucular (ör. BigQuery) tarafından kullanılan Iceberg meta verilerini bulabilirsiniz. Databricks'in dahili olarak kullandığı Delta Lake meta verileri, _delta_log klasöründe izlenir.

Gerçek tablo verileri, başka bir klasörde Parquet dosyaları olarak depolanır. Bu klasör genellikle Databricks tarafından rastgele oluşturulmuş bir dizeyle adlandırılır. Örneğin, aşağıdaki ekran görüntüsünde veri dosyaları 9M klasöründe yer almaktadır.

e9c1dfecb7b6af05.png

6. BigQuery ve BigLake'i kurma

Iceberg tablosu Google Cloud Storage'a taşındığına göre, bir sonraki adım bu tabloyu BigQuery'ye erişilebilir hale getirmektir. Bu işlem, BigLake harici tablosu oluşturularak yapılır.

BigLake, Google Cloud Storage gibi harici kaynaklardan doğrudan veri okuyan BigQuery'de tablolar oluşturulmasına olanak tanıyan bir depolama motorudur. Bu laboratuvarda, verilerin alınmasına gerek kalmadan BigQuery'nin yeni dışa aktarılan Iceberg tablosunu anlamasını sağlayan temel teknolojidir.

Bu özelliğin çalışması için iki bileşen gerekir:

  1. Cloud Resource Connection: Bu, BigQuery ile GCS arasında güvenli bir bağlantıdır. Kimlik doğrulama için özel bir hizmet hesabı kullanılır. Bu sayede, BigQuery'nin GCS paketindeki dosyaları okumak için gerekli izinlere sahip olması sağlanır.
  2. Harici Tablo Tanımı: Bu, BigQuery'ye Iceberg tablosunun meta veri dosyasının GCS'de nerede bulunacağını ve nasıl yorumlanacağını söyler.

Bulut Kaynağı Bağlantısı oluşturma

İlk olarak, BigQuery'nin GCS'ye erişmesine izin veren bağlantı oluşturulur.

Bulut kaynağı bağlantıları oluşturma hakkında daha fazla bilgiyi burada bulabilirsiniz.

  1. BigQuery'ye gidin.
  2. Gezgin bölümünde Bağlantılar'ı tıklayın.
  • Explorer düzlemi görünmüyorsa e09eaea936f28d62.png simgesini tıklayın.

3b64ad1e030299e5.png

  1. Bağlantılar sayfasında 6b81c7550b537890.png simgesini tıklayın.
  2. Bağlantı türü için Vertex AI remote models, remote functions, BigLake and Spanner (Cloud Resource) seçeneğini belirleyin.
  3. Bağlantı kimliğini databricks_retl olarak ayarlayın ve bağlantıyı oluşturun.

a0c9030883e6fb2.png

7aa50f0ee61d7b67.png

  1. Yeni oluşturulan bağlantının Bağlantılar tablosunda artık bir giriş görünmelidir. Bağlantı ayrıntılarını görmek için bu girişi tıklayın.

3cf84a65e626ccfe.png

  1. Bağlantı ayrıntıları sayfasında, daha sonra gerekli olacağı için Hizmet hesabı kimliğini not edin.

7f52106c43700b78.png

Bağlantı hizmeti hesabına erişim izni verme

  1. IAM ve Yönetici'ye gidin.
  2. Erişim izni ver'i tıklayın.

d8fc7690bba820c7.png

  1. Yeni ana hesaplar alanına, yukarıda oluşturulan bağlantı kaynağının hizmet hesabı kimliğini girin.
  2. Rol için Storage Object User seçeneğini belirleyin ve 9e23819e5bc1babb.png simgesini tıklayın.

Bağlantı oluşturulduktan ve hizmet hesabına gerekli izinler verildikten sonra BigLake harici tablosu oluşturulabilir. Öncelikle, yeni tablo için kapsayıcı görevi görecek bir veri kümesi oluşturmanız gerekir. Ardından, GCS paketindeki Iceberg meta veri dosyasına yönlendiren tablo oluşturulur.

  1. BigQuery'ye gidin.
  2. Gezgin panelinde proje kimliğini tıklayın, ardından üç noktayı tıklayıp Veri kümesi oluştur'u seçin.

9ef91b1c8433b641.png

  1. Veri kümesi databricks_retl olarak adlandırılır. Diğer seçenekleri varsayılan olarak bırakıp Veri kümesi oluştur düğmesini tıklayın.

9f413d6f65520b2f.png

  1. Şimdi Gezgin panelinde yeni databricks_retl veri kümesini bulun. Yanındaki üç noktayı tıklayın ve Tablo oluştur'u seçin.

858cb483ebd3ce2a.png

  1. Tablo oluşturma için aşağıdaki ayarları girin:
  • Şu kaynaktan tablo oluşturun: Google Cloud Storage
  • GCS paketinden dosya seçin veya URI kalıbı kullanın: GCS paketine göz atın ve Databricks dışa aktarma işlemi sırasında oluşturulan meta veri JSON dosyasını bulun. Yol şu şekilde görünmelidir: regional_sales/metadata/v1.metadata.json.
  • Dosya biçimi: Iceberg
  • Tablo: regional_sales
  • Tablo türü: External table
  • Bağlantı kimliği: Daha önce oluşturulan databricks_retl bağlantısını seçin.
  • Diğer değerleri varsayılan olarak bırakıp Tablo oluştur'u tıklayın.
  1. Oluşturulan yeni regional_sales tablosu, databricks_retl veri kümesi altında görünür. Bu tablo artık diğer tüm BigQuery tablolarında olduğu gibi standart SQL kullanılarak sorgulanabilir.

133be43ad67a5a21.png

7. Spanner'a yükleme

Ardışık düzenin son ve en önemli kısmı olan verilerin BigLake harici tablolarından Spanner'a taşınması tamamlandı. Bu, "ters ETL" adımıdır. Bu adımda, veri ambarında işlenip düzenlenmiş olan veriler, uygulamalar tarafından kullanılmak üzere bir operasyonel sisteme yüklenir.

Spanner, tümüyle yönetilen, küresel olarak dağıtılmış bir ilişkisel veritabanıdır. Geleneksel bir ilişkisel veritabanının işlemsel tutarlılığını sunar ancak NoSQL veritabanının yatay ölçeklenebilirliğine sahiptir. Bu nedenle, ölçeklenebilir ve yüksek düzeyde kullanılabilir uygulamalar oluşturmak için ideal bir seçimdir.

Süreç şu şekilde işler:

  1. Kaynakların fiziksel olarak tahsis edildiği bir Spanner örneği oluşturun.
  2. Bu örnekte bir veritabanı oluşturun.
  3. Veritabanında regional_sales verilerinin yapısıyla eşleşen bir tablo şeması tanımlayın.
  4. BigLake tablosundaki verileri doğrudan Spanner tablosuna yüklemek için bir BigQuery EXPORT DATA sorgusu çalıştırın.

Spanner örneği, veritabanı ve tablo oluşturma

  1. Spanner'a gidin.
  2. 6a261f186de0bf4a.png simgesini tıklayın . Mevcut bir örnek varsa onu kullanabilirsiniz. Örnek gereksinimlerini gerektiği şekilde ayarlayın. Bu laboratuvarda şunlar kullanıldı:

Sürüm

Kurumsal

Örnek Adı

databricks-retl

Bölge Yapılandırması

Seçtiğiniz bölge

İşlem Birimi

İşleme birimleri (PU'lar)

Manuel ayırma

100

  1. Oluşturulduktan sonra Spanner örneği sayfasına gidip 99e50c2015c697f4.png simgesini seçin. Mevcut bir veritabanı varsa onu kullanabilirsiniz.
  • Bu laboratuvarda,
  • Ad:databricks-retl
  • Veritabanı Lehçesi: Google Standard SQL
  1. Veritabanı oluşturulduktan sonra Spanner örneği sayfasından seçin ve Spanner veritabanı sayfasına girin.
  2. Spanner veritabanı sayfasında 1df26c863b1327d5.png simgesini tıklayın.
  3. Yeni sorgu sayfasında, Spanner'a aktarılacak tablonun tablo tanımı oluşturulur. Bunun için aşağıdaki SQL sorgusunu çalıştırın.
CREATE TABLE regional_sales (
    nation_name STRING(MAX),
    market_segment STRING(MAX),
    order_year INT64,
    order_priority STRING(MAX),
    total_order_count INT64,
    total_revenue NUMERIC,
    unique_customer_count INT64
) PRIMARY KEY (nation_name, market_segment, order_year, order_priority);
  1. SQL komutu yürütüldükten sonra Spanner tablosu, BigQuery'nin verileri ters ETL'ye aktarması için hazır olur. Tablonun oluşturulduğu, Spanner veritabanındaki sol panelde listelenmiş olarak görülebilir.

baf4caec5c236f4f.png

EXPORT DATA kullanarak Spanner'a ters ETL

Bu son adımdır. Kaynak veriler BigQuery BigLake tablosunda hazır olduğunda ve hedef tablo Spanner'da oluşturulduğunda gerçek veri taşıma işlemi şaşırtıcı derecede basittir. Tek bir BigQuery SQL sorgusu kullanılır: EXPORT DATA.

Bu sorgu, özellikle bu gibi senaryolar için tasarlanmıştır. BigQuery tablosundaki (BigLake tablosu gibi harici olanlar dahil) verileri harici bir hedefe verimli bir şekilde aktarır. Bu durumda hedef, Spanner tablosudur. Dışa aktarma özelliği hakkında daha fazla bilgiyi burada bulabilirsiniz.

BigQuery'yi Spanner Reverse ETL'ye göre ayarlama hakkında daha fazla bilgiyi burada bulabilirsiniz.

  1. BigQuery'ye gidin.
  2. Yeni bir sorgu düzenleyici sekmesi açın.
  3. Sorgu sayfasında aşağıdaki SQL'i girin. **uri** **içindeki proje kimliğini ve tablo yolunu doğru proje kimliğiyle değiştirmeyi unutmayın.**
EXPORT DATA OPTIONS(

uri='https://spanner.googleapis.com/projects/YOUR_PROJECT_ID/instances/databricks-retl/databases/databricks-retl',
  format='CLOUD_SPANNER',
   spanner_options="""{
      "table": "regional_sales",
      "priority": "MEDIUM"
  }"""
) AS

SELECT * FROM `YOUR_PROJECT_ID.databricks_retl.regional_sales`;
  1. Komut tamamlandığında veriler Spanner'a başarıyla aktarılmış olur.

8. Spanner'daki verileri doğrulama

Tebrikler! Bir Databricks veri ambarından operasyonel bir Spanner veritabanına veri taşıyan eksiksiz bir ters ETL ardışık düzeni başarıyla oluşturulup yürütüldü.

Son adım, verilerin Spanner'a beklendiği gibi ulaştığını doğrulamaktır.

  1. Spanner'a gidin.
  2. databricks-retl örneğinize ve ardından databricks-retl veritabanına gidin.
  3. Tablo listesinde regional_sales tablosunu tıklayın.
  4. Tablonun sol gezinme menüsünde Veriler sekmesini tıklayın.

710e41c80bdc31c4.png

  1. Başlangıçta Databricks'ten alınan birleştirilmiş satış verileri artık yüklenmiş ve Spanner tablosunda kullanılmaya hazır olmalıdır. Bu veriler artık operasyonel bir sistemde olup canlı bir uygulamaya güç vermeye, bir kontrol paneline hizmet etmeye veya bir API tarafından sorgulanmaya hazırdır.

f1201d6605b2a527.png

Analitik ve operasyonel veri dünyaları arasındaki boşluk başarıyla kapatıldı.

9. Temizleme

Bu laboratuvarı tamamladığınızda eklenen tüm tabloları ve depolanan verileri kaldırın.

Spanner tablolarını temizleme

  1. Spanner'a gidin.
  2. databricks-retl adlı listede bu laboratuvar için kullanılan örneği tıklayın.

aa32380b601fdb87.png

  1. Örnek sayfasında 5fc4696b82a79013.png simgesini tıklayın.
  2. Açılan onay iletişim kutusuna databricks-retl girin ve ef9e3709dcad2683.png simgesini tıklayın.

GCS'de yer açma

  1. GCS'ye gidin.
  2. Sol taraftaki menüden b0aeb28c98f21942.png simgesini seçin.
  3. ``codelabs_retl_databricks paketini seçin.

e4f33fbebb892229.png

  1. Seçtikten sonra üst banner'da görünen 1f0075ce292003ff.png düğmesini tıklayın.

384fe0801a23bfe5.png

  1. Açılan onay iletişim kutusuna DELETE girin ve ef9e3709dcad2683.png simgesini tıklayın.

Databricks'i temizleme

Katalog/Şema/Tablo Silme

  1. Databricks örneğinizde oturum açma
  2. Sol taraftaki menüden 20bae9c2c9097306.png simgesini tıklayın.
  3. Katalog listesinden daha önce oluşturulan fc566eb3fddd7477.png öğesini seçin.
  4. Şema listesinde, oluşturulan deb927c01e9e76d0.png öğesini seçin.
  5. Tablo listesinden daha önce oluşturulan 332d33ee48a5897c.png öğesini seçin.
  6. df6dbe6356f141c6.png simgesini tıklayarak tablo seçeneklerini genişletin ve Delete simgesini seçin.
  7. Tabloyu silmek için onay iletişim kutusunda 3951711057fe3048.png simgesini tıklayın.
  8. Tablo silindikten sonra şema sayfasına geri yönlendirilirsiniz.
  9. df6dbe6356f141c6.png simgesini tıklayarak şema seçeneklerini genişletin ve Delete simgesini seçin.
  10. Şemayı silmek için onay iletişim kutusunda 3951711057fe3048.png simgesini tıklayın.
  11. Şema silindikten sonra katalog sayfasına geri yönlendirilirsiniz.
  12. Varsa default şemasını silmek için 4-11. adımları tekrar uygulayın.
  13. Katalog sayfasında, df6dbe6356f141c6.png simgesini tıklayarak katalog seçeneklerini genişletin ve Delete simgesini seçin.
  14. Kataloğu silmek için onay iletişim kutusunda 3951711057fe3048.png simgesini tıklayın.

Harici Veri Konumunu / Kimlik Bilgilerini Silme

  1. Katalog ekranında 32d5a94ae444cd8e.png simgesini tıklayın.
  2. External Data seçeneğini görmüyorsanız External Location, Connect açılır listesinde yer alabilir.
  3. Daha önce oluşturulan retl-gcs-location harici veri konumunu tıklayın.
  4. Harici konum sayfasında, df6dbe6356f141c6.png simgesini tıklayarak konum seçeneklerini genişletin ve Delete simgesini seçin.
  5. Harici konumu silmek için onay iletişim kutusunda 3951711057fe3048.png simgesini tıklayın.
  6. e03562324c0ba85e.png simgesini tıklayın.
  7. Daha önce oluşturulan retl-gcs-credential simgesini tıklayın.
  8. Kimlik bilgisi sayfasında, df6dbe6356f141c6.png simgesini tıklayarak kimlik bilgisi seçeneklerini genişletin ve Delete simgesini seçin.
  9. Kimlik bilgilerini silmek için onay iletişim kutusunda 3951711057fe3048.png simgesini tıklayın.

10. Tebrikler

Codelab'i tamamladığınız için tebrik ederiz.

İşlediğimiz konular

  • Verileri Databricks'e Iceberg tabloları olarak yükleme
  • GCS paketi oluşturma
  • Databricks tablosunu Iceberg biçiminde GCS'ye aktarma
  • GCS'deki Iceberg tablosundan BigQuery'de BigLake harici tablosu oluşturma
  • Spanner örneği oluşturma
  • BigQuery'deki BigLake harici tablolarını Spanner'a yükleme