1. Giriş
Bu codelab'de, Spanner Data Boost'u kullanarak Spanner verilerini BigQuery'den nasıl sorgulayacağınızı öğreneceksiniz. Bu işlem, sıfır ETL'li birleşik sorgular kullanılarak ve Spanner veritabanını etkilemeden gerçekleştirilir.

Spanner Data Boost, desteklenen Spanner iş yükleri için bağımsız bilgi işlem kaynakları sağlayan, tümüyle yönetilen bir sunucusuz hizmettir. Data Boost, sunucusuz bir isteğe bağlı kullanım modeli kullanarak, sağlanan Spanner örneğindeki mevcut iş yüklerini neredeyse hiç etkilemeden analiz sorguları ve veri dışa aktarma işlemleri yürütmenize olanak tanır.
BigQuery harici bağlantılarıyla birlikte kullanıldığında Data Boost, karmaşık ETL veri hareketi olmadan Spanner'daki verileri veri analizi platformunuzda kolayca sorgulamanıza olanak tanır.
Ön koşullar
- Google Cloud Console hakkında temel bilgiler
- Komut satırı arayüzü ve Google kabuğunda temel beceriler
Neler öğreneceksiniz?
- Spanner örneği dağıtma
- Spanner veritabanı oluşturmak için verileri yükleme
- Data Boost olmadan BigQuery'den Spanner verilerine erişme
- Data Boost ile BigQuery'den Spanner verilerine erişme
İhtiyacınız olanlar
- Google Cloud hesabı ve Google Cloud projesi
- Chrome gibi bir web tarayıcısı
2. Kurulum ve Gereksinimler
Yönlendirmesiz ortam kurulumu
- Google Cloud Console'da oturum açın ve yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Gmail veya Google Workspace hesabınız yoksa hesap oluşturmanız gerekir.



- Proje adı, bu projenin katılımcıları için görünen addır. Google API'leri tarafından kullanılmayan bir karakter dizesidir. Bu bilgiyi istediğiniz zaman güncelleyebilirsiniz.
- Proje kimliği, tüm Google Cloud projelerinde benzersizdir ve sabittir (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dizeyi otomatik olarak oluşturur. Genellikle bu dizenin ne olduğuyla ilgilenmezsiniz. Çoğu codelab'de proje kimliğinize (genellikle
PROJECT_IDolarak tanımlanır) başvurmanız gerekir. Oluşturulan kimliği beğenmezseniz başka bir rastgele kimlik oluşturabilirsiniz. Dilerseniz kendi adınızı deneyerek kullanılabilir olup olmadığını kontrol edebilirsiniz. Bu adım tamamlandıktan sonra değiştirilemez ve proje süresince geçerli kalır. - Bazı API'lerin kullandığı üçüncü bir değer olan Proje Numarası da vardır. Bu üç değer hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
- Ardından, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i tamamlamak neredeyse hiç maliyetli değildir. Bu eğitimin ötesinde faturalandırılmayı önlemek için kaynakları kapatmak üzere oluşturduğunuz kaynakları veya projeyi silebilirsiniz. Yeni Google Cloud kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.
Cloud Shell'i Başlatma
Google Cloud, dizüstü bilgisayarınızdan uzaktan çalıştırılabilir ancak bu codelab'de Cloud'da çalışan bir komut satırı ortamı olan Google Cloud Shell'i kullanacaksınız.
Google Cloud Console'da sağ üstteki araç çubuğunda Cloud Shell simgesini tıklayın:

Ortamın temel hazırlığı ve bağlanması yalnızca birkaç dakikanızı alır. İşlem tamamlandığında aşağıdakine benzer bir ekranla karşılaşırsınız:

Bu sanal makine, ihtiyaç duyacağınız tüm geliştirme araçlarını içerir. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde güçlenir. Bu codelab'deki tüm çalışmalarınızı tarayıcıda yapabilirsiniz. Herhangi bir şey yüklemeniz gerekmez.
3. Spanner örneği ve veritabanı oluşturma
Spanner API'yi etkinleştirme
Cloud Shell'de proje kimliğinizin ayarlandığından emin olun:
gcloud config set project [YOUR-PROJECT-ID]
PROJECT_ID=$(gcloud config get-value project)
Varsayılan bölgenizi us-central1 olarak yapılandırın. Bunu, Spanner bölgesel yapılandırmaları tarafından desteklenen farklı bir bölgeyle değiştirebilirsiniz.
gcloud config set compute/region us-central1
Spanner API'yi etkinleştirin:
gcloud services enable spanner.googleapis.com
Spanner örneğini oluşturma
Bu adımda, codelab için Spanner örneğimizi oluşturuyoruz. Bunu yapmak için Cloud Shell'i açıp şu komutu çalıştırın:
export SPANNER_INSTANCE_ID=codelab-demo
export SPANNER_REGION=regional-us-central1
gcloud spanner instances create $SPANNER_INSTANCE_ID \
--config=$SPANNER_REGION \
--description="Spanner Codelab instance" \
--nodes=1
Komut çıkışı:
$ gcloud spanner instances create $SPANNER_INSTANCE_ID \
--config=$SPANNER_REGION \
--description="Spanner Codelab instance" \
--nodes=1
Creating instance...done.
Veritabanını oluşturma
Örneğiniz çalıştıktan sonra veritabanını oluşturabilirsiniz. Spanner, tek bir örnekte birden fazla veritabanına izin verir.
Şemanızı tanımladığınız yer veritabanıdır. Ayrıca veritabanına kimlerin erişebileceğini kontrol edebilir, özel şifreleme ayarlayabilir, optimize ediciyi yapılandırabilir ve saklama süresini belirleyebilirsiniz.
Veritabanını oluşturmak için tekrar gcloud komut satırı aracını kullanın:
export SPANNER_DATABASE=codelab-db
gcloud spanner databases create $SPANNER_DATABASE \
--instance=$SPANNER_INSTANCE_ID
Komut çıkışı:
$ gcloud spanner databases create $SPANNER_DATABASE \
--instance=$SPANNER_INSTANCE_ID
Creating database...done.
4. Verileri yükle
Veri Artırma'yı kullanabilmek için veritabanında bazı verilerinizin olması gerekir. Bunu yapmak için bir Cloud Storage paketi oluşturacak, pakete bir Avro içe aktarma işlemi yükleyecek ve Avro verilerini Spanner'a yüklemek için bir Dataflow içe aktarma işi başlatacaksınız.
API'leri etkinleştir
Bunu yapmak için önceki istem kapatıldıysa bir Cloud Shell istemi açın.
Compute, Cloud Storage ve Dataflow API'lerini etkinleştirdiğinizden emin olun.
gcloud services enable compute.googleapis.com storage.googleapis.com dataflow.googleapis.com
Beklenen konsol çıkışı:
$ gcloud services enable compute.googleapis.com storage.googleapis.com dataflow.googleapis.com
Operation "operations/acat.*snip*" finished successfully.
İçe aktarma dosyalarını Cloud Storage'da hazırlama
Şimdi, avro dosyalarını depolayacak paketi oluşturun:
export GCS_BUCKET=spanner-codelab-import_$(date '+%Y-%m-%d_%H_%M_%S')
gcloud storage buckets create gs://$GCS_BUCKET
Beklenen konsol çıkışı:
$ gcloud storage buckets create gs://$GCS_BUCKET
Creating gs://spanner-codelab-import/...
Ardından, github'dan tar dosyasını indirip çıkarın.
wget https://github.com/dtest/spanner-databoost-tutorial/releases/download/v0.1/spanner-chat-db.tar.gz
tar -xzvf spanner-chat-db.tar.gz
Beklenen konsol çıkışı:
$ wget https://github.com/dtest/spanner-databoost-tutorial/releases/download/v0.1/spanner-chat-db.tar.gz
*snip*
*snip*(123 MB/s) - ‘spanner-chat-db.tar.gz' saved [46941709/46941709]
$
$ tar -xzvf spanner-chat-db.tar.gz
spanner-chat-db/
spanner-chat-db/users.avro-00000-of-00002
spanner-chat-db/user_notifications-manifest.json
spanner-chat-db/interests-manifest.json
spanner-chat-db/users-manifest.json
spanner-chat-db/users.avro-00001-of-00002
spanner-chat-db/topics-manifest.json
spanner-chat-db/topics.avro-00000-of-00002
spanner-chat-db/topics.avro-00001-of-00002
spanner-chat-db/user_interests-manifest.json
spanner-chat-db/spanner-export.json
spanner-chat-db/interests.avro-00000-of-00001
spanner-chat-db/user_notifications.avro-00000-of-00001
spanner-chat-db/user_interests.avro-00000-of-00001
Şimdi dosyaları oluşturduğunuz pakete yükleyin.
gcloud storage cp spanner-chat-db gs://$GCS_BUCKET --recursive
Beklenen konsol çıkışı:
$ gcloud storage cp spanner-chat-db gs://$GCS_BUCKET --recursive
Copying file://spanner-chat-db/users.avro-00000-of-00002 to gs://spanner-codelab-import/spanner-chat-db/users.avro-00000-of-00002
Copying file://spanner-chat-db/user_notifications-manifest.json to gs://spanner-codelab-import/spanner-chat-db/user_notifications-manifest.json
Copying file://spanner-chat-db/interests-manifest.json to gs://spanner-codelab-import/spanner-chat-db/interests-manifest.json
Copying file://spanner-chat-db/users-manifest.json to gs://spanner-codelab-import/spanner-chat-db/users-manifest.json
Copying file://spanner-chat-db/users.avro-00001-of-00002 to gs://spanner-codelab-import/spanner-chat-db/users.avro-00001-of-00002
Copying file://spanner-chat-db/topics-manifest.json to gs://spanner-codelab-import/spanner-chat-db/topics-manifest.json
Copying file://spanner-chat-db/topics.avro-00000-of-00002 to gs://spanner-codelab-import/spanner-chat-db/topics.avro-00000-of-00002
Copying file://spanner-chat-db/topics.avro-00001-of-00002 to gs://spanner-codelab-import/spanner-chat-db/topics.avro-00001-of-00002
Copying file://spanner-chat-db/user_interests-manifest.json to gs://spanner-codelab-import/spanner-chat-db/user_interests-manifest.json
Copying file://spanner-chat-db/spanner-export.json to gs://spanner-codelab-import/spanner-chat-db/spanner-export.json
Copying file://spanner-chat-db/interests.avro-00000-of-00001 to gs://spanner-codelab-import/spanner-chat-db/interests.avro-00000-of-00001
Copying file://spanner-chat-db/user_notifications.avro-00000-of-00001 to gs://spanner-codelab-import/spanner-chat-db/user_notifications.avro-00000-of-00001
Copying file://spanner-chat-db/user_interests.avro-00000-of-00001 to gs://spanner-codelab-import/spanner-chat-db/user_interests.avro-00000-of-00001
Completed files 13/13 | 54.6MiB/54.6MiB
Average throughput: 46.4MiB/s
Verileri İçe Aktarma
Cloud Storage'daki dosyalarla, verileri Spanner'a yüklemek için bir Dataflow içe aktarma işi başlatabilirsiniz.
gcloud dataflow jobs run import_chatdb \
--gcs-location gs://dataflow-templates-us-central1/latest/GCS_Avro_to_Cloud_Spanner \
--region us-central1 \
--staging-location gs://$GCS_BUCKET/tmp \
--parameters \
instanceId=$SPANNER_INSTANCE_ID,\
databaseId=$SPANNER_DATABASE,\
inputDir=gs://$GCS_BUCKET/spanner-chat-db
Beklenen konsol çıkışı:
$ gcloud dataflow jobs run import_chatdb \
> --gcs-location gs://dataflow-templates-us-central1/latest/GCS_Avro_to_Cloud_Spanner \
> --region us-central1 \
> --staging-location gs://$GCS_BUCKET/tmp \
> --parameters \
> instanceId=$SPANNER_INSTANCE_ID,\
> databaseId=$SPANNER_DATABASE,\
> inputDir=gs://$GCS_BUCKET/spanner-chat-db
createTime: '*snip*'
currentStateTime: '*snip*'
id: *snip*
location: us-central1
name: import_chatdb
projectId: *snip*
startTime: '*snip*'
type: JOB_TYPE_BATCH
İçe aktarma işinin durumunu bu komutla kontrol edebilirsiniz.
gcloud dataflow jobs list --filter="name=import_chatdb" --region us-central1
Beklenen konsol çıkışı:
$ gcloud dataflow jobs list --filter="name=import_chatdb"
`--region` not set; getting jobs from all available regions. Some jobs may be missing in the event of an outage. https://cloud.google.com/dataflow/docs/concepts/regional-endpoints
JOB_ID NAME TYPE CREATION_TIME STATE REGION
*snip* import_chatdb Batch 2024-04-*snip* Done us-central1
Spanner'daki verileri doğrulama
Şimdi Spanner Studio'ya gidin ve verilerin orada olduğundan emin olun. Öncelikle sütunları görüntülemek için konular tablosunu genişletin.

Şimdi verilerin kullanılabilir olduğundan emin olmak için aşağıdaki sorguyu çalıştırın:
SELECT COUNT(*) FROM topics;
Beklenen çıktı:

5. BigQuery'den veri okuma
Artık Spanner'da verileriniz olduğuna göre, BigQuery'den bu verilere erişme zamanı geldi. Bunu yapmak için BigQuery'de Spanner'a harici bağlantı oluşturursunuz.
Gerekli izinlere sahip olduğunuzu varsayarak aşağıdaki adımları uygulayarak Spanner'a harici bir bağlantı oluşturun.
BigQuery konsolunun üst kısmındaki "Ekle" düğmesini tıklayın ve "Harici veri kaynaklarına bağlantılar" seçeneğini belirleyin.


Artık Spanner'dan veri okumak için sorgu çalıştırabilirsiniz. Bu sorguyu BigQuery konsolunda çalıştırın ve ${PROJECT_ID} değerini kendi proje kimliğinizle değiştirdiğinizden emin olun:
SELECT *
FROM (
SELECT * FROM EXTERNAL_QUERY("projects/${PROJECT_ID}/locations/us-central1/connections/codelab-demo-chat_no-databoost", "SELECT users.userUUID, SHA256(users.email) as hashed_email, COUNT(*) num_topics, m.last_posted from users HASH JOIN (select MAX(t.created) last_posted, t.userUUID FROM topics t GROUP BY 2) m USING (userUUID)HASH JOIN topics USING (userUUID) GROUP BY users.userUUID, users.email, m.last_posted")
)
ORDER BY num_topics DESC;
Örnek çıkış:

İşle ilgili bilgileri (ör. ne kadar sürdüğü ve ne kadar veri işlendiği) "İş Bilgileri" sekmesinde görebilirsiniz.

Ardından, Spanner'a bir Data Boost bağlantısı ekleyip sonuçları karşılaştıracaksınız.
6. Data Boost kullanarak veri okuma
Spanner Data Boost'u kullanmak için BigQuery'den Spanner'a yeni bir harici bağlantı oluşturmanız gerekir. BigQuery konsolunda "Ekle"yi tıklayın ve tekrar "Connections from external data sources"yı seçin.
Ayrıntıları Spanner'a aynı bağlantı URI'siyle doldurun. "Bağlantı kimliği"ni değiştirin ve "Veri artırma özelliğini kullan" kutusunu işaretleyin.

Oluşturulan Data Boost bağlantısıyla aynı sorguyu yeni bağlantı adıyla çalıştırabilirsiniz. Sorguda proje kimliğinizi tekrar değiştirin.
SELECT *
FROM (
SELECT * FROM EXTERNAL_QUERY("projects/${PROJECT_ID}/locations/us-central1/connections/codelab-demo-chat_use-databoost", "SELECT users.userUUID, SHA256(users.email) as hashed_email, COUNT(*) num_topics, m.last_posted from users HASH JOIN (select MAX(t.created) last_posted, t.userUUID FROM topics t GROUP BY 2) m USING (userUUID)HASH JOIN topics USING (userUUID) GROUP BY users.userUUID, users.email, m.last_posted")
)
ORDER BY num_topics DESC;
Daha önceki sonuç kümesini alırsınız. Zamanlama değişti mi?
7. Veri Geliştirme'yi anlama
Spanner Data Boost, Spanner örneği kaynaklarınızla ilgili olmayan kaynakları kullanmanıza olanak tanır. Bu, öncelikle analitik iş yüklerinizin operasyonel iş yükleriniz üzerindeki etkisini azaltır.
Bu durumu, sorguyu iki veya üç dakika içinde birkaç kez Data Boost'u kullanmayacak şekilde çalıştırarak görebilirsiniz. ${PROJECT_ID} yerine koymayı unutmayın.
SELECT *
FROM (
SELECT * FROM EXTERNAL_QUERY("projects/${PROJECT_ID}/locations/us-central1/connections/codelab-demo-chat_no-databoost", "SELECT users.userUUID, SHA256(users.email) as hashed_email, COUNT(*) num_topics, m.last_posted from users HASH JOIN (select MAX(t.created) last_posted, t.userUUID FROM topics t GROUP BY 2) m USING (userUUID)HASH JOIN topics USING (userUUID) GROUP BY users.userUUID, users.email, m.last_posted")
)
ORDER BY num_topics DESC;
Ardından birkaç dakika daha bekleyin ve Data Boost'u birkaç kez daha kullanmak için sorguyu çalıştırın. ${PROJECT_ID} yerine koymayı unutmayın.
SELECT *
FROM (
SELECT * FROM EXTERNAL_QUERY("projects/${PROJECT_ID}/locations/us-central1/connections/codelab-demo-chat_use-databoost", "SELECT users.userUUID, SHA256(users.email) as hashed_email, COUNT(*) num_topics, m.last_posted from users HASH JOIN (select MAX(t.created) last_posted, t.userUUID FROM topics t GROUP BY 2) m USING (userUUID)HASH JOIN topics USING (userUUID) GROUP BY users.userUUID, users.email, m.last_posted")
)
ORDER BY num_topics DESC;
Şimdi Cloud Console'da Spanner Studio'ya dönün ve System Insights'a (Sistem Analizleri) gidin.

Burada CPU metriklerini görebilirsiniz. Data Boost olmadan çalıştırılan sorgular, "executesql_select_withpartitiontoken" işlemleri için CPU kullanır. Sorgu aynı olsa da Data Boost yürütmesi, örneğinizin CPU kullanımında görünmez.

Çoğu durumda, veri artırma kullanılırken analitik sorgunun performansı artar. Bu eğitimdeki veri kümesi küçüktür ve kaynaklar için rekabet eden başka iş yükleri yoktur. Bu nedenle, bu eğitimde performans iyileştirmelerinin gösterilmesi beklenmez.
Sorgular ve iş yükleriyle denemeler yaparak Data Boost'un nasıl çalıştığını görebilirsiniz. İşiniz bittiğinde ortamı temizlemek için sonraki bölüme geçin.
8. Ortamı temizleme
Projenizi özellikle bu codelab için oluşturduysanız temizlemek için projeyi silebilirsiniz. Projeyi saklamak ve bileşenleri temizlemek istiyorsanız aşağıdaki adımlarla devam edin.
BigQuery bağlantılarını kaldırma
Her iki bağlantıyı da kaldırmak için bağlantı adının yanındaki üç nokta simgesini tıklayın. "Sil"i seçin ve bağlantıyı silme talimatlarını uygulayın.

Cloud Storage paketini silme
gcloud storage rm --recursive gs://$GCS_BUCKET
Spanner örneğini silme
Temizlemek için Cloud Console'un Cloud Spanner bölümüne gidip kod laboratuvarında oluşturduğumuz "codelab-demo" örneğini silmeniz yeterlidir.

9. Tebrikler
Codelab'i tamamladığınız için tebrik ederiz.
İşlediğimiz konular
- Spanner örneği dağıtma
- Dataflow kullanarak Spanner'a veri yükleme
- BigQuery'den Spanner verilerine erişme
- BigQuery'den gelen analitik sorgular nedeniyle Spanner örneğinizin etkilenmesini önlemek için Spanner Data Boost'u kullanma
10. Anket
Çıkış: