Wczytywanie danych i wykonywanie na nich zapytań za pomocą narzędzia wiersza poleceń bq dla BigQuery

1. Wprowadzenie

BigQuery to ekonomiczna, w pełni zarządzana analityczna baza danych Google typu NoOps. Z BigQuery możesz przeszukiwać terabajty danych bez konieczności zarządzania infrastrukturą czy wyznaczania administratora bazy danych. BigQuery korzysta ze znanego języka SQL i modelu płatności według wykorzystania. Pracując w BigQuery, możesz skoncentrować się na analizowaniu danych i wyciąganiu z nich znaczących wniosków. W tym module dowiesz się, jak za pomocą narzędzia wiersza poleceń bq wczytać lokalny plik CSV do nowej tabeli BigQuery.

Czego się nauczysz

  • Jak korzystać z narzędzia wiersza poleceń bq w BigQuery
  • Wczytywanie lokalnych plików danych do tabeli BigQuery

Czego potrzebujesz

2. Konfiguracja

Włączanie BigQuery

Jeśli nie masz jeszcze konta Google, musisz je utworzyć.

  1. Zaloguj się w konsoli Google Cloud i otwórz BigQuery. Możesz też otworzyć internetowy interfejs BigQuery bezpośrednio, wpisując w przeglądarce ten adres URL:
https://console.cloud.google.com/bigquery
  1. Zaakceptuj Warunki korzystania z usługi.
  2. Zanim zaczniesz korzystać z BigQuery, musisz utworzyć projekt. Postępuj zgodnie z instrukcjami, aby utworzyć nowy projekt.

Wybierz nazwę projektu i zanotuj identyfikator projektu. 1884405a64ce5765.png

Identyfikator projektu to unikalna nazwa w ramach wszystkich projektów Google Cloud. W dalszej części tego laboratorium będzie on nazywany PROJECT_ID.

W tym module wykorzystywane są zasoby BigQuery w ramach limitów piaskownicy BigQuery. Konto rozliczeniowe nie jest wymagane. Jeśli później zechcesz usunąć limity piaskownicy, możesz dodać konto rozliczeniowe, rejestrując się w bezpłatnym okresie próbnym Google Cloud.

Cloud Shell

Będziesz używać Cloud Shell, czyli środowiska wiersza poleceń działającego w Google Cloud.

Aktywowanie Cloud Shell

  1. W konsoli Cloud kliknij Aktywuj Cloud Shell 4292cbf4971c9786.png.

bce75f34b2c53987.png

Jeśli uruchamiasz Cloud Shell po raz pierwszy, zobaczysz ekran pośredni (część strony widoczna po przewinięciu) z opisem tego środowiska. W takim przypadku kliknij Dalej, a ten ekran nie będzie się już wyświetlać. Ten wyświetlany jednorazowo ekran wygląda tak:

70f315d7b402b476.png

Uzyskanie dostępu do środowiska Cloud Shell i połączenie się z nim powinno zająć tylko kilka chwil.

fbe3a0674c982259.png

Ta maszyna wirtualna zawiera wszystkie potrzebne narzędzia dla programistów. Zawiera również stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie zwiększa wydajność sieci i usprawnia proces uwierzytelniania. Większość zadań w tym module, a być może wszystkie, możesz wykonać w przeglądarce lub na Chromebooku.

Po połączeniu z Cloud Shell zobaczysz, że uwierzytelnianie zostało już przeprowadzone, a projekt jest już ustawiony na Twój identyfikator projektu.

  1. Aby potwierdzić, że uwierzytelnianie zostało przeprowadzone, uruchom w Cloud Shell to polecenie:
gcloud auth list

Wynik polecenia

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

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Aby potwierdzić, że polecenie gcloud zna Twój projekt, uruchom w Cloud Shell to polecenie:
gcloud config list project

Wynik polecenia

[core]
project = <PROJECT_ID>

Jeśli nie, możesz go ustawić za pomocą tego polecenia:

gcloud config set project <PROJECT_ID>

Wynik polecenia

Updated property [core/project].

3. Tworzenie zbioru danych

Utwórz zbiór danych, który będzie zawierać tabele.

Co to jest zbiór danych?

Zbiór danych BigQuery to zbiór tabel. Wszystkie tabele w zbiorze danych są przechowywane w tej samej lokalizacji danych. Możesz też dołączyć niestandardowe ustawienia kontroli dostępu, aby ograniczyć dostęp do zbioru danych i jego tabel.

Tworzenie zbioru danych

W Cloud Shell użyj polecenia bq mk, aby utworzyć zbiór danych o nazwie „bq_load_codelab”.

bq mk bq_load_codelab

Wyświetlanie właściwości zbioru danych

Sprawdź, czy zbiór danych został utworzony, wyświetlając jego właściwości za pomocą polecenia bq show.

bq show bq_load_codelab

Zostaną wyświetlone dane wyjściowe podobne do tych:

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. Tworzenie pliku danych

BigQuery może wczytywać dane w kilku formatach, w tym JSON rozdzielany znakiem nowej linii, AvroCSV. Dla uproszczenia użyjesz pliku CSV.

Tworzenie pliku CSV

W Cloud Shell utwórz pusty plik CSV.

touch customer_transactions.csv

Otwórz plik CSV w edytorze kodu w Cloud Shell, uruchamiając polecenie cloudshell edit. Spowoduje to otwarcie nowego okna przeglądarki z edytorem kodu i panelem Cloud Shell.

cloudshell edit customer_transactions.csv

W edytorze kodu wpisz wartości rozdzielone przecinkami, które chcesz wczytać do BigQuery.

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

Aby zapisać plik CSV, kliknij Plik > Edytuj.

5. Wczytaj dane

Użyj polecenia bq load, aby wczytać plik CSV do tabeli BigQuery.

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

Użyto tych opcji:

  • --source_format=CSV podczas analizowania pliku danych używa formatu danych CSV.
  • --skip_leading_rows=1 pomija pierwszy wiersz w pliku CSV, ponieważ jest to wiersz nagłówka.
  • Bq_load_codelab.customer_transactions—the first positional argument— określa, do której tabeli mają zostać wczytane dane.
  • ./customer_transactions.csv – drugi argument pozycyjny – określa, który plik ma zostać wczytany. Oprócz plików lokalnych polecenie bq load może wczytywać pliki z Cloud Storage za pomocą gs://my_bucket/path/to/file URIs.
  • Schemat, który można zdefiniować w pliku schematu JSON lub jako listę rozdzieloną przecinkami. (Dla uproszczenia użyto listy rozdzielonej przecinkami).

W tabeli customer_transactions używasz tego schematu:

  • Id:string: identyfikator klienta
  • Zip:string: kod pocztowy w Stanach Zjednoczonych.
  • Ttime:timestamp: data i godzina transakcji.
  • Amount:numeric: kwota transakcji (kolumna liczbowa przechowuje dane w formie dziesiętnej, co jest przydatne w przypadku wartości pieniężnych).
  • Fdbk:float: ocena z ankiety opinii o transakcji.
  • Sku:string: identyfikator kupionego produktu

Sprawdzanie szczegółów tabeli

Sprawdź, czy tabela została wczytana, wyświetlając jej właściwości.

bq show bq_load_codelab.customer_transactions

Dane wyjściowe:

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. Wysyłanie zapytania dotyczącego danych

Po wczytaniu danych możesz wysyłać do nich zapytania za pomocą interfejsu internetowego BigQuery, polecenia bq lub interfejsu API. Zapytania mogą łączyć Twoje dane z dowolnym zbiorem danych (lub zbiorami danych, o ile znajdują się w tej samej lokalizacji), do którego masz uprawnienia do odczytu.

Uruchom standardową wersję zapytania SQL, które złącza Twój zbiór danych ze zbiorem danych kodów pocztowych w USA i sumuje transakcje według stanu w USA. Aby wykonać zapytanie, użyj polecenia bq query.

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
'

To polecenie powinno wyświetlić dane wyjściowe podobne do tych:

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

Wykonane zapytanie korzystało z publicznego i prywatnego zbioru danych. Więcej informacji znajdziesz w tej wersji zapytania z komentarzami:

#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. Czyszczenie danych

Usuń zbiór danych utworzony za pomocą polecenia bq rm. Użyj flagi -r, aby usunąć wszystkie tabele, które zawiera.

bq rm -r bq_load_codelab

8. Gratulacje!

Przesłaliśmy tabelę do BigQuery i wykonaliśmy na niej zapytanie.

Omówione tematy

  • Korzystanie z narzędzia wiersza poleceń bq do interakcji z BigQuery.
  • łączenie danych i publicznego zbioru danych za pomocą zapytania BigQuery;

Co dalej?

Więcej informacji: