BigQuery için bq komut satırı aracıyla veri yükleme ve sorgulama

1. Giriş

BigQuery; Google'ın tümüyle yönetilen, NoOps özellikli, düşük maliyetli analitik veritabanıdır. BigQuery ile terabaytlarca veriyi veritabanı yöneticisi veya altyapı olmadan sorgulayabilirsiniz. BigQuery, aşina olduğunuz SQL ve yalnızca kullandığınız kadar ödeyin. BigQuery, anlamlı bulgulara ulaşabilmeniz için veri analizine odaklanmanıza olanak tanır. Bu codelab'de yerel CSV dosyasını yeni bir BigQuery tablosuna yüklemek için bq komut satırı aracını kullanacaksınız.

Neler öğreneceksiniz?

  • BigQuery için bq komut satırı aracını kullanma
  • Yerel veri dosyalarını BigQuery tablosuna yükleme

Gerekenler

2. Hazırlanın

BigQuery'yi etkinleştirme

Google Hesabınız yoksa bir hesap oluşturmanız gerekir.

  1. Google Cloud Console'da oturum açın ve BigQuery'ye gidin. BigQuery web kullanıcı arayüzünü, aşağıdaki URL'yi tarayıcınıza girerek de doğrudan açabilirsiniz.
https://console.cloud.google.com/bigquery
  1. Hizmet Şartları'nı kabul edin.
  2. BigQuery'yi kullanabilmek için önce bir proje oluşturmanız gerekir. Yeni projenizi oluşturmak için talimatları uygulayın.

Bir proje adı seçin ve proje kimliğini not edin. 1884405a64ce5765.png.

Proje kimliği, tüm Google Cloud projelerindeki benzersiz bir addır. Bu kod laboratuvarın ilerleyen bölümlerinde PROJECT_ID olarak adlandırılacaktır.

Bu codelab'de, BigQuery korumalı alanı sınırları ile ilişkili BigQuery kaynakları kullanılır. Faturalandırma hesabı gerekmez. Daha sonra korumalı alan sınırlarını kaldırmak isterseniz Google Cloud ücretsiz deneme sürümüne kaydolarak bir faturalandırma hesabı ekleyebilirsiniz.

Cloud Shell

Google Cloud'da çalışan bir komut satırı ortamı olan Cloud Shell'i kullanacaksınız.

Cloud Shell'i etkinleştirme

  1. Cloud Console'da, Cloud Shell'i etkinleştir 4292cbf4971c9786.png simgesini tıklayın.

bce75f34b2c53987.png

Cloud Shell'i daha önce hiç başlatmadıysanız ne olduğunu açıklayan bir ara ekran (ekranın alt kısmında) gösterilir. Bu durumda Devam'ı tıklayın (bunu bir daha görmezsiniz). Tek seferlik ekran şöyle görünür:

70f315d7b402b476.png

Temel hazırlık ve Cloud Shell'e bağlanmak yalnızca birkaç dakika sürer.

fbe3a0674c982259.png

İhtiyaç duyduğunuz tüm geliştirme araçları bu sanal makinede yüklüdür. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud'da çalışarak ağ performansını ve kimlik doğrulamasını büyük ölçüde iyileştirir. Bu codelab'deki çalışmalarınızın tamamı olmasa bile büyük bir kısmı yalnızca bir tarayıcı veya Chromebook'unuzla yapılabilir.

Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin proje kimliğinize ayarlandığını görürsünüz.

  1. Kimlik doğrulamanızın tamamlandığını onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud auth list

Komut çıkışı

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. gcloud komutunun projenizi bildiğini onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud config list project

Komut çıkışı

[core]
project = <PROJECT_ID>

Doğru değilse aşağıdaki komutla ayarlayabilirsiniz:

gcloud config set project <PROJECT_ID>

Komut çıkışı

Updated property [core/project].

3. Veri kümesi oluşturma

Tablolarınızı içerecek bir veri kümesi oluşturun.

Veri kümesi nedir?

BigQuery veri kümesi, tablo koleksiyonudur. Bir veri kümesindeki tüm tablolar aynı veri konumunda depolanır. Bir veri kümesi ve tablolarına erişimi sınırlamak için özel erişim denetimleri de ekleyebilirsiniz.

Veri kümesi oluşturma

Cloud Shell'de "bq_load_codelab" adlı bir veri kümesi oluşturmak için bq mk komutunu kullanın.

bq mk bq_load_codelab

Veri kümesi özelliklerini görüntüleme

bq show komutuyla veri kümesinin özelliklerini görüntüleyerek veri kümesini oluşturduğunuzu doğrulayın.

bq show bq_load_codelab

Şuna benzer bir çıkış alırsınız:

Dataset my-project:bq_load_codelab

   Last modified           ACLs          Labels
 ----------------- -------------------- --------
  15 Jun 14:12:49   Owners:
                      projectOwners,
                      your-email@example.com
                    Writers:
                      projectWriters
                    Readers:
                      projectReaders

4. Veri dosyasını oluşturma

BigQuery; yeni satırlarla ayrılmış JSON, Avro ve CSV gibi çeşitli veri biçimlerinden veri yükleyebilir. Kolaylık sağlaması için CSV dosyası kullanacaksınız.

CSV dosyası oluşturma

Cloud Shell'de boş bir CSV dosyası oluşturun.

touch customer_transactions.csv

Cloud Shell düzenleme komutunu çalıştırarak CSV dosyasını Cloud Shell'deki kod düzenleyicide açın. Bu komut, kod düzenleyici ve Cloud Shell paneliyle yeni bir tarayıcı penceresi açar.

cloudshell edit customer_transactions.csv

Kod düzenleyicide, BigQuery'ye yüklemek için virgülle ayrılmış değerler girin.

ID,Zipcode,Timestamp,Amount,Feedback,SKU
c123,78757,2018-02-14 17:01:39Z,1.20,4.7,he4rt5
c456,10012,2018-03-14 15:09:26Z,53.60,3.1,ppiieee
c123,78741,2018-04-01 05:59:47Z,5.98,2.0,ch0c0

CSV dosyasını kaydetmek için Dosya > Düzenle'ye dokunun.

5. Verileri yükle

CSV dosyanızı BigQuery tablosuna yüklemek için bq load komutunu kullanın.

bq load \
    --source_format=CSV \
    --skip_leading_rows=1 \
    bq_load_codelab.customer_transactions \
    ./customer_transactions.csv \
    id:string,zip:string,ttime:timestamp,amount:numeric,fdbk:float,sku:string

Aşağıdaki seçenekleri kullandınız:

  • --source_format=CSV, veri dosyasını ayrıştırırken CSV veri biçimini kullanır.
  • --skip_leading_rows=1, başlık satırı olduğu için CSV dosyasındaki ilk satırı atlar.
  • Bq_load_codelab.customer_transactions—the first positional argument—, verilerin hangi tabloya yüklenmesi gerektiğini tanımlar.
  • ./customer_transactions.csv (ikinci konum bağımsız değişkeni), hangi dosyanın yükleneceğini tanımlar. bq load komutu, yerel dosyalara ek olarak gs://my_bucket/path/to/file URIs ile Cloud Storage'dan dosya da yükleyebilir.
  • JSON şema dosyasında veya virgülle ayrılmış liste olarak tanımlanabilen bir şema. (Basit olması için virgülle ayrılmış bir liste kullandınız.)

customer_transactions tablosunda aşağıdaki şemayı kullandınız:

  • Id:string: Müşteri tanımlayıcısı
  • Zip:string: ABD posta kodu
  • Ttime:timestamp: İşlemin gerçekleştiği tarih ve saat
  • Amount:numeric: Bir işlemin tutarı (sayısal sütun verileri ondalık biçimde depolar ve bu, parasal değerler için yararlıdır.)
  • Fdbk:float: İşlemle ilgili geri bildirim anketinden alınan puan
  • Sku:string: Satın alınan öğenin tanımlayıcısı

Tablo ayrıntılarını alma

Tablo özelliklerini göstererek tablonun yüklendiğini doğrulayın.

bq show bq_load_codelab.customer_transactions

Çıkış:

Table my-project:bq_load_codelab.customer_transactions

   Last modified          Schema          Total Rows   Total Bytes
 ----------------- --------------------- ------------ -------------
  15 Jun 15:13:55   |- id: string         3            159
                    |- zip: string
                    |- ttime: timestamp
                    |- amount: numeric
                    |- fdbk: float
                    |- sku: string

6. Verileri sorgulama

Verileriniz yüklendiğine göre BigQuery web kullanıcı arayüzü, bq komutu veya API'yi kullanarak verilerinizi sorgulayabilirsiniz. Sorgularınız, verilerinizi okuma izninizin olduğu herhangi bir veri kümesiyle (veya veri kümesiyle aynı konumda bulundukları sürece) birleştirebilir.

Veri kümenizi ABD posta kodları veri kümesi ile birleştiren ve ABD eyaletine göre işlemleri toplayan standart bir SQL sorgusu çalıştırın. Sorguyu yürütmek için bq query komutunu kullanın.

bq query --nouse_legacy_sql '
SELECT SUM(c.amount) AS amount_total, z.state_code AS state_code
FROM `bq_load_codelab.customer_transactions` c
JOIN `bigquery-public-data.utility_us.zipcode_area` z
ON c.zip = z.zipcode
GROUP BY state_code
'

Bu komutun çıkışı şu şekilde olmalıdır:

Waiting on bqjob_r26...05a15b38_1 ... (1s) Current status: DONE   
+--------------+------------+
| amount_total | state_code |
+--------------+------------+
|         53.6 | NY         |
|         7.18 | TX         |
+--------------+------------+

Çalıştırdığınız sorgu, herkese açık bir veri kümesini ve gizli veri kümenizi kullandı. Aynı sorgunun yorumlanmış bu sürümünü okuyarak daha fazla bilgi edinin:

#standardSQL
SELECT
  /* Total of all transactions in the state. */
  SUM(c.amount) AS amount_total,

  /* State corresponding to the transaction's zipcode. */
  z.state_code AS state_code

/* Query the table you just constructed.
 * Note: If you omit the project from the table ID,
 *       the dataset is read from your project. */
FROM `bq_load_codelab.customer_transactions` c

/* Join the table to the zipcode public dataset. */
JOIN `bigquery-public-data.utility_us.zipcode_area` z

/* Find the state corresponding to the transaction's zipcode. */
ON c.zip = z.zipcode

/* Group over all transactions by state. */
GROUP BY state_code

7. Temizleme

bq rm komutuyla oluşturduğunuz veri kümesini silin. İçerdiği tüm tabloları kaldırmak için -r işaretini kullanın.

bq rm -r bq_load_codelab

8. Tebrikler!

BigQuery'ye bir tablo yüklediniz ve tabloyu sorguladınız.

İşlediğiniz konular

  • BigQuery ile etkileşime geçmek için bq komut satırı aracını kullanma.
  • Verilerinizi ve herkese açık veri kümesini BigQuery sorgusu ile birleştirme.

Sırada ne var?

Aşağıdaki konular hakkında daha fazla bilgi edinin: