BigQuery에서 Wikipedia 데이터 세트 쿼리하기

1. 개요

BigQuery는 Google의 완전 관리형, NoOps(무인 운영), 저비용 분석 데이터베이스입니다. BigQuery를 사용하면 관리할 인프라나 데이터베이스 관리자 없이도 테라바이트 단위의 데이터를 쿼리할 수 있습니다. BigQuery는 익숙한 SQL을 사용하며 사용한 만큼만 지불하는 모델의 장점을 활용할 수 있습니다. BigQuery는 데이터를 분석하여 의미 있고 유용한 정보를 찾는 데 집중할 수 있게 해줍니다.

이 Codelab에서는 BigQuery를 사용하여 Wikipedia 데이터 세트를 살펴봅니다.

학습할 내용

  • BigQuery 사용 방법
  • BigQuery에 실제 데이터 세트를 로드하는 방법
  • 대규모 데이터 세트에 대한 유용한 정보를 얻기 위해 쿼리를 작성하는 방법

필요한 항목

  • Google Cloud 프로젝트
  • 브라우저(Chrome 또는 Firefox 등)

설문조사

본 가이드를 어떻게 사용하실 계획인가요?

<ph type="x-smartling-placeholder"></ph> 읽기 전용 읽고 연습 활동을 완료하세요

귀하의 Google Cloud 사용 경험을 평가해 주세요.

<ph type="x-smartling-placeholder"></ph> 초보자 중급 숙련도

2. 설정 및 요건

BigQuery 사용 설정

아직 Google 계정이 없다면 계정을 만들어야 합니다.

  1. Google Cloud 콘솔에 로그인하고 BigQuery로 이동합니다. 또한 브라우저에 다음 URL을 입력하여 BigQuery 웹 UI를 직접 열 수도 있습니다.
https://console.cloud.google.com/bigquery
  1. 서비스 약관에 동의합니다.
  2. BigQuery를 사용하려면 먼저 프로젝트를 만들어야 합니다. 프롬프트에 따라 새 프로젝트를 만듭니다.

프로젝트 이름을 선택하고 프로젝트 ID를 기록해 둡니다. 1884405a64ce5765.png

프로젝트 ID는 모든 Google Cloud 프로젝트에서 고유한 이름입니다. 이 ID는 나중에 이 Codelab에서 PROJECT_ID라고 부릅니다.

이 Codelab에서는 BigQuery 샌드박스 한도 내에서 BigQuery 리소스를 사용합니다. 결제 계정은 필요하지 않습니다. 나중에 샌드박스 한도를 없애려면 Google Cloud 무료 체험판에 가입하여 결제 계정을 추가하면 됩니다.

다음 섹션에서는 Wikipedia 데이터 세트를 로드합니다.

3. 데이터 세트 만들기

먼저 프로젝트에 새 데이터 세트를 만듭니다. 데이터 세트는 여러 테이블로 구성됩니다.

  1. 데이터 세트를 만들려면 리소스 창에서 프로젝트 이름을 클릭한 후 데이터 세트 만들기를 클릭합니다.

4a5983b4dc299705.png

  1. 데이터 세트 ID로 lab를 입력합니다.

a592b5b9be20fdec.png

  1. 데이터 세트 만들기를 클릭하여 빈 데이터 세트를 만듭니다.

4. bq 명령줄 프로그램으로 데이터 로드

Cloud Shell 활성화

  1. Cloud Console에서 Cloud Shell 활성화4292cbf4971c9786.png를 클릭합니다.

bce75f34b2c53987.png

이전에 Cloud Shell을 시작한 적이 없는 경우 기능을 설명하는 중간 화면 (스크롤해야 볼 수 있는 부분)이 표시됩니다. 이 경우 계속을 클릭합니다 (다시 표시되지 않음). 이 일회성 화면은 다음과 같습니다.

70f315d7b402b476.png

Cloud Shell을 프로비저닝하고 연결하는 데 몇 분 정도만 걸립니다.

fbe3a0674c982259.png

가상 머신에는 필요한 개발 도구가 모두 들어 있습니다. 영구적인 5GB 홈 디렉터리를 제공하고 Google Cloud에서 실행되므로 네트워크 성능과 인증이 크게 개선됩니다. 이 Codelab에서 대부분의 작업은 브라우저나 Chromebook만 사용하여 수행할 수 있습니다.

Cloud Shell에 연결되면 인증이 완료되었고 프로젝트가 해당 프로젝트 ID로 이미 설정된 것을 볼 수 있습니다.

  1. 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`
  1. Cloud Shell에서 다음 명령어를 실행하여 gcloud 명령어가 프로젝트를 알고 있는지 확인합니다.
gcloud config list project

명령어 결과

[core]
project = <PROJECT_ID>

또는 다음 명령어로 설정할 수 있습니다.

gcloud config set project <PROJECT_ID>

명령어 결과

Updated property [core/project].

BigQuery에 데이터 로드

편의를 위해 Wikimedia 페이지 조회수 데이터 세트의 2019년 4월 10일 데이터 중 일부를 Google Cloud Storage gs://cloud-samples-data/third-party/wikimedia/pageviews/pageviews-20190410-140000.gz에서 확인할 수 있습니다. 데이터 파일은 GZip 형식 CSV 파일입니다. bq 명령줄 유틸리티를 사용하여 이 파일을 직접 로드할 수 있습니다. 로드 명령어 중에 파일의 스키마도 설명합니다.

bq load \
  --source_format CSV \
  --field_delimiter " " \
  --allow_jagged_rows \
  --quote "" \
  --max_bad_records 3 \
  $GOOGLE_CLOUD_PROJECT:lab.pageviews_20190410_140000 \
  gs://cloud-samples-data/third-party/wikimedia/pageviews/pageviews-20190410-140000.gz \
  wiki,title,requests:integer,zero:integer

몇 가지 고급 옵션을 사용하여 페이지 조회수 파일을 로드했습니다.

  • 파일이 CSV 파일로 파싱되어야 함을 나타내도록 --source_format CSV를 설정합니다. CSV가 기본 형식이므로 이 단계는 선택사항입니다.
  • 필드를 구분하는 데 단일 공백이 사용된다는 것을 나타내려면 --field_delimiter " "를 설정합니다.
  • 열 수가 더 적은 행을 포함하고 CSV 파일을 로드하는 동안 오류를 무시하도록 --allow_jagged_rows를 설정합니다.
  • --quote ""를 설정하여 문자열을 따옴표로 묶지 않았음을 나타냅니다.
  • CSV 파일을 파싱하는 동안 최대 3개의 오류를 무시하도록 --max_bad_records 3를 설정합니다.

bq 명령줄에 대한 자세한 내용은 문서를 참고하세요.

5. 데이터 세트 미리보기

BigQuery 콘솔에서 방금 로드한 테이블 중 하나를 엽니다.

  1. 프로젝트를 펼칩니다.
  2. 데이터 세트를 펼칩니다.
  3. 표를 선택합니다. 99f875c838ed9a58.png

스키마 탭에서 테이블 스키마를 볼 수 있습니다. 4. 세부정보 탭으로 이동하여 표에 있는 데이터의 양을 확인합니다.

742cd54fbf17085.png

  1. 미리보기 탭을 열어 표에서 선택한 행을 확인합니다.

397a9c25480735cc.png

6. 쿼리 작성

  1. 새 쿼리 작성을 클릭합니다.

cc28282a25c9746e.png

그러면 쿼리 편집기가 표시됩니다.

e881286d275ab4ec.png

  1. 다음 쿼리를 작성하여 2019년 4월 10일 오후 2시에서 3시 사이의 총 Wikimedia 조회수를 확인합니다.
SELECT SUM(requests)
FROM `lab.pageviews_20190410_140000`
  1. 실행을 클릭합니다.

9abb7c4039961f5b.png

몇 초 후 하단에 결과가 표시되고 처리된 데이터의 양도 확인할 수 있습니다.

a119b65f2ca49e41.png

이 쿼리는 테이블 크기가 691.4MB임에도 불구하고 123.9MB를 처리했습니다. BigQuery는 쿼리에 사용된 열의 바이트만 처리하므로 처리되는 총 데이터 양은 테이블 크기보다 훨씬 적을 수 있습니다. 클러스터링파티션 나누기를 사용하면 처리되는 데이터의 양을 훨씬 더 줄일 수 있습니다.

7. 고급 쿼리

위키백과 페이지 조회수 찾기

Wikimedia 데이터 세트에는 모든 Wikimedia 프로젝트 (Wikipedia, Wiktionary, Wikibooks, Wikiquotes 포함)의 페이지 조회수가 포함되어 있습니다. WHERE 문을 추가하여 쿼리 범위를 영어 Wikipedia 페이지로만 좁힙니다.

SELECT SUM(requests), wiki
FROM `lab.pageviews_20190410_140000`
WHERE wiki = "en"
GROUP BY wiki

d6c6c7901c314da7.png

추가 열 wiki를 쿼리하면 처리된 데이터 양이 124MB에서 204MB로 늘어났습니다.

BigQuery는 CONTAINS, GROUP BY, ORDER BY와 같이 익숙한 여러 SQL 절과 여러 집계 함수를 지원합니다. 또한 정규 표현식을 사용하여 텍스트 필드를 쿼리할 수도 있습니다. 다음 중 한 가지를 사용해 보세요.

SELECT title, SUM(requests) requests
FROM `lab.pageviews_20190410_140000`
WHERE
  wiki = "en"
  AND REGEXP_CONTAINS(title, 'Red.*t')
GROUP BY title
ORDER BY requests DESC

여러 테이블에서 쿼리하기

와일드 카드 테이블을 사용하여 union을 형성할 테이블 범위를 선택할 수 있습니다.

  1. 먼저 다음 시간의 페이지 뷰를 새 테이블에 로드하여 쿼리할 두 번째 테이블을 만듭니다.
bq load \
  --source_format CSV \
  --field_delimiter " " \
  --quote "" \
  $GOOGLE_CLOUD_PROJECT:lab.pageviews_20190410_150000 \
  gs://cloud-samples-data/third-party/wikimedia/pageviews/pageviews-20190410-150000.gz \
  wiki,title,requests:integer,zero:integer
  1. 쿼리 편집기에서 'pageviews_2019'로 테이블을 쿼리하여 로드한 두 테이블을 모두 쿼리합니다. 를 접두사로 사용하려면 다음 단계를 따르세요.
SELECT title, SUM(requests) requests
FROM `lab.pageviews_2019*`
WHERE
  wiki = "en"
  AND REGEXP_CONTAINS(title, 'Red.*t')
GROUP BY title
ORDER BY requests DESC

_TABLE_SUFFIX 유사 열을 사용하여 테이블을 보다 선택적으로 필터링할 수 있습니다. 이 쿼리는 4월 10일에 해당하는 테이블로 제한됩니다.

SELECT title, SUM(requests) requests
FROM `lab.pageviews_2019*`
WHERE
  _TABLE_SUFFIX BETWEEN '0410' AND '0410_9999999'
  AND wiki = "en"
  AND REGEXP_CONTAINS(title, 'Red.*t')
GROUP BY title
ORDER BY requests DESC

8. 삭제

필요한 경우 bq rm 명령어로 만든 데이터 세트를 삭제합니다. 포함된 테이블을 삭제하려면 -r 플래그를 사용합니다.

bq rm -r lab

9. 축하합니다.

BigQuery와 SQL을 사용하여 실제 Wikipedia 페이지 뷰 데이터 세트를 쿼리했습니다. 페타바이트 규모의 데이터 세트를 쿼리할 수 있는 능력이 있습니다.

자세히 알아보기