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 veritabanı yöneticisine veya altyapıya ihtiyaç duymadan terabaytlarca veriyi sorgulayabilirsiniz. BigQuery, bildiğiniz SQL'i ve yalnızca kullandığınız kadar ödeme yapmanızı sağlayan bir faturalandırma modelini kullanır. BigQuery, anlamlı bulgulara ulaşabilmeniz için veri analizine odaklanmanıza olanak tanır. Bu codelab'de, yerel bir 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 hesap oluşturmanız gerekir.

  1. Google Cloud Console'da oturum açın ve BigQuery'ye gidin. Ayrıca, tarayıcınıza aşağıdaki URL'yi girerek BigQuery web kullanıcı arayüzünü doğrudan açabilirsiniz.
https://console.cloud.google.com/bigquery
  1. Hizmet şartlarını kabul edin.
  2. BigQuery'yi kullanabilmek için 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 projelerinde benzersiz bir addır. Bu codelab'in ilerleyen kısımlarında PROJECT_ID olarak adlandırılacaktır.

Bu codelab'de, BigQuery korumalı alan sınırları dahilindeki BigQuery kaynakları kullanılır. Faturalandırma hesabı gerekmez. Daha sonra korumalı alan sınırlarını kaldırmak isterseniz Google Cloud ücretsiz denemesine 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 'i 4292cbf4971c9786.png 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ı) gösterilir. Bu durumda Devam'ı tıkladığınızda bu ekranı bir daha görmezsiniz. Bu tek seferlik ekran aşağıdaki gibi görünür:

70f315d7b402b476.png

Cloud Shell'in temel hazırlığı ve bağlanması yalnızca birkaç dakikanızı alır.

fbe3a0674c982259.png

Bu sanal makine, ihtiyaç duyduğunuz tüm geliştirme araçlarını içerir. 5 GB boyutunda kalıcı bir ana dizin bulunur ve Google Cloud'da çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde güçlenir. Bu codelab'deki çalışmalarınızın neredeyse tamamını yalnızca bir tarayıcı veya Chromebook'unuzla yapabilirsiniz.

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. Kimliğinizin doğrulandığını onaylamak için Cloud Shell'de şu 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 projeniz hakkında bilgi sahibi olduğunu onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud config list project

Komut çıkışı

[core]
project = <PROJECT_ID>

Değilse şu 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, tabloların bir araya getirilmiş halidir. Bir veri kümesindeki tüm tablolar aynı veri konumunda depolanır. Ayrıca, bir veri kümesine ve tablolarına erişimi sınırlamak için özel erişim kontrolleri 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 dahil olmak üzere çeşitli veri biçimlerindeki verileri yükleyebilir. Basitlik için CSV kullanacaksınız.

CSV dosyası oluşturma

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

touch customer_transactions.csv

Cloud Shell'de cloudshell edit komutunu çalıştırarak CSV dosyasını kod düzenleyicide açın. Bu işlem, kod düzenleyici ve Cloud Shell paneli içeren yeni bir tarayıcı penceresi açar.

cloudshell edit customer_transactions.csv

Kod düzenleyicide, BigQuery'ye yüklenecek virgülle ayrılmış bazı 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

Dosya > Düzenle'yi tıklayarak CSV dosyasını kaydedin.

5. Verileri yükle

CSV dosyanızı bir 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, CSV dosyasındaki ilk satırı başlık satırı olduğu için atlar.
  • Bq_load_codelab.customer_transactions—the first positional argument—, verilerin hangi tabloya yükleneceğini tanımlar.
  • ./customer_transactions.csv (ikinci konumsal bağımsız değişken), hangi dosyanın yükleneceğini tanımlar. Yerel dosyalara ek olarak, bq load komutu gs://my_bucket/path/to/file URIs ile Cloud Storage'daki dosyaları da yükleyebilir.
  • JSON şema dosyasında veya virgülle ayrılmış liste olarak tanımlanabilen bir şema. (Basitlik 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ı (A sayısal sütun, verileri ondalık biçimde depolar. Bu, parasal değerler için kullanışlı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ünü, bq komutunu veya API'yi kullanarak verilerinizi sorgulayabilirsiniz. Sorgularınız, okuma izninizin olduğu herhangi bir veri kümesiyle (veya aynı konumda olduğu sürece veri kümeleriyle) verilerinizi birleştirebilir.

Veri kümenizi ABD posta kodları veri kümesiyle birleştiren ve işlemleri ABD eyaletine göre 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 komut, aşağıdaki gibi bir çıkış vermelidir:

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ümesi ve özel veri kümenizi kullanıyordu. Aynı sorgunun yorumlu 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 tabloları kaldırmak için -r işaretini kullanın.

bq rm -r bq_load_codelab

8. Tebrikler!

BigQuery'ye bir tablo yükleyip sorguladınız.

Kapsamınız

  • BigQuery ile etkileşim kurmak için bq komut satırı aracını kullanma
  • BigQuery sorgusuyla verilerinizi ve herkese açık bir veri kümesini birleştirme.

Sırada ne var?

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