Informacje o tym ćwiczeniu (w Codelabs)
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 .NET, aby wysyłać zapytania do publicznych zbiorów danych BigQuery w języku C#.
Czego się nauczysz
- Jak używać Cloud Shell
- Jak włączyć interfejs BigQuery API
- Jak uwierzytelniać żądania do interfejsu API
- Jak zainstalować bibliotekę klienta Google Cloud dla języka C#
- 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 C#?
Jak oceniasz swoje wrażenia z korzystania z usług Google Cloud Platform?
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. W każdej chwili możesz ją zaktualizować.
- Identyfikator projektu jest unikalny we wszystkich projektach Google Cloud i nie można go zmienić (po jego ustawieniu nie można go zmienić). Cloud Console automatycznie wygeneruje unikalny ciąg znaków. zwykle nieważne, co ona jest. W większości ćwiczeń w Codelabs musisz podać swój identyfikator projektu (zwykle identyfikowany jako
PROJECT_ID
). Jeśli nie podoba Ci się wygenerowany identyfikator, możesz wygenerować kolejny losowy. Możesz też spróbować własnych sił i sprawdzić, czy jest dostępna. Po wykonaniu tej czynności nie można jej już zmienić. Pozostanie ona przez cały czas trwania projektu. - Jest jeszcze trzecia wartość, numer projektu, z którego korzystają niektóre interfejsy API. Więcej informacji o wszystkich 3 wartościach znajdziesz w dokumentacji.
- Następnie musisz włączyć płatności w Cloud Console, aby korzystać z zasobów Cloud/interfejsów API. Ukończenie tego ćwiczenia z programowania nic nie kosztuje. Aby wyłączyć zasoby w celu uniknięcia naliczania opłat po zakończeniu tego samouczka, możesz usunąć utworzone zasoby lub projekt. 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 uruchamiasz Cloud Shell po raz pierwszy, zobaczysz ekran pośredni z opisem tej usługi. Jeśli wyświetlił się ekran pośredni, kliknij Dalej.
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ść zadań w ramach tego ćwiczenia z programowania można wykonać w przeglądarce.
Po nawiązaniu połączenia z Cloud Shell powinno pojawić się potwierdzenie, że użytkownik jest uwierzytelniony, a projekt jest 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łączanie interfejsu BigQuery 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-json.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-json.googleapis.com
4. Zainstaluj bibliotekę klienta BigQuery dla języka C#
Najpierw utwórz prostą aplikację konsoli w języku C#, której będziesz używać do uruchamiania przykładów interfejsu BigQuery API.
dotnet new console -n BigQueryDemo
Powinna pojawić się utworzona aplikacja i zamknięte zależności:
The template "Console Application" was created successfully.
Processing post-creation actions...
...
Restore succeeded.
Następnie przejdź do folderu BigQueryDemo
:
cd BigQueryDemo
I dodaj do projektu pakiet NuGet Google.Cloud.BigQuery.V2
:
dotnet add package Google.Cloud.BigQuery.V2
info : Adding PackageReference for package 'Google.Cloud.BigQuery.V2' into project '/home/atameldev/BigQueryDemo/BigQueryDemo.csproj'.
log : Restoring packages for /home/atameldev/BigQueryDemo/BigQueryDemo.csproj...
...
info : PackageReference for package 'Google.Cloud.BigQuery.V2' version '1.2.0' added to file '/home/atameldev/BigQueryDemo/BigQueryDemo.csproj'.
Teraz możesz korzystać z interfejsu BigQuery API.
5. 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, z których można wysyłać zapytania. Niektóre z nich są hostowane przez Google, ale wiele z nich jest hostowanych przez firmy 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 tabeli bigquery-public-data:samples dataset
. Jedna z nich nosi nazwę shakespeare.
. Zawiera indeks słów dzieł Szekspira, który podaje, ile razy poszczególne słowa występują w każdym korpusie.
W tym kroku wyślesz zapytanie do tabeli Szekspira.
Najpierw otwórz edytor kodu w prawym górnym rogu Cloud Shell:
Przejdź do pliku Program.cs
znajdującego się w folderze BigQueryDemo
i zastąp kod poniższym kodem. Pamiętaj, aby zastąpić projectId
rzeczywistym identyfikatorem projektu:
using System;
using Google.Cloud.BigQuery.V2;
namespace BigQueryDemo
{
class Program
{
static void Main(string[] args)
{
var client = BigQueryClient.Create("projectId");
var table = client.GetTable("bigquery-public-data", "samples", "shakespeare");
var sql = $"SELECT corpus AS title, COUNT(word) AS unique_words FROM {table} GROUP BY title ORDER BY unique_words DESC LIMIT 10";
var results = client.ExecuteQuery(sql, parameters: null);
foreach (var row in results)
{
Console.WriteLine($"{row["title"]}: {row["unique_words"]}");
}
}
}
}
Poświęć chwilę na zapoznanie się z kodem i zobacz, jak są wysyłane zapytania do tabeli.
Uruchom aplikację w Cloud Shell:
dotnet run
Powinna pojawić się lista słów i ich wystąpień:
hamlet: 5318
kinghenryv: 5104
cymbeline: 4875
troilusandcressida: 4795
kinglear: 4784
kingrichardiii: 4713
2kinghenryvi: 4683
...
6. 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 doraźnych zapytań.
Aby zobaczyć, jak wyglądają dane, otwórz zbiór danych GitHub w interfejsie internetowym BigQuery:
Aby zobaczyć szybki podgląd danych, kliknij przycisk Podgląd:
Przejdź do pliku Program.cs
znajdującego się w folderze BigQueryDemo
i zastąp kod poniższym kodem. Pamiętaj, aby zastąpić projectId
rzeczywistym identyfikatorem projektu:
using System;
using Google.Cloud.BigQuery.V2;
namespace BigQueryDemo
{
class Program
{
static void Main(string[] args)
{
var client = BigQueryClient.Create("projectId");
var table = client.GetTable("bigquery-public-data", "github_repos", "commits");
var sql = $"SELECT subject AS subject, COUNT(*) AS num_duplicates FROM {table} GROUP BY subject ORDER BY num_duplicates DESC LIMIT 10";
var results = client.ExecuteQuery(sql, parameters: null);
foreach (var row in results)
{
Console.WriteLine($"{row["subject"]}: {row["num_duplicates"]}");
}
}
}
}
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:
dotnet run
Powinna wyświetlić się lista komunikatów zatwierdzenia wraz z ich wystąpieniami:
Update README.md: 2509242
: 1971725
Initial commit: 1942149
Mirroring from Micro.blog.: 838586
update: 575188
Update data.json: 548651
Update data.js: 548339
Add files via upload: 379941
*** empty log message ***: 358528
Can't you see I'm updating the time?: 286863
7. Pamięć podręczna i statystyki
Po pierwszym zapytaniu BigQuery zapisuje wyniki w pamięci podręcznej. W rezultacie wykonywanie kolejnych zapytań trwa znacznie krócej. Możesz wyłączyć buforowanie za pomocą opcji zapytań. BigQuery śledzi również niektóre statystyki dotyczące zapytań, takie jak czas utworzenia, czas zakończenia czy łączna liczba przetworzonych bajtów.
W tym kroku wyłączysz zapisywanie w pamięci podręcznej i wyświetlanie niektórych statystyk dotyczących zapytań.
Przejdź do pliku Program.cs
znajdującego się w folderze BigQueryDemo
i zastąp kod poniższym kodem. Pamiętaj, aby zastąpić projectId
rzeczywistym identyfikatorem projektu:
using System;
using Google.Cloud.BigQuery.V2;
namespace BigQueryDemo
{
class Program
{
static void Main(string[] args)
{
var client = BigQueryClient.Create("projectId");
var table = client.GetTable("bigquery-public-data", "github_repos", "commits");
var sql = $"SELECT subject AS subject, COUNT(*) AS num_duplicates FROM {table} GROUP BY subject ORDER BY num_duplicates DESC LIMIT 10";
var queryOptions = new QueryOptions {
UseQueryCache = false
};
var results = client.ExecuteQuery(sql, parameters: null, queryOptions: queryOptions);
foreach (var row in results)
{
Console.WriteLine($"{row["subject"]}: {row["num_duplicates"]}");
}
var job = client.GetJob(results.JobReference);
var stats = job.Statistics;
Console.WriteLine("----------");
Console.WriteLine($"Creation time: {stats.CreationTime}");
Console.WriteLine($"End time: {stats.EndTime}");
Console.WriteLine($"Total bytes processed: {stats.TotalBytesProcessed}");
}
}
}
Kilka uwag na temat kodu. Po pierwsze, buforowanie jest wyłączone przez wprowadzenie opcji zapytań i ustawienie UseQueryCache
na wartość Fałsz. Zdobyliśmy też dostęp do statystyk zapytania z obiektu zadania.
Uruchom aplikację w Cloud Shell:
dotnet run
Podobnie jak wcześniej powinna wyświetlić się lista komunikatów zatwierdzenia wraz z ich wystąpieniami. Dodatkowo na końcu powinny wyświetlić się statystyki dotyczące zapytania
Update README.md: 2509242
: 1971725
Initial commit: 1942149
Mirroring from Micro.blog.: 838586
update: 575188
Update data.json: 548651
Update data.js: 548339
Add files via upload: 379941
*** empty log message ***: 358528
Can't you see I'm updating the time?: 286863
----------
Creation time: 1533052057398
End time: 1533052066961
Total bytes processed: 9944197093
8. Wczytywanie danych do BigQuery
Jeśli chcesz tworzyć zapytania dotyczące własnych danych, musisz najpierw wczytać dane do BigQuery. BigQuery obsługuje wczytywanie danych z wielu źródeł, takich jak Google Cloud Storage, inne usługi Google, czytelne źródło. Możesz nawet przesyłać strumieniowo dane, korzystając z wstawek przesyłanych strumieniowo. Więcej informacji znajdziesz na stronie Wczytywanie danych do BigQuery.
W tym kroku wczytasz do tabeli BigQuery plik JSON zapisany w Google 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 .
Copying gs://cloud-samples-data/bigquery/us-states/us-states.json...
/ [1 files][ 2.0 KiB/ 2.0 KiB]
Operation completed over 1 objects/2.0 KiB.
Widać, że zawiera listę stanów w USA, a każdy z nich to dokument JSON w osobnym wierszu:
less us-states.json
{"name": "Alabama", "post_abbr": "AL"}
{"name": "Alaska", "post_abbr": "AK"}
...
Aby wczytać ten plik JSON do BigQuery, przejdź do pliku Program.cs
w folderze BigQueryDemo
i zastąp go poniższym kodem. Pamiętaj, aby zastąpić projectId
rzeczywistym identyfikatorem projektu:
using System;
using Google.Cloud.BigQuery.V2;
namespace BigQueryDemo
{
class Program
{
static void Main(string[] args)
{
var gcsUri = "gs://cloud-samples-data/bigquery/us-states/us-states.json";
var client = BigQueryClient.Create("projectId");
var dataset = client.GetOrCreateDataset("us_states_dataset");
var schema = new TableSchemaBuilder
{
{ "name", BigQueryDbType.String },
{ "post_abbr", BigQueryDbType.String }
}.Build();
var jobOptions = new CreateLoadJobOptions
{
SourceFormat = FileFormat.NewlineDelimitedJson
};
var table = dataset.GetTableReference("us_states_table");
var loadJob = client.CreateLoadJob(gcsUri, table, schema, jobOptions);
loadJob.PollUntilCompleted();
loadJob.ThrowOnAnyError();
Console.WriteLine("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:
dotnet run
Zbiór danych i tabela są tworzone w BigQuery
Json file loaded to BigQuery
Aby sprawdzić, czy zbiór danych został utworzony, możesz otworzyć konsolę BigQuery. Powinno wyświetlić się nowy zbiór danych i utworzona tabela. Jeśli przejdziesz na kartę podglądu w tabeli, zobaczysz rzeczywiste dane:
9. Gratulacje!
Wiesz już, jak korzystać z BigQuery w języku C#.
Czyszczenie danych
Oto kroki, które musisz wykonać, aby uniknąć obciążenia konta Google Cloud Platform opłatami za zasoby zużyte podczas krótkiego wprowadzenia:
- Otwórz konsolę Cloud Platform.
- Wybierz projekt, który chcesz wyłączyć, i kliknij „Usuń”. u góry: spowoduje to zaplanowanie usunięcia projektu.
Więcej informacji
- Google BigQuery: https://cloud.google.com/bigquery/docs/,
- C#/.NET w Google Cloud Platform: https://cloud.google.com/dotnet/
- Klient Google Cloud .NET: https://googlecloudplatform.github.io/google-cloud-dotnet/
Licencja
To zadanie jest licencjonowane na podstawie ogólnej licencji Creative Commons Attribution 2.0.