1. Omówienie
BigQuery to ekonomiczna, w pełni zarządzana analityczna hurtownia danych Google o skali petabajtowej. BigQuery to rozwiązanie bezobsługowe – nie wymaga zarządzania infrastrukturą ani administratora baz danych. Możesz więc skupić się na analizowaniu danych, aby uzyskać przydatne statystyki, używać dobrze znanego języka SQL i korzystać z naszego modelu płatności według wykorzystania.
W tym ćwiczeniu w programowaniu użyjesz bibliotek klienta Google Cloud dla języka Python, aby wysyłać w języku Python zapytania do publicznych zbiorów danych BigQuery.
Czego się nauczysz
- Jak korzystać z Cloud Shell
- Jak włączyć interfejs BigQuery API
- Jak uwierzytelniać żądania do interfejsu API
- Jak zainstalować bibliotekę klienta w Pythonie
- Jak wysyłać zapytania dotyczące dzieł Szekspira
- Jak tworzyć zapytania do zbioru danych GitHub
- Jak dostosować pamięć podręczną i wyświetlić statystyki
Czego potrzebujesz
Ankieta
Jak wykorzystasz ten samouczek?
Jak oceniasz swoje doświadczenia z językiem Python?
Jak oceniasz korzystanie z usług Google Cloud?
2. Konfiguracja i wymagania
Samodzielne konfigurowanie środowiska
- Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub wykorzystaj już istniejący. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.
- Nazwa projektu jest wyświetlaną nazwą uczestników tego projektu. To ciąg znaków, który nie jest używany przez interfejsy API Google i w każdej chwili możesz go zaktualizować.
- Identyfikator projektu musi być unikalny we wszystkich projektach Google Cloud i nie można go zmienić (nie można go zmienić po ustawieniu). Cloud Console automatycznie wygeneruje unikalny ciąg znaków. zwykle nieważne, co ona jest. W większości ćwiczeń w Codelabs musisz odwoływać się do identyfikatora projektu (który zwykle nazywa się
PROJECT_ID
), więc jeśli Ci się nie podoba, wygeneruj kolejny losowy projekt lub wypróbuj swój własny identyfikator i sprawdź, czy jest dostępny. Potem urządzenie jest „zawieszone”. po utworzeniu projektu. - Występuje trzecia wartość – numer projektu – używany przez niektóre interfejsy API. Więcej informacji o wszystkich 3 wartościach znajdziesz w dokumentacji.
- Następnie musisz włączyć płatności w konsoli Cloud, aby móc korzystać z zasobów i interfejsów API Cloud. Ukończenie tego ćwiczenia z programowania nie powinno kosztować zbyt wiele. Aby wyłączyć zasoby, aby nie naliczać opłat po zakończeniu tego samouczka, wykonaj czynności „wyczyść” znajdziesz na końcu tego ćwiczenia. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego o wartości 300 USD.
Uruchamianie Cloud Shell
Google Cloud można obsługiwać zdalnie z laptopa, ale w ramach tego ćwiczenia z programowania wykorzystasz Google Cloud Shell – środowisko wiersza poleceń działające w chmurze.
Aktywowanie Cloud Shell
- W konsoli Cloud kliknij Aktywuj Cloud Shell .
Jeśli dopiero zaczynasz korzystać z Cloud Shell, wyświetli się ekran pośredni (w części strony widocznej po przewinięciu) z opisem tej funkcji. W takim przypadku kliknij Dalej (nie zobaczysz go więcej). Tak wygląda ten jednorazowy ekran:
Uzyskanie dostępu do Cloud Shell i połączenie się z nim powinno zająć tylko kilka chwil.
Ta maszyna wirtualna ma wszystkie potrzebne narzędzia dla programistów. Zawiera stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie zwiększa wydajność sieci i uwierzytelnianie. Większość czynności z tego ćwiczenia z programowania można wykonać w przeglądarce lub na Chromebooku.
Po nawiązaniu połączenia z Cloud Shell powinno pojawić się informacja, że użytkownik jest już uwierzytelniony i że projekt jest już ustawiony na identyfikator Twojego projektu.
- Uruchom to polecenie w Cloud Shell, aby potwierdzić, że jesteś uwierzytelniony:
gcloud auth list
Dane wyjściowe polecenia
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- Uruchom to polecenie w Cloud Shell, aby sprawdzić, czy polecenie gcloud zna Twój projekt:
gcloud config list project
Dane wyjściowe polecenia
[core] project = <PROJECT_ID>
Jeśli tak nie jest, możesz go ustawić za pomocą tego polecenia:
gcloud config set project <PROJECT_ID>
Dane wyjściowe polecenia
Updated property [core/project].
3. Włącz API
Interfejs BigQuery API powinien być domyślnie włączony we wszystkich projektach Google Cloud. Aby to sprawdzić, użyj następującego polecenia w Cloud Shell, aby sprawdzić, czy usługa BigQuery jest wymieniona:
gcloud services list
Powinna Ci się wyświetlić lista BigQuery:
NAME TITLE bigquery.googleapis.com BigQuery API ...
Jeśli interfejs BigQuery API nie jest włączony, możesz go włączyć za pomocą tego polecenia w Cloud Shell:
gcloud services enable bigquery.googleapis.com
4. Uwierzytelnianie żądań do interfejsu API
Aby wysyłać żądania do interfejsu BigQuery API, musisz używać konta usługi. Konto usługi należy do Twojego projektu i jest używane przez bibliotekę klienta Google Cloud Python do wykonywania żądań do interfejsu BigQuery API. Tak jak każde inne konto użytkownika, konto usługi jest reprezentowane przez adres e-mail. W tej sekcji utworzysz konto usługi za pomocą pakietu Cloud SDK, a następnie utworzysz dane logowania, które będziesz potrzebować do uwierzytelnienia jako konto usługi.
Najpierw ustaw zmienną środowiskową PROJECT_ID
:
export PROJECT_ID=$(gcloud config get-value core/project)
Następnie utwórz nowe konto usługi z dostępem do interfejsu BigQuery API, wpisując w tym celu:
gcloud iam service-accounts create my-bigquery-sa \ --display-name "my bigquery service account"
Następnie utwórz dane logowania, których będziesz używać w kodzie Pythona do logowania się na Twoje nowe konto usługi. Utwórz te dane logowania i zapisz je w pliku JSON ~/key.json
, korzystając z następującego polecenia:
gcloud iam service-accounts keys create ~/key.json \ --iam-account my-bigquery-sa@${PROJECT_ID}.iam.gserviceaccount.com
Na koniec ustaw zmienną środowiskową GOOGLE_APPLICATION_CREDENTIALS
używaną przez bibliotekę klienta BigQuery w języku Python (opisaną w następnym kroku), aby znaleźć Twoje dane logowania. Zmienna środowiskowa powinna zawierać pełną ścieżkę do utworzonego przez Ciebie pliku JSON z danymi logowania za pomocą polecenia:
export GOOGLE_APPLICATION_CREDENTIALS=~/key.json
Dowiedz się więcej o uwierzytelnianiem interfejsu BigQuery API.
5. Skonfiguruj kontrolę dostępu
BigQuery używa Identity and Access Management (IAM) do zarządzania dostępem do zasobów. BigQuery ma szereg wstępnie zdefiniowanych ról (użytkownik, dataOwner, dataViewer itp.), które możesz przypisać do konta usługi utworzonego w poprzednim kroku. Więcej informacji o kontroli dostępu znajdziesz w dokumentacji BigQuery.
Aby móc wysyłać zapytania do publicznych zbiorów danych, musisz upewnić się, że konto usługi ma przypisaną co najmniej rolę roles/bigquery.user
. Aby przypisać rolę użytkownika do konta usługi, uruchom w Cloud Shell to polecenie:
gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member "serviceAccount:my-bigquery-sa@${PROJECT_ID}.iam.gserviceaccount.com" \ --role "roles/bigquery.user"
Aby sprawdzić, czy konto usługi ma przypisaną rolę użytkownika, możesz uruchomić to polecenie:
gcloud projects get-iam-policy $PROJECT_ID
Strona powinna wyglądać tak:
bindings: - members: - serviceAccount:my-bigquery-sa@<PROJECT_ID>.iam.gserviceaccount.com role: roles/bigquery.user ...
6. Instalowanie biblioteki klienta
Zainstaluj bibliotekę klienta BigQuery w Pythonie:
pip3 install --user --upgrade google-cloud-bigquery
Teraz możesz pisać kod przy użyciu interfejsu BigQuery API.
7. Przeglądaj dzieła Szekspira
Publiczny zbiór danych to dowolny zbiór danych przechowywany w BigQuery i udostępniony publicznie. Istnieje wiele innych publicznych zbiorów danych, na których możesz wykonywać zapytania. Niektóre zbiory danych są hostowane przez Google, ale większość z nich świadczą usługi zewnętrzne. Więcej informacji znajdziesz na stronie Publiczne zbiory danych.
Oprócz publicznych zbiorów danych BigQuery udostępnia ograniczoną liczbę przykładowych tabel, do których można wysyłać zapytania. Te tabele są zawarte w zbiorze danych bigquery-public-data:samples
. Tabela shakespeare
w zbiorze danych samples
zawiera indeks słów dzieł Szekspira. Podaje, ile razy dane słowo występuje w każdym korpusie.
W tym kroku wyślesz zapytanie do tabeli shakespeare
.
Najpierw utwórz w Cloud Shell prostą aplikację w Pythonie, której użyjesz do uruchomienia przykładowych interfejsów Translation API.
mkdir bigquery-demo cd bigquery-demo touch app.py
Otwórz edytor kodu w prawym górnym rogu Cloud Shell:
Przejdź do pliku app.py
znajdującego się w folderze bigquery-demo
i zastąp kod poniższym kodem.
from google.cloud import bigquery
client = bigquery.Client()
query = """
SELECT corpus AS title, COUNT(word) AS unique_words
FROM `bigquery-public-data.samples.shakespeare`
GROUP BY title
ORDER BY unique_words
DESC LIMIT 10
"""
results = client.query(query)
for row in results:
title = row['title']
unique_words = row['unique_words']
print(f'{title:<20} | {unique_words}')
Poświęć chwilę na zapoznanie się z kodem i zobacz, jak są wysyłane zapytania do tabeli.
Uruchom aplikację w Cloud Shell:
python3 app.py
Powinna pojawić się lista słów i ich wystąpień:
hamlet | 5318 kinghenryv | 5104 cymbeline | 4875 troilusandcressida | 4795 kinglear | 4784 kingrichardiii | 4713 2kinghenryvi | 4683 coriolanus | 4653 2kinghenryiv | 4605 antonyandcleopatra | 4582
8. Tworzenie zapytania do zbioru danych GitHub
Aby lepiej poznać BigQuery, wyślesz zapytanie do publicznego zbioru danych GitHub. Najpopularniejsze komunikaty o zatwierdzeniach znajdziesz na GitHubie. Będziesz też używać konsoli internetowej BigQuery do wyświetlania podglądu i uruchamiania zapytań doraźnych.
Aby zobaczyć, jak wyglądają dane, otwórz zbiór danych GitHub w interfejsie internetowym BigQuery:
Kliknij przycisk Podgląd, aby zobaczyć, jak wyglądają dane:
Przejdź do pliku app.py
znajdującego się w folderze bigquery_demo
i zastąp kod poniższym kodem.
from google.cloud import bigquery
client = bigquery.Client()
query = """
SELECT subject AS subject, COUNT(*) AS num_duplicates
FROM bigquery-public-data.github_repos.commits
GROUP BY subject
ORDER BY num_duplicates
DESC LIMIT 10
"""
results = client.query(query)
for row in results:
subject = row['subject']
num_duplicates = row['num_duplicates']
print(f'{subject:<20} | {num_duplicates:>9,}')
Poświęć chwilę na zapoznanie się z kodem i zobacz, jak do tabeli są wysyłane zapytania dotyczące najczęstszych komunikatów zatwierdzenia.
Uruchom aplikację w Cloud Shell:
python3 app.py
Powinna wyświetlić się lista komunikatów zatwierdzenia wraz z ich wystąpieniami:
Update README.md | 1,685,515 Initial commit | 1,577,543 update | 211,017 | 155,280 Create README.md | 153,711 Add files via upload | 152,354 initial commit | 145,224 first commit | 110,314 Update index.html | 91,893 Update README | 88,862
9. Pamięć podręczna i statystyki
BigQuery zapisuje wyniki zapytań w pamięci podręcznej. Dzięki temu wykonywanie kolejnych zapytań trwa krócej. Możesz wyłączyć buforowanie za pomocą opcji zapytań. BigQuery śledzi również statystyki dotyczące zapytań, takie jak czas utworzenia, czas zakończenia czy łączna liczba przetworzonych bajtów.
W tym kroku wyłączysz także zapisywanie w pamięci podręcznej i wyświetlanie statystyk dotyczących zapytań.
Przejdź do pliku app.py
znajdującego się w folderze bigquery_demo
i zastąp kod poniższym kodem.
from google.cloud import bigquery
client = bigquery.Client()
query = """
SELECT subject AS subject, COUNT(*) AS num_duplicates
FROM bigquery-public-data.github_repos.commits
GROUP BY subject
ORDER BY num_duplicates
DESC LIMIT 10
"""
job_config = bigquery.job.QueryJobConfig(use_query_cache=False)
results = client.query(query, job_config=job_config)
for row in results:
subject = row['subject']
num_duplicates = row['num_duplicates']
print(f'{subject:<20} | {num_duplicates:>9,}')
print('-'*60)
print(f'Created: {results.created}')
print(f'Ended: {results.ended}')
print(f'Bytes: {results.total_bytes_processed:,}')
Kilka uwag na temat kodu. Po pierwsze, buforowanie jest wyłączone przez wprowadzenie zasady QueryJobConfig
i ustawienie use_query_cache
na wartość Fałsz. Zdobyliśmy też dostęp do statystyk zapytania z obiektu zadania.
Uruchom aplikację w Cloud Shell:
python3 app.py
Podobnie jak wcześniej powinna wyświetlić się lista komunikatów zatwierdzenia wraz z ich wystąpieniami. Dodatkowo na końcu powinny być widoczne statystyki dotyczące zapytania:
Update README.md | 1,685,515 Initial commit | 1,577,543 update | 211,017 | 155,280 Create README.md | 153,711 Add files via upload | 152,354 initial commit | 145,224 first commit | 110,314 Update index.html | 91,893 Update README | 88,862 ------------------------------------------------------------ Created: 2020-04-03 13:30:08.801000+00:00 Ended: 2020-04-03 13:30:15.334000+00:00 Bytes: 2,868,251,894
10. Wczytywanie danych do BigQuery
Jeśli chcesz tworzyć zapytania dotyczące własnych danych, musisz wczytać je do BigQuery. BigQuery obsługuje wczytywanie danych z wielu źródeł, takich jak Cloud Storage, inne usługi Google i inne możliwe do odczytania źródła. Możesz nawet przesyłać strumieniowo dane za pomocą wstawienia strumieniowej. Więcej informacji znajdziesz na stronie Wczytywanie danych do BigQuery.
W tym kroku wczytasz do tabeli BigQuery plik JSON zapisany w Cloud Storage. Plik JSON znajduje się pod adresem gs://cloud-samples-data/bigquery/us-states/us-states.json
Jeśli chcesz poznać zawartość pliku JSON, możesz użyć narzędzia wiersza poleceń gsutil
, aby pobrać go do Cloud Shell:
gsutil cp gs://cloud-samples-data/bigquery/us-states/us-states.json .
Widać, że zawiera listę stanów w USA, a każdy z nich to dokument JSON w osobnym wierszu:
head us-states.json
{"name": "Alabama", "post_abbr": "AL"} {"name": "Alaska", "post_abbr": "AK"} ...
Aby wczytać ten plik JSON do BigQuery, przejdź do pliku app.py
w folderze bigquery_demo
i zastąp go poniższym kodem.
from google.cloud import bigquery
client = bigquery.Client()
gcs_uri = 'gs://cloud-samples-data/bigquery/us-states/us-states.json'
dataset = client.create_dataset('us_states_dataset')
table = dataset.table('us_states_table')
job_config = bigquery.job.LoadJobConfig()
job_config.schema = [
bigquery.SchemaField('name', 'STRING'),
bigquery.SchemaField('post_abbr', 'STRING'),
]
job_config.source_format = bigquery.SourceFormat.NEWLINE_DELIMITED_JSON
load_job = client.load_table_from_uri(gcs_uri, table, job_config=job_config)
print('JSON file loaded to BigQuery')
Poświęć chwilę na zbadanie, jak kod wczytuje plik JSON i tworzy tabelę ze schematem w zbiorze danych.
Uruchom aplikację w Cloud Shell:
python3 app.py
Zbiór danych i tabela zostaną utworzone w BigQuery.
Aby sprawdzić, czy zbiór danych został utworzony, otwórz konsolę BigQuery. Powinny wyświetlić się nowe zbiory danych i tabela. Przejdź na kartę podglądu w tabeli, aby wyświetlić dane:
11. Gratulacje!
Wiesz już, jak korzystać z BigQuery w Pythonie.
Czyszczenie danych
Aby uniknąć obciążenia konta Google Cloud opłatami za zasoby zużyte w tym samouczku:
- W konsoli Cloud otwórz stronę Zarządzanie zasobami.
- Na liście projektów wybierz swój projekt i kliknij Usuń.
- W oknie wpisz identyfikator projektu i kliknij Wyłącz, aby usunąć projekt.
Więcej informacji
- Google BigQuery: https://cloud.google.com/bigquery/docs/,
- Python w Google Cloud: https://cloud.google.com/python/
- Biblioteki klienta Cloud dla Pythona: https://googleapis.github.io/google-cloud-python/
Licencja
To zadanie jest licencjonowane na podstawie ogólnej licencji Creative Commons Attribution 2.0.