이 Codelab 정보
1. 개요
BigQuery는 Google의 완전 관리형인 페타바이트 규모의 저비용 분석 데이터 웨어하우스입니다. BigQuery는 NoOps입니다. 관리할 인프라가 없고 데이터베이스 관리자도 필요 없습니다. 따라서 데이터 분석에 집중하여 의미 있는 정보를 찾고, 익숙한 SQL을 사용하고, 사용한 만큼만 지불하는 모델의 이점을 활용할 수 있습니다.
이 Codelab에서는 .NET용 Google Cloud 클라이언트 라이브러리를 사용하여 C#으로 BigQuery 공개 데이터 세트를 쿼리합니다.
학습할 내용
- Cloud Shell 사용 방법
- BigQuery API 사용 설정 방법
- API 요청 인증 방법
- C#용 Google Cloud 클라이언트 라이브러리를 설치하는 방법
- 셰익스피어 작품 쿼리 방법
- GitHub 데이터 세트를 쿼리하는 방법
- 캐싱 및 통계 표시 조정 방법
필요한 항목
설문조사
이 튜토리얼을 어떻게 사용하실 계획인가요?
귀하의 C# 사용 경험을 평가해 주십시오.
귀하의 Google Cloud Platform 서비스 사용 경험을 평가해 주세요.
2. 설정 및 요구사항
자습형 환경 설정
- Google Cloud Console에 로그인하여 새 프로젝트를 만들거나 기존 프로젝트를 재사용합니다. 아직 Gmail이나 Google Workspace 계정이 없는 경우 계정을 만들어야 합니다.
- 프로젝트 이름은 이 프로젝트 참가자의 표시 이름입니다. 이는 Google API에서 사용하지 않는 문자열이며 언제든지 업데이트할 수 있습니다.
- 프로젝트 ID는 모든 Google Cloud 프로젝트에서 고유하며, 변경할 수 없습니다(설정된 후에는 변경할 수 없음). Cloud 콘솔은 고유한 문자열을 자동으로 생성합니다. 일반적으로는 신경 쓰지 않아도 됩니다. 대부분의 Codelab에서는 프로젝트 ID (일반적으로
PROJECT_ID
로 식별됨)를 참조해야 합니다. 생성된 ID가 마음에 들지 않으면 다른 임의 ID를 생성할 수 있습니다. 또는 직접 시도해 보고 사용 가능한지 확인할 수도 있습니다. 이 단계 이후에는 변경할 수 없으며 프로젝트 기간 동안 유지됩니다. - 참고로 세 번째 값은 일부 API에서 사용하는 프로젝트 번호입니다. 이 세 가지 값에 대한 자세한 내용은 문서를 참고하세요.
- 다음으로 Cloud 리소스/API를 사용하려면 Cloud 콘솔에서 결제를 사용 설정해야 합니다. 이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 튜토리얼이 끝난 후에 요금이 청구되지 않도록 리소스를 종료하려면 만든 리소스 또는 프로젝트를 삭제하면 됩니다. Google Cloud 신규 사용자는 300달러(USD) 상당의 무료 체험판 프로그램에 참여할 수 있습니다.
Cloud Shell 시작
Google Cloud를 노트북에서 원격으로 실행할 수 있지만, 이 Codelab에서는 Cloud에서 실행되는 명령줄 환경인 Google Cloud Shell을 사용합니다.
Cloud Shell 활성화
- Cloud Console에서 Cloud Shell 활성화
를 클릭합니다.
Cloud Shell을 처음 시작하는 경우에는 무엇이 있는지 설명하는 중간 화면이 표시됩니다. 중간 화면이 표시되면 계속을 클릭합니다.
Cloud Shell을 프로비저닝하고 연결하는 데 몇 분 정도만 걸립니다.
가상 머신에는 필요한 개발 도구가 모두 들어 있습니다. 영구적인 5GB 홈 디렉터리를 제공하고 Google Cloud에서 실행되므로 네트워크 성능과 인증이 크게 개선됩니다. 이 Codelab에서 대부분의 작업은 브라우저를 사용하여 수행할 수 있습니다.
Cloud Shell에 연결되면 인증이 완료되었고 프로젝트가 자신의 프로젝트 ID로 설정된 것을 확인할 수 있습니다.
- Cloud Shell에서 다음 명령어를 실행하여 인증되었는지 확인합니다.
gcloud auth list
명령어 결과
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- Cloud Shell에서 다음 명령어를 실행하여 gcloud 명령어가 프로젝트를 알고 있는지 확인합니다.
gcloud config list project
명령어 결과
[core] project = <PROJECT_ID>
또는 다음 명령어로 설정할 수 있습니다.
gcloud config set project <PROJECT_ID>
명령어 결과
Updated property [core/project].
3. BigQuery API 사용 설정
BigQuery API는 모든 Google Cloud 프로젝트에서 기본적으로 사용 설정되어야 합니다. Cloud Shell에서 다음 명령어를 사용하여 이를 확인할 수 있습니다. BigQuery 목록에 있어야 합니다.
gcloud services list
다음과 같이 BigQuery가 나열됩니다.
NAME TITLE
bigquery-json.googleapis.com BigQuery API
...
BigQuery API가 사용 설정되지 않은 경우 Cloud Shell에서 다음 명령어를 사용하여 사용 설정할 수 있습니다.
gcloud services enable bigquery-json.googleapis.com
4. C#용 BigQuery 클라이언트 라이브러리 설치
먼저 BigQuery API 샘플을 실행하는 데 사용할 간단한 C# 콘솔 애플리케이션을 만듭니다.
dotnet new console -n BigQueryDemo
애플리케이션이 생성되고 종속 항목이 해결된 것을 확인할 수 있습니다.
The template "Console Application" was created successfully.
Processing post-creation actions...
...
Restore succeeded.
그런 다음 BigQueryDemo
폴더로 이동합니다.
cd BigQueryDemo
프로젝트에 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'.
이제 BigQuery API를 사용할 준비가 되었습니다.
5. 셰익스피어 작품 쿼리
공개 데이터 세트는 BigQuery에 저장되어 일반 대중이 사용할 수 있는 모든 데이터 세트입니다. 이 외에도 쿼리할 수 있는 공개 데이터 세트가 많이 있습니다. 그 중 일부는 Google에서 호스팅되지만, 서드 파티에서 호스팅되는 데이터 세트가 더 많습니다. 자세한 내용은 공개 데이터 세트 페이지를 참조하세요.
공개 데이터 세트 외에도 BigQuery는 사용자가 쿼리할 수 있는 제한된 수의 샘플 테이블을 제공합니다. 이러한 테이블은 bigquery-public-data:samples dataset
에 포함되어 있습니다. 이 테이블 중 하나는 shakespeare.
입니다. 여기에는 각 코퍼스에서 각 단어가 등장하는 횟수를 제공하는 셰익스피어 작품의 단어 색인이 포함되어 있습니다.
이 단계에서는 Shakespeare 테이블을 쿼리합니다.
먼저 Cloud Shell의 오른쪽 상단에서 코드 편집기를 엽니다.
BigQueryDemo
폴더 내의 Program.cs
파일로 이동하여 코드를 다음으로 바꿉니다. projectId
를 실제 프로젝트 ID로 바꿔야 합니다.
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"]}");
}
}
}
}
1~2분 정도 시간을 내어 코드를 살펴보고 테이블이 어떻게 쿼리되는지 확인합니다.
Cloud Shell로 돌아가서 앱을 실행합니다.
dotnet run
단어와 일치하는 항목 목록이 표시됩니다.
hamlet: 5318
kinghenryv: 5104
cymbeline: 4875
troilusandcressida: 4795
kinglear: 4784
kingrichardiii: 4713
2kinghenryvi: 4683
...
6. GitHub 데이터 세트 쿼리
BigQuery에 더 익숙해지기 위해 이제 GitHub 공개 데이터 세트를 대상으로 쿼리를 실행해 보겠습니다. GitHub에서 가장 일반적인 커밋 메시지를 확인할 수 있습니다. 또한 BigQuery의 웹 콘솔을 사용하여 임시 쿼리를 미리 보고 실행합니다.
데이터가 어떻게 표시되는지 확인하려면 BigQuery 웹 UI에서 GitHub 데이터 세트를 엽니다.
데이터가 어떻게 표시되는지 빠르게 미리 보려면 미리보기 버튼을 사용합니다.
BigQueryDemo
폴더 내의 Program.cs
파일로 이동하여 코드를 다음으로 바꿉니다. projectId
를 실제 프로젝트 ID로 바꿔야 합니다.
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"]}");
}
}
}
}
1~2분 정도 시간을 내어 코드를 살펴보고 가장 일반적인 커밋 메시지를 위해 테이블이 어떻게 쿼리되는지 확인하세요.
Cloud Shell로 돌아가서 앱을 실행합니다.
dotnet run
커밋 메시지와 해당 메시지 목록이 표시됩니다.
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. 캐싱 및 통계
첫 쿼리 후 BigQuery가 결과를 캐시합니다. 따라서 후속 쿼리에 소요되는 시간이 훨씬 줄어듭니다. 쿼리 옵션을 사용하여 캐싱을 사용 중지할 수 있습니다. 또한 BigQuery는 생성 시간, 종료 시간, 총 처리 바이트와 같은 쿼리에 대한 일부 통계도 추적합니다.
이 단계에서는 캐싱을 사용 중지하고 쿼리에 대한 일부 통계도 표시합니다.
BigQueryDemo
폴더 내의 Program.cs
파일로 이동하여 코드를 다음으로 바꿉니다. projectId
를 실제 프로젝트 ID로 바꿔야 합니다.
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}");
}
}
}
코드에 관해 알아야 할 몇 가지 사항 첫째, 쿼리 옵션을 도입하고 UseQueryCache
를 false로 설정하여 캐싱을 사용 중지합니다. 둘째, 작업 객체에서 쿼리에 대한 통계에 액세스했습니다.
Cloud Shell로 돌아가서 앱을 실행합니다.
dotnet run
이전과 마찬가지로 커밋 메시지와 그 발생의 목록이 표시됩니다. 또한 마지막에는 검색어에 대한 몇 가지 통계도 볼 수 있습니다.
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. BigQuery에 데이터 로드
자체 데이터를 쿼리하려면 먼저 BigQuery에 데이터를 로드해야 합니다. BigQuery는 Google Cloud Storage, 기타 Google 서비스, 읽을 수 있는 소스 등 다양한 소스에서 데이터 로드를 지원합니다. 스트리밍 삽입을 사용하여 데이터를 스트리밍할 수도 있습니다. 자세한 내용은 BigQuery에 데이터 로드 페이지를 참조하세요.
이 단계에서는 Google Cloud Storage에 저장된 JSON 파일을 BigQuery 테이블에 로드합니다. JSON 파일은 gs://cloud-samples-data/bigquery/us-states/us-states.json
에 있습니다.
JSON 파일의 콘텐츠가 궁금한 경우 gsutil
명령줄 도구를 사용하여 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.
미국 주 목록이 포함되어 있으며 각 주는 별도의 행에 JSON 문서임을 알 수 있습니다.
less us-states.json
{"name": "Alabama", "post_abbr": "AL"}
{"name": "Alaska", "post_abbr": "AK"}
...
이 JSON 파일을 BigQuery로 로드하려면 BigQueryDemo
폴더 내의 Program.cs
파일로 이동하여 코드를 다음으로 바꿉니다. projectId
를 실제 프로젝트 ID로 바꿔야 합니다.
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");
}
}
}
2분 동안 코드가 어떻게 JSON 파일을 로드하고 데이터 세트 아래에 스키마가 있는 테이블을 만드는지 살펴보세요.
Cloud Shell로 돌아가서 앱을 실행합니다.
dotnet run
BigQuery에서 데이터 세트와 테이블이 생성됨
Json file loaded to BigQuery
데이터 세트가 실제로 생성되었는지 확인하려면 BigQuery 콘솔로 이동합니다. 새 데이터 세트와 생성된 테이블이 표시됩니다. 표의 미리보기 탭으로 전환하면 실제 데이터를 확인할 수 있습니다.
9. 축하합니다.
C#을 사용하여 BigQuery를 사용하는 방법을 배웠습니다.
삭제
이 빠른 시작에서 사용한 리소스 비용이 Google Cloud Platform 계정에 청구되지 않도록 하는 방법은 다음과 같습니다.
- Cloud Platform 콘솔로 이동합니다.
- 종료할 프로젝트를 선택한 후 '삭제'를 클릭하세요. 상단: 프로젝트 삭제가 예약됩니다.
자세히 알아보기
- Google BigQuery: https://cloud.google.com/bigquery/docs/
- Google Cloud Platform의 C#/.NET: https://cloud.google.com/dotnet/
- Google Cloud .NET 클라이언트: https://googlecloudplatform.github.io/google-cloud-dotnet/
라이선스
이 작업물은 Creative Commons Attribution 2.0 일반 라이선스에 따라 사용이 허가되었습니다.