Spanner Data Boost ve BigQuery'yi kullanmaya başlama

1. Giriş

Bu codelab'de, sıfır ETL birleşik sorguları kullanarak ve Spanner veritabanını etkilemeden BigQuery'den Spanner verilerini sorgulamak için Spanner Data Boost'u nasıl kullanacağınızı öğreneceksiniz.

f1de68f762a86cc7.png

Spanner Data Boost, desteklenen Spanner iş yükleri için bağımsız işlem kaynakları sağlayan, tümüyle yönetilen ve sunucusuz bir hizmettir. Data Boost, sunucusuz isteğe bağlı kullanım modeli kullanarak sağlanan Spanner örneğindeki mevcut iş yükleri üzerinde neredeyse sıfır etkiyle 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 taşıma işlemi olmadan Spanner'dan veri analizi platformunuza kolayca veri sorgulamanızı sağlar.

Ön koşullar

  • Google Cloud, Console hakkında temel bilgiler
  • Komut satırı arayüzü ve Google kabuğuyla ilgili temel beceriler

Neler öğreneceksiniz?

  • Spanner örneği dağıtma
  • Spanner veritabanı oluşturmak için veri yükleme
  • Data Boost olmadan BigQuery'den Spanner verilerine erişme
  • Data Boost ile BigQuery'den Spanner verilerine erişme

Gerekenler

  • Bir Google Cloud Hesabı ve Google Cloud Projesi
  • Chrome gibi bir web tarayıcısı

2. Kurulum ve Gereksinimler

Kendi hızınızda ortam kurulumu

  1. Google Cloud Console'da oturum açıp 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.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • 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. İstediğiniz zaman güncelleyebilirsiniz.
  • Proje Kimliği, tüm Google Cloud projelerinde benzersizdir ve değiştirilemez (belirlendikten sonra değiştirilemez). Cloud Console, otomatik olarak benzersiz bir dize oluşturur. bunun ne olduğunu umursamıyorsunuz. Çoğu codelab'de proje kimliğinizi (genellikle PROJECT_ID olarak tanımlanır) belirtmeniz gerekir. Oluşturulan kimliği beğenmezseniz rastgele bir kimlik daha oluşturabilirsiniz. Alternatif olarak, kendi ölçümünüzü deneyip mevcut olup olmadığına bakabilirsiniz. Bu adımdan sonra değiştirilemez ve proje süresince kalır.
  • Bilginiz olması açısından, bazı API'lerin kullandığı üçüncü bir değer, yani Proje Numarası daha vardır. Bu değerlerin üçü hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
  1. Sonraki adımda, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i çalıştırmanın maliyeti, yüksek değildir. Bu eğitim dışında faturalandırmanın tekrarlanmasını önlemek amacıyla kaynakları kapatmak için oluşturduğunuz kaynakları silebilir veya projeyi silebilirsiniz. Yeni Google Cloud kullanıcıları 300 ABD doları değerindeki ücretsiz denemeden yararlanabilir.

Cloud Shell'i Başlatma

Google Cloud dizüstü bilgisayarınızdan uzaktan çalıştırılabilse de 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 bulunan Cloud Shell simgesini tıklayın:

55efc1aaa7a4d3ad.png

Ortamı sağlamak ve bağlamak yalnızca birkaç dakika sürer. Tamamlandığında şuna benzer bir sonuç görmeniz gerekir:

7ffe5cbb04455448

İhtiyacınız olan tüm geliştirme araçlarını bu sanal makinede bulabilirsiniz. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışarak ağ performansını ve kimlik doğrulamasını büyük ölçüde iyileştirir. Bu codelab'deki tüm çalışmalarınız tarayıcıda yapılabilir. 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ştirmekten çekinmeyin.

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şturduk. Bunun 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ışmaya başladıktan sonra veritabanını oluşturabilirsiniz. Spanner, tek bir örnek üzerinde birden çok veritabanı kullanılmasına olanak sağlar.

Veritabanı, şemanızı tanımladığınız yerdir. 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 gcloud komut satırı aracını tekrar 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 Geliştirme'yi kullanabilmek için veritabanında bazı verilerinizin olması gerekir. Bunu yapmak için bir Cloud Storage paketi oluşturur, pakete avro içe aktarma işlemi yükler ve Avro verilerini Spanner'a yüklemek için bir Dataflow içe aktarma işi başlatırsınız.

API'leri etkinleştir

Bunu yapmak için önceki kapalı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.

Cloud Storage'da dosyaları aşama içe aktarma

Şimdi, avro dosyalarını depolamak için paket 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/...

Sonra, github'dan tar dosyasını indirin ve çı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 de 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

Bu komutla içe aktarma işinin durumunu 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'da veri doğrulama

Şimdi Spanner Studio'ya gidin ve verilerin mevcut olduğundan emin olun. Öncelikle, konular tablosunu genişleterek sütunları görüntüleyin.

cd1cf38efd2b974a.png

Şimdi, verilerin kullanılabildiğinden emin olmak için aşağıdaki sorguyu çalıştırın:

SELECT COUNT(*) FROM topics;

Beklenen çıkış:

89e5d92fbe71c022.png

5. BigQuery'den veri okuma

Artık Spanner'da verileriniz olduğuna göre, bu verilere BigQuery içinden erişebilirsiniz. Bunu yapmak için BigQuery'de Spanner'a harici bir bağlantı kurmanız gerekir.

Doğru izinlere sahip olduğunuzu varsayarsak aşağıdaki adımları uygulayarak Spanner ile harici bir bağlantı oluşturun.

"Ekle"yi tıklayın BigQuery konsolunun üst kısmındaki düğmeyi tıklayın ve "Süresiz veri kaynaklarına bağlantılar"ı seçin. seçeneğini belirleyin.

580a0d237f11a9c5.png

75968de398fabf7e.png

Artık Spanner'daki verileri okumak için bir sorgu çalıştırabilirsiniz. ${PROJECT_ID} kimliğinizin değerini değiştirdiğinizden emin olarak bu sorguyu BigQuery konsolunda çalıştırı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;

Örnek çıkış:

e47265487c3e39bd.png

"İş Bilgileri" bölümünde işle ilgili işin ne kadar sürdüğü ve ne kadar veri işlendiği gibi bilgileri görebilirsiniz. sekmesinden yararlanın.

9ae40b0aa8c4891.png

Daha sonra, Spanner'a bir Data Boost bağlantısı ekleyip sonuçları karşılaştıracaksınız.

6. Veri Geliştirme kullanarak veri okuma

Spanner Data Boost'u kullanmak için BigQuery ile Spanner arasında yeni bir harici bağlantı oluşturmanız gerekir. "Ekle"yi tıklayın. oturum açın ve "Connections from external data sources" öğesini seçin tekrar.

Ayrıntıları, Spanner ile aynı bağlantı URI'sini kullanarak girin. "Bağlantı Kimliği"ni değiştirme ve "veri güçlendirmeyi kullan"ı işaretleyin seçin.

8e2205255b56a279.png

Veri Geliştirme bağlantısı oluşturulduktan sonra yeni bağlantı adıyla aynı sorguyu çalıştırabilirsiniz. Yine sorguda proje_kimliğinizi 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;

Öncekiyle aynı sonuç grubunu alırsınız. Zamanlama değişti mi?

7. Veri Artırma'yı anlama

Spanner Data Boost, Spanner örnek kaynaklarınızla ilgisi olmayan kaynakları kullanmanıza olanak tanır. Bu birincil olarak analiz iş yüklerinizin operasyonel iş yükleriniz üzerindeki etkisini azaltır.

Sorguyu Veri Geliştirme'yi kullanmamak üzere iki veya üç dakika içinde birkaç kez çalıştırırsanız bunu 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 sorguyu çalıştırarak Veri Geliştirme'yi birkaç kez daha kullanı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 ve Sistem Analizleri'ne gidin.

c1dc67fcc7a2a71.png

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

a86a7508b6738904.png

Çoğu durumda, Veri Geliştirme kullanılırken analiz sorgusunun performansı iyileşir. Bu eğitimdeki veri kümesi küçüktür ve kaynaklar için rekabet eden başka iş yükü yoktur. Dolayısıyla bu eğitimde performans iyileştirmelerinin gösterilmesi beklenmemektedir.

Sorgular ve iş yüklerinde değişiklikler yapıp Veri Geliştirme'nin nasıl çalıştığını görebilirsiniz. İşiniz bittiğinde ortamı temizlemek için bir sonraki bölüme geçin.

8. Ortamı temizle

Projenizi bu codelab için özel olarak oluşturduysanız temizlemek için projeyi silmeniz yeterlidir. Projeyi sürdürmek ve her bir bileşeni temizlemek istiyorsanız aşağıdaki adımlara geçin.

BigQuery bağlantılarını kaldırma

Her iki bağlantıyı da kaldırmak için bağlantı adının yanındaki üç noktayı tıklayın. "Sil"i seçin ve bağlantıyı silme talimatlarını uygulayın.

c9348832bcf202a9.png

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 giderek "codelab-demo" öğesini silmeniz yeterlidir tek bir kod oluşturun.

ab7c83ebdab74c04.png

9. Tebrikler

Codelab'i tamamladığınız için tebrikler.

İşlediğimiz konular

  • Spanner örneği dağıtma
  • Dataflow kullanarak Spanner'a veri yükleme
  • BigQuery'den Spanner verilerine erişme
  • BigQuery'den gelen analiz sorguları için Spanner örneğinizin etkilenmesini önlemek üzere Spanner Data Boost'u kullanma

10. Anket

Çıkış:

Bu eğiticiden nasıl yararlanacaksınız?

Yalnızca baştan sona oku Okuyun ve alıştırmaları tamamlayın