Korzystanie z BigQuery w języku C#

1. Przegląd

BigQuery to w pełni zarządzana, ekonomiczna hurtownia danych analitycznych Google w skali petabajtowej. BigQuery to usługa typu NoOps – nie musisz zarządzać infrastrukturą ani zatrudniać administratora bazy danych, więc możesz skupić się na analizowaniu danych w celu uzyskania przydatnych informacji, korzystać ze znanego Ci języka SQL i wykorzystywać nasz model płatności według wykorzystania.

W tym module dowiesz się, jak za pomocą bibliotek klienta Google Cloud na platformę .NET tworzyć zapytania w C# do publicznych zbiorów danych BigQuery.

Czego się nauczysz

  • Jak korzystać z Cloud Shell
  • Włączanie interfejsu BigQuery API
  • Uwierzytelnianie żądań do interfejsu API
  • Instalowanie biblioteki klienta Google Cloud dla C#
  • Jak wyszukiwać dzieła Szekspira
  • Jak wysyłać zapytania do zbioru danych GitHub
  • Jak dostosować statystyki buforowania i wyświetlania

Czego potrzebujesz

  • Projekt Google Cloud Platform
  • przeglądarka, np. Chrome lub Firefox;
  • znajomość języka C#,

Ankieta

Jak zamierzasz korzystać z tego samouczka?

Tylko przeczytaj Przeczytaj i wykonaj ćwiczenia

Jak oceniasz swoje doświadczenie z językiem C#?

Początkujący Średnio zaawansowany Zaawansowany

Jak oceniasz korzystanie z usług Google Cloud Platform?

Początkujący Średnio zaawansowany Zaawansowany

2. Konfiguracja i wymagania

Samodzielne konfigurowanie środowiska

  1. Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub użyj istniejącego. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • Nazwa projektu to wyświetlana nazwa uczestników tego projektu. Jest to ciąg znaków, który nie jest używany przez interfejsy API Google. Zawsze możesz ją zaktualizować.
  • Identyfikator projektu jest unikalny we wszystkich projektach Google Cloud i nie można go zmienić po ustawieniu. Konsola Cloud automatycznie generuje unikalny ciąg znaków. Zwykle nie musisz się tym przejmować. W większości ćwiczeń z programowania musisz odwoływać się do identyfikatora projektu (zwykle oznaczanego jako PROJECT_ID). Jeśli wygenerowany identyfikator Ci się nie podoba, możesz wygenerować inny losowy identyfikator. Możesz też spróbować własnej nazwy i sprawdzić, czy jest dostępna. Po tym kroku nie można go zmienić i pozostaje on taki przez cały czas trwania projektu.
  • Warto wiedzieć, że istnieje też trzecia wartość, numer projektu, której używają niektóre interfejsy API. Więcej informacji o tych 3 wartościach znajdziesz w dokumentacji.
  1. Następnie musisz włączyć płatności w konsoli Cloud, aby korzystać z zasobów i interfejsów API Google Cloud. Wykonanie tego laboratorium nie będzie kosztować dużo, a może nawet nic. Aby wyłączyć zasoby i uniknąć naliczania opłat po zakończeniu tego samouczka, możesz usunąć utworzone zasoby lub projekt. Nowi użytkownicy Google Cloud mogą skorzystać z bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.

Uruchamianie Cloud Shell

Z Google Cloud można korzystać zdalnie na laptopie, ale w tym module praktycznym będziesz używać Google Cloud Shell, czyli środowiska wiersza poleceń działającego w chmurze.

Aktywowanie Cloud Shell

  1. W konsoli Cloud kliknij Aktywuj Cloud Shell d1264ca30785e435.png.

cb81e7c8e34bc8d.png

Jeśli uruchamiasz Cloud Shell po raz pierwszy, zobaczysz ekran pośredni z opisem tego środowiska. Jeśli pojawił się ekran pośredni, kliknij Dalej.

d95252b003979716.png

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

7833d5e1c5d18f54.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.

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. Włączanie interfejsu BigQuery API

Interfejs BigQuery API powinien być domyślnie włączony we wszystkich projektach Google Cloud. Możesz to sprawdzić za pomocą tego polecenia w Cloud Shell: powinna się wyświetlić usługa BigQuery:

gcloud services list

Powinna 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. Instalowanie biblioteki klienta BigQuery w C#

Najpierw utwórz prostą aplikację konsolową w C#, której będziesz używać do uruchamiania przykładowych kodów interfejsu BigQuery API.

dotnet new console -n BigQueryDemo

Powinna pojawić się utworzona aplikacja i rozwiązane zależności:

The template "Console Application" was created successfully.
Processing post-creation actions...
...
Restore succeeded.

Następnie otwórz folder BigQueryDemo:

cd BigQueryDemo

Dodaj do projektu pakiet Google.Cloud.BigQuery.V2 NuGet:

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 używać interfejsu BigQuery API.

5. Wyszukiwanie w dziełach Szekspira

Publiczny zbiór danych to dowolny zbiór danych przechowywany w BigQuery i udostępniany ogółowi użytkowników. Możesz wysyłać zapytania do wielu innych publicznych zbiorów danych, z których część jest hostowana przez Google, a większość przez inne firmy. 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żesz wysyłać zapytania. Tabele te znajdują się w bigquery-public-data:samples dataset. Jedna z tych tabel nosi nazwę shakespeare.. Zawiera ona indeks słów z dzieł Szekspira, podając liczbę wystąpień każdego słowa w poszczególnych korpusach.

W tym kroku wyślesz zapytanie do tabeli Shakespeare.

Najpierw otwórz edytor kodu w prawym górnym rogu Cloud Shell:

fd3fc1303e63572.png

Otwórz plik Program.cs w folderze BigQueryDemo i zastąp kod tym 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ęć minutę lub dwie na przeanalizowanie kodu i sprawdzenie, jak wysyłane są zapytania do tabeli.

Wróć do Cloud Shell i uruchom aplikację:

dotnet run

Powinna się wyświetlić lista słów i ich wystąpień:

hamlet: 5318
kinghenryv: 5104
cymbeline: 4875
troilusandcressida: 4795
kinglear: 4784
kingrichardiii: 4713
2kinghenryvi: 4683
...

6. Tworzenie zapytania dotyczącego zbioru danych GitHub

Aby lepiej poznać BigQuery, wykonasz teraz zapytanie dotyczące publicznego zbioru danych GitHub. Najczęstsze komunikaty zatwierdzenia znajdziesz na GitHubie. Użyjesz też konsoli internetowej BigQuery, aby wyświetlać podgląd zapytań doraźnych i je uruchamiać.

Aby zobaczyć, jak wyglądają dane, otwórz zbiór danych GitHub w interfejsie internetowym BigQuery:

https://console.cloud.google.com/bigquery?p=bigquery-public-data&d=github_repos&t=commits&page=table

Aby szybko sprawdzić, jak wyglądają dane, kliknij przycisk Podgląd:

f706bfe3dfcbd267.png

Otwórz plik Program.cs w folderze BigQueryDemo i zastąp kod tym 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 przeanalizowanie kodu i sprawdź, jak w tabeli wyszukiwane są najczęstsze komunikaty o zatwierdzeniu.

Wróć do Cloud Shell i uruchom aplikację:

dotnet run

Powinna pojawić się lista komunikatów o zatwierdzeniu i ich wystąpień:

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. Dzięki temu kolejne zapytania zajmują znacznie mniej czasu. Pamięć podręczną można wyłączyć za pomocą opcji zapytania. BigQuery śledzi też niektóre statystyki dotyczące zapytań, takie jak czas utworzenia, czas zakończenia i łączna liczba przetworzonych bajtów.

W tym kroku wyłączysz buforowanie i wyświetlisz statystyki dotyczące zapytań.

Otwórz plik Program.cs w folderze BigQueryDemo i zastąp kod tym 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. Najpierw wyłącz buforowanie, wprowadzając opcje zapytania i ustawiając wartość UseQueryCache na false. Po drugie, statystyki zapytania zostały pobrane z obiektu zadania.

Wróć do Cloud Shell i uruchom aplikację:

dotnet run

Podobnie jak wcześniej powinna się wyświetlić lista komunikatów o zatwierdzeniu i ich wystąpień. Na końcu powinny się też pojawić 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 wysyłać zapytania o własne dane, musisz najpierw wczytać je do BigQuery. BigQuery obsługuje wczytywanie danych z wielu źródeł, takich jak Google Cloud Storage, inne usługi Google czy źródło do odczytu. Możesz nawet przesyłać strumieniowo dane za pomocą wstawień strumieniowych. Więcej informacji znajdziesz na stronie Wczytywanie danych do BigQuery.

W tym kroku załadujesz plik JSON przechowywany w Google Cloud Storage do tabeli BigQuery. Plik JSON znajduje się w lokalizacji gs://cloud-samples-data/bigquery/us-states/us-states.json

Jeśli chcesz sprawdzić zawartość pliku JSON, możesz go pobrać w Cloud Shell za pomocą narzędzia wiersza poleceń gsutil:

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.

Jak widać, zawiera on listę stanów USA, a każdy stan jest dokumentem 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, otwórz plik Program.cs w folderze BigQueryDemo i zastąp kod tym 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 zapoznanie się z tym, jak kod wczytuje plik JSON i tworzy tabelę ze schematem w zbiorze danych.

Wróć do Cloud Shell i uruchom aplikację:

dotnet run

W BigQuery tworzony jest zbiór danych i tabela.

Json file loaded to BigQuery

Aby sprawdzić, czy zbiór danych został utworzony, możesz otworzyć konsolę BigQuery. Powinien pojawić się nowy zbiór danych i utworzona tabela. Jeśli przejdziesz na kartę podglądu tabeli, zobaczysz rzeczywiste dane:

7d9f7c493acbbf9a.png

9. Gratulacje!

Dowiedzieliśmy się, jak korzystać z BigQuery w 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 zamknąć, a następnie kliknij „Usuń” u góry. Spowoduje to zaplanowanie usunięcia projektu.

Więcej informacji

Licencja

To zadanie jest licencjonowane na podstawie ogólnej licencji Creative Commons Attribution 2.0.