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.
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
- 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.
- 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.
- 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:
Ortamı sağlamak ve bağlamak yalnızca birkaç dakika sürer. Tamamlandığında şuna benzer bir sonuç görmeniz gerekir:
İ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.
Şimdi, verilerin kullanılabildiğinden emin olmak için aşağıdaki sorguyu çalıştırın:
SELECT COUNT(*) FROM topics;
Beklenen çıkış:
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.
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ış:
"İş 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.
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.
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.
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.
Ç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.
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.
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ış: