1. GCS ve Dataflow'u kullanarak Databricks'ten Spanner'a ters ETL ardışık düzeni oluşturma
Giriş
Bu codelab'de, Google Cloud Storage'da depolanan CSV dosyalarını kullanarak Databricks'ten Spanner'a ters ETL ardışık düzeni oluşturacaksınız. Geleneksel olarak 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 yapar: Seçilmiş, işlenmiş verileri veri ambarı içinden operasyonel sistemlere geri taşır. Bu sistemlerde uygulamalara güç verebilir, kullanıcıya yönelik özellikler sunabilir veya anlık karar verme için kullanılabilir.
Amaç, bir örnek veri kümesini Databricks tablosundan Spanner'a taşımaktır. Spanner, yüksek kullanılabilirlik gerektiren uygulamalar için ideal olan, küresel olarak dağıtılmış bir ilişkisel veritabanıdır.
Bunu yapmak için ara adımlar olarak Google Cloud Storage (GCS) ve Dataflow kullanılır. Veri akışı ve bu mimarinin arkasındaki mantıkla ilgili dökümü aşağıda bulabilirsiniz:
- CSV biçiminde Databricks'ten Google Cloud Storage'a (GCS):
- İlk adım, verileri Databricks'ten açık ve evrensel bir biçimde çıkarmaktır. CSV'ye aktarma, taşınabilir veri dosyaları oluşturmak için yaygın ve basit bir yöntemdir. Bu dosyalar, ölçeklenebilir ve dayanıklı bir nesne depolama çözümü sunan GCS'de hazırlanır.
- GCS'den Spanner'a (Dataflow aracılığıyla):
- GCS'den okuma ve Spanner'a yazma işlemleri için özel bir komut dosyası yazmak yerine, tam olarak yönetilen bir veri işleme hizmeti olan Google Dataflow kullanılır. Dataflow, bu tür görevler için özel olarak tasarlanmış önceden oluşturulmuş şablonlar sunar. "GCS Text to Cloud Spanner" şablonunu kullanmak, herhangi bir veri işleme kodu yazmadan yüksek işleme hızlı, paralelleştirilmiş veri içe aktarma işlemine olanak tanır ve önemli ölçüde geliştirme süresi kazandırır.
Neler öğreneceksiniz?
- Databricks'e veri yükleme
- GCS paketi oluşturma
- Databricks tablosunu CSV biçiminde GCS'ye aktarma
- Spanner örneği oluşturma
- Dataflow ile CSV tablolarını Spanner'a yükleme
2. Kurulum, Şartlar ve Sınırlamalar
Ön koşullar
- Küme oluşturma ve kitaplık yükleme izinlerine sahip bir Databricks hesabı. Bu laboratuvar için ücretsiz deneme hesabı yeterli değildir.
- Spanner, Cloud Storage ve Dataflow API'lerinin etkinleştirildiği bir Google Cloud hesabı.
- Web tarayıcısı üzerinden Google Cloud Console'a erişim.
- Google Cloud KSA'nın yüklü olduğu bir terminal.
- Google Cloud kuruluşunuzda
iam.allowedPolicyMemberDomainspolitikası 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ı | ||
| Hizmet hesaplarının oluşturulmasına izin verir. | |
Spanner | ||
| Yeni bir Spanner örneği oluşturmaya izin verir. | |
| DDL ifadelerinin çalıştırılmasına izin vererek | |
| Veritabanında tablo oluşturmak için DDL ifadelerinin çalıştırılmasına izin verir. | |
Google Cloud Storage | ||
| Dışa aktarılan Parquet dosyalarını depolamak için yeni bir GCS paketi oluşturulmasına olanak tanır. | |
| Dışa aktarılan Parquet dosyalarının GCS paketine yazılmasına izin verir. | |
| BigQuery'nin GCS paketindeki Parquet dosyalarını okumasına izin verir. | |
| BigQuery'nin GCS paketindeki Parquet dosyalarını listelemesine olanak tanır. | |
Dataflow | ||
| Dataflow'daki iş öğelerinin talep edilmesine izin verir. | |
| Dataflow çalışanının Dataflow hizmetine mesaj göndermesine izin verir. | |
| 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.
|
|
|
|
|
|
|
|
Sınırlamalar
Verileri sistemler arasında taşırken veri türü farklılıklarının farkında olmak önemlidir.
- Databricks'ten CSV'ye: Dışa aktarma sırasında Databricks veri türleri standart metin gösterimlerine dönüştürülür.
- CSV'den Spanner'a: İçe aktarma sırasında hedef Spanner veri türlerinin, CSV dosyasındaki dize gösterimleriyle uyumlu olduğundan emin olmak gerekir. Bu laboratuvar, yaygın bir tür eşleme grubu konusunda size yol gösterir.
Yeniden kullanılabilir özellikler ayarlama
Bu laboratuvar boyunca birkaç değerin tekrar tekrar kullanılması gerekecek. Bu işlemi kolaylaştırmak için bu değerleri daha sonra kullanılacak kabuk değişkenlerine ayarlayacağız.
- GCP_REGION: GCP kaynaklarının bulunacağı belirli bölge. Bölgelerin listesini burada bulabilirsiniz.
- GCP_PROJECT: Kullanılacak GCP projesinin kimliği.
- GCP_BUCKET_NAME: Oluşturulacak ve veri dosyalarının depolanacağı GCS paketi adı.
export GCP_REGION = <GCP REGION HERE>
export GCP_PROJECT= <GCP PROJECT HERE>
export GCS_BUCKET_NAME = <GCS BUCKET NAME HERE>
export SPANNER_INSTANCE = <SPANNER INSTANCE ID HERE>
export SPANNER_DB = <SPANNER DATABASE ID HERE>
Databricks
Bu laboratuvarda, GCS'de harici bir veri konumu tanımlamaya olanak tanıyan, GCP'de barındırılan bir Databricks hesabı kullanılmaktadır.
Google Cloud
Bu laboratuvar için bir Google Cloud projesi gerekir.
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 $GCP_PROJECT
gcloud config set project $GCP_PROJECT
Proje oluşturma ve yönetme hakkında daha fazla bilgiyi burada bulabilirsiniz.
Spanner'ı ayarlama
Spanner'ı kullanmaya başlamak için bir örnek ve bir veritabanı sağlamanız gerekir. Spanner örneği yapılandırma ve oluşturma hakkında ayrıntılı bilgiyi burada bulabilirsiniz.
Örneği oluşturma
gcloud spanner instances create $SPANNER_INSTANCE \
--config=regional-$GCP_REGION \
--description="Codelabs Snowflake RETL" \
--processing-units=100 \
--edition=ENTERPRISE
Veritabanını oluşturma
gcloud spanner databases create $SPANNER_DB \
--instance=$SPANNER_INSTANCE
3. Google Cloud Storage paketi oluşturma
Snowflake tarafından oluşturulan CSV veri dosyaları, Spanner'a aktarılmadan önce geçici olarak depolanmak üzere Google Cloud Storage'da (GCS) saklanır.
Paketi oluşturma
Belirli bir bölgede depolama paketi oluşturmak için aşağıdaki komutu kullanın.
gcloud storage buckets create gs://$GCS_BUCKET_NAME --location=$GCP_REGION
Paket oluşturmayı doğrulama
Bu komut başarılı olduğunda tüm paketleri listeleyerek sonucu kontrol edin. Yeni paket, sonuç listesinde görünür. Bucket referansları genellikle bucket adının önünde gs:// ön ekiyle gösterilir.
gcloud storage ls | grep gs://$GCS_BUCKET_NAME
Yazma izinlerini test etme
Bu adım, yerel ortamın doğru şekilde kimlik doğrulandığından ve yeni oluşturulan pakete dosya yazmak için gerekli izinlere sahip olduğundan emin olmanızı sağlar.
echo "Hello, GCS" | gcloud storage cp - gs://$GCS_BUCKET_NAME/hello.txt
Yüklenen dosyayı doğrulama
Paketteki nesneleri listeleyin. Yeni yüklenen dosyanın tam yolu görünmelidir.
gcloud storage ls gs://$GCS_BUCKET_NAME
Aşağıdaki çıkışı göreceksiniz:
gs://$GCS_BUCKET_NAME/hello.txt
Bir paketteki nesnenin içeriğini görüntülemek için gcloud storage cat kullanılabilir.
gcloud storage cat gs://$GCS_BUCKET_NAME/hello.txt
Dosyanın içeriği görünür olmalıdır:
Hello, GCS
Test dosyasını temizleme
Cloud Storage paketi kuruldu. Geçici test dosyası artık silinebilir.
gcloud storage rm gs://$GCS_BUCKET_NAME/hello.txt
Çıkış, silme işlemini onaylamalıdır:
Removing gs://$GCS_BUCKET_NAME/hello.txt... / [1 objects] Operation completed over 1 objects.
4. Databricks'ten GCS'ye dışa aktarma
Artık Databricks ortamı, GCS'ye güvenli bir şekilde bağlanacak ve verileri dışa aktaracak şekilde yapılandırılacak.
Kimlik bilgisi oluşturma
- Sol taraftaki menüden Katalog'u tıklayın.
- Katalog sayfasının üst kısmında Harici Veriler seçeneği varsa bu seçeneği tıklayın. Aksi takdirde, Bağlan açılır listesini ve ardından Kimlik bilgileri'ni tıklayın.
- Henüz bu sekmede değilseniz Kimlik Bilgileri sekmesine geçin.
- Kimlik bilgisi oluştur'u tıklayın.
- Kimlik Bilgisi Türü için
GCP Service Account'yı seçin. - Yeterlilik Belgesi Adı için
codelabs-retl-credentialsgirin. - Oluştur'u tıklayın
- İletişim kutusundan hizmet hesabı e-postasını kopyalayın ve Bitti'yi tıklayın.
Bu hizmet hesabını, kabuk örneğinizde yeniden kullanmak üzere bir ortam değişkenine ayarlayın:
export GCP_SERVICE_ACCOUNT=<Your service account>
Databricks'e GCS izinleri verme
Şimdi Snowflake hizmet hesabına GCS paketine yazma izni verilmelidir.
gcloud storage buckets add-iam-policy-binding gs://$GCS_BUCKET_NAME \
--member="serviceAccount:$GCP_SERVICE_ACCOUNT" \
--role="roles/storage.objectAdmin"
gcloud storage buckets add-iam-policy-binding gs://$GCS_BUCKET_NAME \
--member="serviceAccount:$GCP_SERVICE_ACCOUNT" \
--role="roles/storage.legacyBucketReader"
Harici konum oluşturma
- Sayfanın üst kısmındaki gezinme yolunu kullanarak Kimlik Bilgileri sayfasına geri dönün.
- Harici Konum sekmesine geçin.
- Harici konum oluştur'u tıklayın.
- Harici Konum Adı'nı
codelabs-retl-gcsolarak ayarlayın. - Depolama Türü'nü
GCPolarak tutun. - Paket yolunuzu URL olarak ayarlayın.
- Depolama Kimliği'ni
codelabs-retl-credentialsolarak ayarlayın. - Oluştur'u tıklayın
- Onayda. Oluştur'u tıklayın
Katalog ve Şema Oluşturma
- Sol taraftaki menüden Katalog'u tıklayın.
- Oluştur'u ve ardından Katalog oluştur'u tıklayın.
- Katalog Adı'nı
retl_tpch_projectolarak ayarlayın. - Tür'ü
Standardolarak ayarlayın. - Harici konum olarak
codelabs-retl-gcsseçeneğini belirleyin. - Oluştur'u tıklayın
- Katalog listesinde
retl_tpch_projectsimgesini tıklayın. - Şema oluştur'u tıklayın.
- Şema adı'nı
tpch_dataolarak ayarlayın. - Depolama konumu'nu
codelabs-retl-gcsolarak seçin. - Oluştur'u tıklayın
Verileri CSV olarak dışa aktarma
Veriler artık dışa aktarılmaya hazır. Örnek TPC-H veri kümesi, CSV olarak harici olarak depolanacak yeni tablomuzu tanımlamak için kullanılacak.
Öncelikle örnek verileri çalışma alanındaki yeni bir tabloya kopyalayın. Bunun için SQL kodunun bir sorgudan çalıştırılması gerekir.
- Sol taraftaki menüde SQL bölümünün altında Sorgular'ı tıklayın.
- Sorgu oluştur düğmesini tıklayın.
- Çalıştır düğmesinin yanındaki Çalışma alanı'nı
retl_tpch_projectolarak ayarlayın.
CREATE TABLE retl_tpch_project.tpch_data.regional_sales_csv
USING CSV
LOCATION 'gs://<Your bucket name>/regional_sales_csv'
OPTIONS (
header "false",
delimiter ","
)
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 1, 2, 3, 4;
GCS'deki verileri doğrulama
Databricks'in oluşturduğu dosyaları görmek için GCS paketini kontrol edin.
gcloud storage ls gs://$GCS_BUCKET_NAME/regional_sales_csv/
_SUCCESS ve günlük dosyalarıyla birlikte bir veya daha fazla .csv dosyası görünür olmalıdır.
5. Dataflow ile Spanner'a veri yükleme
GCS'deki CSV verilerini Spanner'a aktarmak için Google tarafından sağlanan bir Dataflow şablonu kullanılır.
Spanner tablosunu oluşturma
Öncelikle Spanner'da hedef tabloyu oluşturun. Şema, CSV dosyalarındaki verilerle uyumlu olmalıdır.
gcloud spanner databases ddl update $SPANNER_DB \
--instance=$SPANNER_INSTANCE \
--ddl="$(cat <<EOF
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);
EOF
)"
Dataflow manifest dosyasını oluşturma
Dataflow şablonu için "manifest" dosyası gerekir. Bu, şablona kaynak veri dosyalarının nerede bulunacağını ve hangi Spanner tablosuna yükleneceğini bildiren bir JSON dosyasıdır.
Yeni bir regional_sales_manifest.json dosyası tanımlayıp GCS paketine yükleyin:
cat <<EOF | gcloud storage cp - gs://$GCS_BUCKET_NAME/regional_sales_manifest.json
{
"tables": [
{
"table_name": "regional_sales",
"file_patterns": [
"gs://$GCS_BUCKET_NAME/regional_sales_csv/*.csv"
]
}
]
}
EOF
Dataflow API'yi etkinleştir
Dataflow'u kullanmadan önce etkinleştirmeniz gerekir. Bunu
gcloud services enable dataflow.googleapis.com --project=$GCP_PROJECT
Dataflow işini oluşturma ve çalıştırma
İçe aktarma işi artık çalıştırılmaya hazır. Bu komut, GCS_Text_to_Cloud_Spanner şablonunu kullanarak bir Dataflow işi başlatır.
Komut uzun ve birkaç parametre içeriyor. Ayrıntılı bilgi:
--gcs-location: GCS'deki önceden oluşturulmuş şablonun yolu.--region: Dataflow işinin çalışacağı bölge.--parameters: Şablona özgü anahtar/değer çiftlerinin listesi:instanceId,databaseId: Hedef Spanner örneği ve veritabanı.importManifest: Yeni oluşturulan manifest dosyasının GCS yolu.
gcloud dataflow jobs run spanner-import-from-gcs \
--gcs-location=gs://dataflow-templates/latest/GCS_Text_to_Cloud_Spanner \
--region=$GCP_REGION \
--staging-location=gs://$GCS_BUCKET_NAME/staging \
--parameters \
instanceId=$SPANNER_INSTANCE,\
databaseId=$SPANNER_DB,\
importManifest=gs://$GCS_BUCKET_NAME/regional_sales_manifest.json,escape='\'
Dataflow işinin durumu aşağıdaki komutla kontrol edilebilir:
gcloud dataflow jobs list \
--filter="name:spanner-import-from-gcs" \
--region="$GCP_REGION" \
--sort-by="~creationTime" \
--limit=1
Bu görevin tamamlanması yaklaşık 5 dakika sürer.
Spanner'daki verileri doğrulama
Dataflow işi başarılı olduğunda verilerin Spanner'a yüklendiğini doğrulayın.
Öncelikle satır sayısını kontrol edin. Satır sayısı 4.375 olmalıdır.
gcloud spanner databases execute-sql $SPANNER_DB \
--instance=$SPANNER_INSTANCE \
--sql='SELECT COUNT(*) FROM regional_sales;'
Ardından, verileri incelemek için birkaç satır sorgulayın.
gcloud spanner databases execute-sql $SPANNER_DB \
--instance=$SPANNER_INSTANCE \
--sql='SELECT * FROM regional_sales LIMIT 5'
Databricks tablosundan içe aktarılan veriler görünür olmalıdır.
6. Temizleme
Spanner'ı temizleme
Spanner veritabanını ve örneğini silme
gcloud spanner instances delete $SPANNER_INSTANCE
GCS'de yer açma
Verileri barındırmak için oluşturulan GCS paketini silin.
gcloud storage rm --recursive gs://$GCS_BUCKET_NAME
Databricks'i temizleme
Katalog/Şema/Tablo Silme
- Databricks örneğinizde oturum açma
- Sol taraftaki menüden
simgesini tıklayın. - Katalog listesinden daha önce oluşturulan
retl_tpch_projectöğesini seçin.

- Şema listesinde,
tpch_dataoluşturulanı seçin. - Tablo listesinden daha önce oluşturulan
regional_sales_csvöğesini seçin.
simgesini tıklayarak tablo seçeneklerini genişletin ve Sil'i seçin.- Tabloyu silmek için onay iletişim kutusunda Sil'i tıklayın.
- Tablo silindikten sonra şema sayfasına geri yönlendirilirsiniz.
simgesini tıklayarak şema seçeneklerini genişletin ve Sil'i seçin.- Şemayı silmek için onay iletişim kutusunda Sil'i tıklayın.
- Şema silindikten sonra katalog sayfasına geri yönlendirilirsiniz.
- Varsa
defaultşemasını silmek için 4-11. adımları tekrar uygulayın. - Katalog sayfasında,
simgesini tıklayarak katalog seçeneklerini genişletin ve Sil'i seçin. - Kataloğu silmek için onay iletişim kutusunda Sil'i tıklayın.
Harici Veri Konumunu / Kimlik Bilgilerini Silme
- Katalog ekranında
simgesini tıklayın. External Dataseçeneğini görmüyorsanızExternal Location,Connectaçılır listesinde yer alabilir.- Daha önce oluşturulan
retl-gcs-locationharici veri konumunu tıklayın. - Harici konum sayfasında,
simgesini tıklayarak konum seçeneklerini genişletin ve Deletesimgesini seçin. - Harici konumu silmek için onay iletişim kutusunda Sil'i tıklayın.
simgesini tıklayın.- Daha önce oluşturulan
retl-gcs-credentialsimgesini tıklayın. - Kimlik bilgisi sayfasında,
simgesini tıklayarak kimlik bilgisi seçeneklerini genişletin ve Deletesimgesini seçin. - Kimlik bilgilerini silmek için onay iletişim kutusunda Sil'i tıklayın.
7. Tebrikler
Codelab'i tamamladığınız için tebrik ederiz.
İşlediğimiz konular
- Databricks'e veri yükleme
- GCS paketi oluşturma
- Databricks tablosunu CSV biçiminde GCS'ye aktarma
- Spanner örneği oluşturma
- Dataflow ile CSV tablolarını Spanner'a yükleme