BigQuery'de Kolay Veri Hazırlama: Az Kodla Geliştirme Yapanlar İçin Kılavuz

1. Giriş

Veri analistleri genellikle JSON yükleri gibi yarı yapılandırılmış biçimlerde kilitlenmiş değerli verilerle karşı karşıya kalır. Bu verilerin analiz ve makine öğrenimi için ayıklanması ve hazırlanması, geleneksel olarak önemli bir teknik engel olmuştur. Genellikle karmaşık ETL komut dosyaları ve bir veri mühendisliği ekibinin müdahalesi gerekir.

Bu codelab, veri analistlerinin bu zorluğun üstesinden bağımsız olarak gelmeleri için teknik bir plan sunar. Bu örnekte, uçtan uca bir yapay zeka ardışık düzeni oluşturmak için "az kod" yaklaşımı gösterilmektedir. Yalnızca BigQuery Studio'da bulunan araçları kullanarak Google Cloud Storage'daki ham CSV dosyasından yapay zeka destekli bir öneri özelliğine nasıl geçeceğinizi öğreneceksiniz.

Buradaki temel amaç, verilerinizden gerçek iş değeri elde etmek için karmaşık ve kod ağırlıklı süreçlerin ötesine geçen sağlam, hızlı ve analist dostu bir iş akışı göstermektir.

Ön koşullar

  • Google Cloud Console hakkında temel bilgiler
  • Komut satırı arayüzü ve Google Cloud Shell'de temel beceriler

Neler öğreneceksiniz?

  • BigQuery Veri Hazırlama'yı kullanarak doğrudan Google Cloud Storage'dan bir CSV dosyasını nasıl alıp dönüştüreceğinizi öğrenin.
  • Verilerinizdeki iç içe yerleştirilmiş JSON dizelerini ayrıştırmak ve düzleştirmek için kodsuz dönüşümleri kullanma
  • Metin yerleştirme için Vertex AI temel modeline bağlanan bir BigQuery ML uzak modeli oluşturma
  • Metin verilerini sayısal vektörlere dönüştürmek için ML.GENERATE_TEXT_EMBEDDING işlevini kullanma
  • Kosinüs benzerliğini hesaplamak ve veri kümenizdeki en benzer öğeleri bulmak için ML.DISTANCE işlevini kullanma.

Gerekenler

  • Google Cloud hesabı ve Google Cloud projesi
  • Chrome gibi bir web tarayıcısı

Temel kavramlar

  • BigQuery veri hazırlama: BigQuery Studio'da bulunan ve veri temizleme ile hazırlama için etkileşimli, görsel bir arayüz sağlayan bir araçtır. Dönüşümler önerir ve kullanıcıların minimum kodla veri ardışık düzenleri oluşturmasına olanak tanır.
  • BQML Remote Model: Vertex AI'da (ör. Gemini) barındırılan bir model için proxy görevi gören bir BigQuery ML nesnesi. Bu sayede, tanıdık SQL söz dizimini kullanarak güçlü ve önceden eğitilmiş yapay zeka modellerini çağırabilirsiniz.
  • Vektör yerleştirme: Metin veya resim gibi verilerin sayısal gösterimi. Bu codelab'de, sanat eserlerinin metin açıklamalarını vektörlere dönüştüreceğiz. Benzer açıklamalar, çok boyutlu uzayda birbirine "daha yakın" vektörlerle sonuçlanacak.
  • Kosinüs benzerliği: İki vektörün ne kadar benzer olduğunu belirlemek için kullanılan matematiksel bir ölçü. Bu, "en yakın" (en benzer) sanat eserlerini bulmak için ML.DISTANCE işlevi tarafından kullanılan öneri motorumuzun mantığının temelidir.

2. Kurulum ve şartlar

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ğ üst araç çubuğundaki Cloud Shell simgesini tıklayın:

55efc1aaa7a4d3ad.png

Ortamın sağlanması ve bağlantının kurulması yalnızca birkaç saniye sürer. İşlem tamamlandığında aşağıdakine benzer bir sonuç görürsünüz:

7ffe5cbb04455448.png

Bu sanal makineye, ihtiyaç duyacağınız tüm geliştirme araçları yüklenmiştir. 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 iyileştirilir. Bu codelab'deki tüm çalışmalarınızı tarayıcıda yapabilirsiniz. Herhangi bir yazılım yüklemeniz gerekmez.

Gerekli API'leri etkinleştirme ve ortamı yapılandırma

Cloud Shell'de proje kimliğinizi ayarlamak, ortam değişkenlerini tanımlamak ve bu codelab için gerekli tüm API'leri etkinleştirmek üzere aşağıdaki komutları çalıştırın.

export PROJECT_ID=$(gcloud config get-value project)
gcloud config set project $PROJECT_ID
export LOCATION="US"
export GCS_BUCKET_NAME="met-artworks-source-${PROJECT_ID}" # Must be a globally unique name

gcloud services enable bigquery.googleapis.com \
                       storage.googleapis.com \
                       aiplatform.googleapis.com \
                       bigqueryconnection.googleapis.com

BigQuery veri kümesi ve GCS paketi oluşturma

Tablolarımızı barındıracak yeni bir BigQuery veri kümesi ve kaynak CSV dosyamızı depolayacak bir Google Cloud Storage paketi oluşturun.

# Create the BigQuery Dataset in the US multi-region
bq --location=$LOCATION mk --dataset $PROJECT_ID:met_art_dataset

# Create the GCS Bucket
gcloud storage buckets create gs://$GCS_BUCKET_NAME --project=$PROJECT_ID --location=$LOCATION

Örnek Verileri Hazırlama ve Yükleme

Örnek CSV dosyasını içeren GitHub deposunu klonlayın ve yeni oluşturduğunuz GCS paketine yükleyin.

# Clone the repository
git clone https://github.com/GoogleCloudPlatform/devrel-demos.git

# Navigate to the correct directory
cd devrel-demos/data-analytics/dataprep

# Upload the CSV file to your GCS bucket
gsutil cp dataprep-met-bqml.csv gs://$GCS_BUCKET_NAME/

3. Veri hazırlama ile GCS'den BigQuery'ye

Bu bölümde, GCS'deki CSV dosyamızı almak, temizlemek ve yeni bir BigQuery tablosuna yüklemek için görsel ve kodsuz bir arayüz kullanacağız.

Veri Hazırlama'yı başlatma ve kaynağa bağlanma

  1. Google Cloud Console'da BigQuery Studio'ya gidin.

8825270159447e89.png

  1. Başlamak için karşılama sayfasında Veri hazırlama kartını tıklayın.

8b7b3ce147a55647.png

  1. Bu işlemi ilk kez yapıyorsanız gerekli API'leri etkinleştirmeniz gerekebilir. Hem "Gemini for Google Cloud API" hem de "BigQuery Unified API" için Etkinleştir'i tıklayın. Etkinleştirildikten sonra bu paneli kapatabilirsiniz.

e0a128b8b63137e6.png

1ab7db12bd624bff.png

  1. Ana Veri hazırlama penceresinde, "diğer veri kaynaklarını seçin" bölümünde Google Cloud Storage'ı tıklayın. Bu işlem, sağ tarafta "Verileri hazırla" panelini açar.

5ef56d07d54abab4.png

  1. Kaynak dosyanızı seçmek için Göz at düğmesini tıklayın.

95899fcbb7383967.png

  1. Daha önce oluşturduğunuz GCS paketine (met-artworks-source-...) gidin ve dataprep-met-bqml.csv dosyasını seçin. Seç'i tıklayın.

3590d0841677ad01.png

107797a8f134b248.png

  1. Ardından, bir hazırlama tablosu yapılandırmanız gerekir.
  2. Veri kümesi için oluşturduğunuz met_art_dataset öğesini seçin.
  3. Tablo adı alanına bir ad girin (ör. temp).
  4. Oluştur'u tıklayın.

694a7064eb1f2109.png

Verileri Dönüştürme ve Temizleme

  1. BigQuery'nin veri hazırlama özelliği artık CSV'nin önizlemesini yükleyecek. Uzun JSON dizesini içeren label_details_json sütununu bulun. Sütun başlığını tıklayarak seçin.

345e09d8222ef0d6.png

  1. Sağdaki Öneriler panelinde, BigQuery'de Gemini otomatik olarak alakalı dönüşümler önerir. "Sütunu düzleştirme label_details_json" kartında Uygula düğmesini tıklayın. Bu işlem, iç içe yerleştirilmiş alanları (description, score vb.) kendi üst düzey sütunlarına ayırır.

a432edf49f182ea3.png

  1. object_id sütununu ve "Sütun object_id, string türünden int64 türüne dönüştürülüyor" bölümündeki uygula düğmesini tıklayın.

46523a5dd6b7c495.png

a190553c0a153393.png

Hedefi tanımlama ve işi çalıştırma

  1. Sağdaki panelde, dönüştürme işleminizin çıkışını yapılandırmak için Hedef düğmesini tıklayın.

90b0d1e641d6ace9.png

  1. Hedef ayrıntılarını ayarlayın:
  2. Veri kümesi, met_art_dataset ile önceden doldurulmalıdır.
  3. Çıkış için yeni bir tablo adı girin: met_art_flatten_table.
  4. Kaydet'i tıklayın.

cda9b07bfd5ff6a3.png

  1. Çalıştır düğmesini tıklayın ve veri hazırlama işinin tamamlanmasını bekleyin.

9be3f3baecc7ee93.png

  1. İşin ilerleme durumunu sayfanın alt kısmındaki Yürütmeler sekmesinden izleyebilirsiniz. İşlem birkaç dakika içinde tamamlanır.

df820e4a5183e9b9.png

f9329c88a7fdb535.png

4. BQML ile vektör yerleştirmeleri oluşturma

Verilerimiz artık temiz ve yapılandırılmış olduğundan temel yapay zeka görevi için BigQuery ML'yi kullanacağız: Sanat eserinin metin açıklamalarını sayısal vektör yerleştirmelerine dönüştürme.

BigQuery bağlantısı oluşturma

BigQuery'nin Vertex AI hizmetleriyle iletişim kurmasına izin vermek için önce bir BigQuery bağlantısı oluşturmanız gerekir.

  1. BigQuery Studio'nun Gezgin panelinde "+ Veri ekle" düğmesini tıklayın.

eef6c5c73cf8736.png

  1. Sağdaki panelde, arama çubuğunu kullanarak Vertex AI yazın. Bu seçeneği ve ardından filtrelenmiş listeden BigQuery federasyonunu seçin.

32e9632e84dd1ae7.png

7feedffb98bb288a.png

  1. Harici veri kaynağı formu açılır. Aşağıdaki ayrıntıları girin:
  • Bağlantı kimliği: Bağlantı kimliğini girin (ör. bqml-vertex-connection)
  • Konum Türü: Çoklu bölge'nin seçildiğinden emin olun.
  • Konum: Konumu seçin (ör. US).

c0681e76440a18cd.png

  1. Bağlantı oluşturulduktan sonra bir onay iletişim kutusu gösterilir. Gezgin sekmesinde Bağlantıya git'i veya Harici bağlantılar'ı tıklayın. Bağlantı ayrıntıları sayfasında tam kimliği panonuza kopyalayın. Bu, BigQuery'nin Vertex AI'ı çağırmak için kullanacağı hizmet hesabı kimliğidir.

fd0d82f3265f1def.png

  1. Google Cloud Console gezinme menüsünde IAM ve yönetici > IAM'e gidin.

de8a0fe28f8dee8f.png

  1. "Erişim izni ver" düğmesini tıklayın.
  2. Önceki adımda kopyaladığınız hizmet hesabını Yeni ana hesaplar alanına yapıştırın.
  3. Rol açılır listesinde "Vertex AI kullanıcısı"nı atayın ve "Kaydet"i tıklayın.

8b2c89b8c97e37cc.png

Bu kritik adım, BigQuery'nin sizin adınıza Vertex AI modellerini kullanmak için uygun yetkiye sahip olmasını sağlar.

Remote modeli oluşturma

BigQuery Studio'da yeni bir SQL düzenleyici sekmesi açın. Bu bölümde, Gemini'a bağlanan BQML modelini tanımlarsınız.

Bu ifadeyle yeni bir model eğitilmez. Bu işlem, yetkilendirdiğiniz bağlantıyı kullanarak BigQuery'de güçlü ve önceden eğitilmiş bir gemini-embedding-001 modele işaret eden bir referans oluşturur.

Aşağıdaki SQL komut dosyasının tamamını kopyalayıp BigQuery düzenleyiciye yapıştırın.

ba0a9c9d951c0f71.png

CREATE OR REPLACE MODEL `met_art_dataset.embedding_model`
REMOTE WITH CONNECTION `US.bqml-vertex-connection`
OPTIONS (endpoint = 'gemini-embedding-001');

Yerleştirilmiş Öğeler Oluşturma

Şimdi vektör yerleştirmelerini oluşturmak için BQML modelimizi kullanacağız. Her satır için tek bir metin etiketini dönüştürmek yerine, her bir sanat eseri için daha zengin ve anlamlı bir "anlamsal özet" oluşturmak üzere daha gelişmiş bir yaklaşım kullanacağız. Bu sayede daha kaliteli yerleştirmeler ve daha doğru öneriler elde edebilirsiniz.

Bu sorgu, önemli bir ön işleme adımı gerçekleştirir:

  • Önce geçici bir tablo oluşturmak için WITH deyimini kullanır.
  • İçinde, tek bir sanat eseriyle ilgili tüm bilgileri tek bir satırda birleştirmek için GROUP BY her object_id.
  • Ayrı metin açıklamalarının tümünü (ör. "Portre", "Kadın", "Tuval üzerine yağlı boya") tek ve kapsamlı bir metin dizesinde birleştirmek için STRING_AGG işlevini kullanırız. Bu işlev, açıklamaları alaka düzeyine göre sıralar.

Bu birleştirilmiş metin, yapay zekaya sanat eseri hakkında çok daha zengin bir bağlam sunarak daha ayrıntılı ve güçlü vektör gömmeleri oluşturmasını sağlar.

Yeni bir SQL düzenleyici sekmesinde aşağıdaki sorguyu yapıştırıp çalıştırın:

CREATE OR REPLACE TABLE `met_art_dataset.artwork_embeddings` AS
WITH artwork_semantic_text AS (
  -- First, we group all text labels for each artwork into a single row.
  SELECT
    object_id,
    ANY_VALUE(title) AS title,
    ANY_VALUE(artist_display_name) AS artist_display_name,
    -- STRING_AGG combines all descriptions into one comma-separated string,
    -- ordering them by score to put the most relevant labels first.
    STRING_AGG(description, ', ' ORDER BY score DESC) AS aggregated_labels
  FROM
    `met_art_dataset.met_art_flatten_table`
  GROUP BY
    object_id
)
SELECT
  *
FROM ML.GENERATE_TEXT_EMBEDDING(
  MODEL `met_art_dataset.embedding_model`,
  (
    -- We pass the new, combined string as the content to be embedded.
    SELECT
      object_id,
      title,
      artist_display_name,
      aggregated_labels AS content
    FROM
      artwork_semantic_text
  )
);

Bu sorgu yaklaşık 10 dakika sürer. Sorgu tamamlandıktan sonra sonuçları doğrulayın. Gezgin panelinde yeni artwork_embeddings tablonuzu bulup tıklayın. Tablo şeması görüntüleyicide object_id, vektörleri içeren yeni ml_generate_text_embedding_result sütunu ve kaynak metin olarak kullanılan aggregated_labels sütununu görürsünüz.

c894ad3624d710e7.png

5. SQL ile Benzer Sanat Eserleri Bulma

Oluşturduğumuz yüksek kaliteli ve bağlam açısından zengin vektör yerleştirmeleri sayesinde, tematik olarak benzer sanat eserlerini bulmak SQL sorgusu çalıştırmak kadar kolaydır. Vektörler arasındaki kosinüs benzerliğini hesaplamak için ML.DISTANCE işlevini kullanırız. Yerleştirmelerimiz toplu metinden oluşturulduğu için benzerlik sonuçları daha doğru ve alakalı olacaktır.

  1. Yeni bir SQL düzenleyici sekmesine aşağıdaki sorguyu yapıştırın. Bu sorgu, bir öneri uygulamasının temel mantığını simüle eder:
  • Öncelikle tek ve belirli bir sanat eseri için vektör seçilir (bu örnekte, object_id değeri 436535 olan Van Gogh'un "Selviler" adlı eseri).
  • Ardından, bu tek vektör ile tablodaki diğer tüm vektörler arasındaki mesafeyi hesaplar.
  • Son olarak, en yakın 10 eşleşmeyi bulmak için sonuçları mesafeye göre (daha kısa mesafe daha fazla benzerlik anlamına gelir) sıralar.
WITH selected_artwork AS (
  SELECT text_embedding
  FROM `met_art_dataset.artwork_embeddings`
  WHERE object_id = 436535
)
SELECT
  base.object_id,
  base.title,
  base.artist_display_name,
  -- ML.DISTANCE calculates the cosine distance between the two vectors.
  -- A smaller distance means the items are more similar.
  ML.DISTANCE(base.text_embedding, (SELECT text_embedding FROM selected_artwork), 'COSINE') AS similarity_distance
FROM
  `met_art_dataset.artwork_embeddings` AS base, selected_artwork
ORDER BY
  similarity_distance
LIMIT 10;
  1. Sorguyu çalıştırın. Sonuçlarda, en yakın eşleşmeler en üstte olacak şekilde object_id listelenir. Kaynak resim, 0 mesafeyle ilk sırada görünür. Bu, yapay zeka öneri motoruna güç veren temel mantıktır ve bunu tamamen BigQuery'de yalnızca SQL kullanarak oluşturmuşsunuzdur.

6. (İSTEĞE BAĞLI) Demoyu Cloud Shell'de çalıştırma

Bu codelab'deki kavramları hayata geçirmek için klonladığınız depoda basit bir web uygulaması bulunur. Bu isteğe bağlı demo, görsel arama motoruna güç sağlamak için oluşturduğunuz artwork_embeddings tablosunu kullanır. Böylece, yapay zeka destekli önerileri uygulamada görebilirsiniz.

Demoyu Cloud Shell'de çalıştırmak için aşağıdaki adımları uygulayın:

  1. Ortam değişkenlerini ayarlayın: Uygulamayı çalıştırmadan önce PROJECT_ID ve BIGQUERY_DATASET ortam değişkenlerini ayarlamanız gerekir.
export PROJECT_ID=$(gcloud config get-value project)
export BIGQUERY_DATASET=met_art_dataset
export REGION='us-central1'
bq cp bigquery-public-data:the_met.images $PROJECT_ID:met_art_dataset.images
  1. Bağımlılıkları yükleyin ve arka uç sunucusunu başlatın.
cd ~/devrel-demos/data-analytics/dataprep/backend/ && npm install
node server.js
  1. Ön uç uygulamasını çalıştırmak için ikinci bir terminal sekmesine ihtiyacınız vardır. Yeni bir Cloud Shell sekmesi açmak için "+" simgesini tıklayın.

bbc9ecde0ff417f4.png

  1. Şimdi yeni sekmede, bağımlılıkları yüklemek ve ön uç sunucusunu çalıştırmak için aşağıdaki komutu yürütün.
cd ~/devrel-demos/data-analytics/dataprep/frontend/ && npm install
npm run dev
  1. Uygulamayı önizleme: Cloud Shell araç çubuğunda Web Önizlemesi simgesini tıklayın ve 5173 numaralı bağlantı noktasında önizle'yi seçin. Bu işlem, uygulamanın çalıştığı yeni bir tarayıcı sekmesi açar. Artık uygulamayı kullanarak sanat eserlerini arayabilir ve benzerlik arama özelliğini kullanabilirsiniz.

d4dc326a225354c9.png

b9956f2c29af2864.png

  1. Bu görsel demoyu BigQuery SQL düzenleyicide yaptığınız çalışmaya geri bağlamak için arama çubuğuna "Cypresses" (Serviler) yazmayı deneyin. Bu, ML.DISTANCE sorgusunda kullandığınız eserle(object_id=436535) aynıdır. Ardından, sol panelde görünen Serviler resmini tıkladığınızda sonuçları sağ tarafta görürsünüz. Uygulama, en benzer sanat eserlerini göstererek oluşturduğunuz vektör benzerliği aramasının gücünü görsel olarak gösterir.

a030b3ee20c8703d.png

7. Ortamınızı temizleme

Bu codelab'de kullanılan kaynaklar için Google Cloud hesabınızın gelecekte ücretlendirilmesini önlemek istiyorsanız oluşturduğunuz kaynakları silmeniz gerekir.

Hizmet hesabını, BigQuery bağlantısını, GCS Bucket'ı ve BigQuery veri kümesini kaldırmak için Cloud Shell terminalinizde aşağıdaki komutları çalıştırın.

# Re-run these exports if your Cloud Shell session timed out
export PROJECT_ID=$(gcloud config get-value project)
export LOCATION="US"
export GCS_BUCKET_NAME="met-artworks-source-${PROJECT_ID}"
export BQ_CONNECTION_ID="bqml-vertex-connection"

BigQuery bağlantısını ve GCS paketini kaldırma

# Delete the BigQuery connection
bq rm --connection $LOCATION.$BQ_CONNECTION_ID

# Delete the GCS bucket and its contents
gcloud storage rm --recursive gs://$GCS_BUCKET_NAME

BigQuery veri kümesini silme

Son olarak, BigQuery veri kümesini silin. Bu komut geri alınamaz. -f (force) işareti, onay istemeden veri kümesini ve tüm tablolarını kaldırır.

# Manually type this command to confirm you are deleting the correct dataset
bq rm -r -f --dataset $PROJECT_ID:met_art_dataset

8. Tebrikler!

Uçtan uca, yapay zeka destekli bir veri ardışık düzenini başarıyla oluşturdunuz.

Bir GCS paketinde ham CSV dosyasıyla başladınız, karmaşık JSON verilerini almak ve düzleştirmek için BigQuery Data Prep'in az kodlu arayüzünü kullandınız, Gemini modeliyle yüksek kaliteli vektör yerleştirmeleri oluşturmak için güçlü bir BQML uzak modeli oluşturdunuz ve ilgili öğeleri bulmak için bir benzerlik arama sorgusu yürüttünüz.

Artık Google Cloud'da yapay zeka destekli iş akışları oluşturmak için temel kalıba sahipsiniz. Bu kalıpla, ham verileri hızlı ve kolay bir şekilde akıllı uygulamalara dönüştürebilirsiniz.

Sırada ne var?

  • Sonuçlarınızı Looker Studio'da görselleştirme: artwork_embeddings BigQuery tablonuzu doğrudan Looker Studio'ya bağlayın (ücretsizdir). Kullanıcıların bir sanat eseri seçebileceği ve en benzer parçaların görsel galerisini görebileceği etkileşimli bir kontrol paneli oluşturabilirsiniz. Bunun için herhangi bir ön uç kodu yazmanız gerekmez.
  • Planlanmış sorgularla otomasyon: Yerleştirmelerinizi güncel tutmak için karmaşık bir düzenleme aracına ihtiyacınız yoktur. ML.GENERATE_TEXT_EMBEDDING sorgusunu günlük veya haftalık olarak otomatik şekilde yeniden çalıştırmak için BigQuery'nin yerleşik Planlı Sorgular özelliğini kullanın.
  • Gemini KSA ile uygulama oluşturma: İhtiyacınızı düz metin olarak açıklayarak Gemini KSA ile eksiksiz bir uygulama oluşturun. Bu sayede, Python kodunu manuel olarak yazmadan benzerlik aramanız için çalışan bir prototipi hızlıca oluşturabilirsiniz.
  • Belgeleri okuyun: