BigQuery에 Databricks 연결

이 튜토리얼에서는 Databricks 노트북에서 데이터를 읽고 쓰기 위해 BigQuery 테이블 또는 뷰를 연결하는 방법을 보여줍니다. 이 단계는 Google Cloud ConsoleDatabricks 작업공간을 사용하여 설명합니다. gclouddatabricks 명령줄 도구를 사용하여 이 단계를 수행할 수도 있습니다. 하지만 이 튜토리얼에서는 다루지 않습니다.

Google Cloud의 Databricks는 Google Cloud에서 호스팅되는 Databricks 환경으로, Google Kubernetes Engine(GKE)에서 실행되며 BigQuery 및 기타 Google Cloud 기술과 기본적으로 통합됩니다. Databricks를 처음 사용하는 경우 Databricks 통합 데이터 플랫폼 소개 동영상을 통해 Databricks 레이크 하우스 플랫폼의 개요를 확인합니다.

목표

  • Databricks와 연결되도록 Google Cloud를 구성합니다.
  • Google Cloud에 Databricks를 배포합니다.
  • Databricks에서 BigQuery를 쿼리합니다.

비용

이 튜토리얼에서는 BigQuery 및 GKE 등, 비용이 청구될 수 있는 Google Cloud Console 구성요소를 사용합니다. BigQuery 가격 책정GKE 가격 책정이 적용됩니다. Google Cloud에서 실행되는 Databricks 계정과 관련된 비용에 대한 자세한 내용은 Databricks 문서의 계정 설정 및 작업공간 만들기 섹션을 참조하세요.

시작하기 전에

Databricks를 BigQuery에 연결하기 전에 다음 단계를 완료하세요.

  1. BigQuery Storage API를 사용 설정합니다.
  2. Databricks용 서비스 계정을 만듭니다.
  3. 임시 스토리지용 Cloud Storage 버킷을 만듭니다.

BigQuery Storage API 사용 설정

BigQuery Storage API는 BigQuery가 사용되는 모든 새 프로젝트에서 기본적으로 사용 설정됩니다. API가 사용 설정되지 않은 기존 프로젝트의 경우 다음 안내를 따르세요.

  1. 콘솔에서 BigQuery Storage API 페이지로 이동합니다.

    BigQuery Storage API로 이동

  2. BigQuery Storage API가 사용 설정되어 있는지 확인합니다.

    BigQuery Storage API 사용 설정됨

Databricks용 서비스 계정 만들기

그런 다음, Databricks 클러스터가 BigQuery에 대해 쿼리를 실행할 수 있도록 Identity and Access Management(IAM) 서비스 계정을 만듭니다. 이 서비스 계정에 작업을 수행하는 데 필요한 최소한의 권한을 부여하는 것이 좋습니다. BigQuery 역할 및 권한을 참조하세요.

  1. 콘솔에서 서비스 계정 페이지로 이동합니다.

    서비스 계정으로 이동

  2. 서비스 계정 만들기를 클릭하고 서비스 계정 databricks-bigquery의 이름을 지정하고 Databricks tutorial service account와 같은 간단한 설명을 입력한 다음 만들고 계속하기를 클릭합니다.

  3. 이 서비스 계정에 프로젝트에 대한 액세스 권한 부여 아래에서 서비스 계정의 역할을 지정합니다. 특히 구체화된 뷰를 참조하지 않고 동일한 프로젝트에서 Databricks 작업공간 및 BigQuery 테이블로 데이터를 읽을 수 있는 권한을 서비스 계정에 부여하려면 다음 역할을 부여하세요.

    • BigQuery 읽기 세션 사용자
    • BigQuery 데이터 뷰어

    데이터 쓰기 권한을 부여하려면 다음 역할을 부여합니다.

    • BigQuery 작업 사용자
    • BigQuery 데이터 편집자
  4. 나중에 참조할 수 있도록 새 서비스 계정의 이메일 주소를 기록합니다.

  5. 완료를 클릭합니다.

Cloud Storage 버킷 만들기

BigQuery에 쓰려면 Databricks 클러스터가 Cloud Storage 버킷에 액세스하여 작성된 데이터를 버퍼링해야 합니다.

  1. Console에서 Cloud Storage 브라우저로 이동합니다.

    Storage 브라우저로 이동

  2. 버킷 만들기를 클릭하여 버킷 만들기 대화상자를 엽니다.

  3. BigQuery에 데이터를 쓰는 데 사용되는 버킷의 이름을 지정합니다. 버킷 이름은 전역적으로 고유한 이름이어야 합니다. 이미 존재하는 버킷 이름을 지정하면 Cloud Storage가 오류 메시지로 응답합니다. 이 경우 버킷에 다른 이름을 지정합니다.

    databricks-bq-123을 사용하여 버킷 대화상자 이름 지정

  4. 이 튜토리얼에서는 스토리지 위치, 스토리지 클래스, 액세스 제어, 고급 설정의 기본 설정을 사용합니다.

  5. 만들기를 클릭하여 Cloud Storage 버킷을 만듭니다.

  6. 권한을 클릭하고 추가를 클릭한 다음 서비스 계정 페이지에서 Databricks 액세스용으로 만든 서비스 계정의 이메일 주소를 지정합니다.

    이미지

  7. 역할 선택을 클릭하고 스토리지 관리자 역할을 추가합니다.

  8. 저장을 클릭합니다.

Google Cloud에 Databricks 배포

다음 단계를 완료하여 Google Cloud에서 Databricks를 배포할 준비를 합니다.

  1. Databricks 계정을 설정하려면 Databricks 문서 Google Cloud 계정에 Databricks 설정의 안내를 따릅니다.
  2. 등록 후 Databricks 계정 관리 방법을 자세히 알아보세요.

Databricks 작업공간, 클러스터, 노트북 만들기

다음 단계에서는 BigQuery에 액세스하기 위한 코드를 작성하기 위해 Databricks 작업공간, 클러스터, Python 노트북을 만드는 방법을 설명합니다.

  1. Datarick 기본 요건을 확인합니다.

  2. 첫 번째 작업공간을 만듭니다. Databricks 계정 콘솔에서 작업공간 만들기를 클릭합니다.

  3. 작업공간 이름gcp-bq를 지정하고 리전을 선택합니다.

    작업공간 이름, 리전, Google Cloud 프로젝트 ID가 있는 작업공간 만들기 화면

  4. Google Cloud 프로젝트 ID를 확인하려면 콘솔 대시보드를 방문하여 값을 Google Cloud 프로젝트 ID 필드에 복사합니다.

    콘솔 대시보드로 이동

  5. 저장을 클릭하여 Databricks 작업공간을 만듭니다.

  6. Databricks 런타임 7.6 이상으로 Databricks 클러스터를 만들려면 왼쪽 메뉴 바에서 클러스터를 선택한 다음 상단에서 클러스터 만들기를 클릭합니다.

  7. 클러스터 이름과 크기를 지정한 다음 고급 옵션을 클릭하고 Google Cloud 서비스 계정의 이메일 주소를 지정합니다.

    Google 서비스 계정 세부정보가 포함된 새 클러스터 표면

  8. 클러스터 만들기를 클릭합니다.

  9. Databricks용 Python 노트북을 만들려면 노트북 만들기의 안내를 따르세요.

Databricks에서 BigQuery 쿼리하기

위 구성을 사용하면 Databricks를 BigQuery에 안전하게 연결할 수 있습니다. Databricks는 오픈소스 Google Spark 어댑터의 포크를 사용하여 BigQuery에 액세스합니다.

Databricks는 중첩된 열을 기준으로 BigQuery에 필터링하는 등 특정 쿼리 조건자를 자동으로 푸시하여 데이터 전송을 줄이고 쿼리를 가속화합니다. 또한 query() API를 사용하여 BigQuery에서 SQL 쿼리를 먼저 실행하는 기능이 추가되어 결과 데이터 세트의 전송 크기를 줄일 수 있습니다.

다음 단계에서는 BigQuery에서 데이터 세트에 액세스하고 BigQuery에 자체 데이터를 쓰는 방법을 설명합니다.

BigQuery의 공개 데이터 세트에 액세스

BigQuery는 사용 가능한 공개 데이터 세트 목록을 제공합니다. 공개 데이터 세트의 일부인 BigQuery Shakespeare 데이터 세트를 쿼리하려면 다음 단계를 따르세요.

  1. BigQuery 테이블을 읽으려면 Databricks 노트북에 다음 코드 스니펫을 사용합니다.

    table = "bigquery-public-data.samples.shakespeare"
    df = spark.read.format("bigquery").option("table",table).load()
    df.createOrReplaceTempView("shakespeare")
    

    Shift+Return을 눌러 코드를 실행합니다.

    이제 Spark DataFrame(df)을 통해 BigQuery 테이블을 쿼리할 수 있습니다. 예를 들어 데이터 프레임의 처음 세 행을 표시하려면 다음을 사용합니다.

    df.show(3)
    

    다른 테이블을 쿼리하려면 table 변수를 업데이트합니다.

  2. Databricks 노트북의 주요 특징은 Scala, Python, SQL과 같은 다양한 언어의 셀을 단일 노트북에 혼합할 수 있다는 점입니다.

    다음 SQL 쿼리를 사용하면 임시 뷰를 만드는 이전 셀을 실행한 후 Shakespeare의 단어 수를 시각화할 수 있습니다.

    %sql
    SELECT word, SUM(word_count) AS word_count FROM words GROUP BY word ORDER BY word_count DESC LIMIT 12
    
    

    shakespeare 막대 그래프의 단어 수

    위의 셀은 BigQuery가 아닌 Databricks 클러스터의 데이터 프레임에 대해 Spark SQL 쿼리를 실행합니다. 이 방법의 장점은 데이터 분석이 Spark 수준에서 수행되고 BigQuery API 호출이 더 이상 발생하지 않으며 추가 BigQuery 비용이 발생하지 않는다는 것입니다.

  3. 대안으로 query() API를 사용하여 SQL 쿼리 실행을 BigQuery에 위임하고 결과 데이터 프레임의 전송 크기를 줄일 수 있습니다. Spark에서 처리가 완료된 위의 예시와 달리 이 방법을 사용하면 BigQuery에서 쿼리를 실행하는 경우에 가격 책정 및 쿼리 최적화가 적용됩니다.

    다음 예시에서는 BigQuery의 Scala, query() API, 공개 Shakespeare 데이터 세트를 사용하여 Shakespeare의 작품에서 가장 일반적인 5개 단어를 계산합니다. 코드를 실행하기 전에 먼저 BigQuery에서 코드가 참조할 수 있는, mdataset라는 빈 데이터 세트를 만들어야 합니다. 자세한 내용은 BigQuery에 데이터 쓰기를 참조하세요.

    %scala
    // public dataset
    val table = "bigquery-public-data.samples.shakespeare"
    
    // existing dataset where the Google Cloud user has table creation permission
    val tempLocation = "mdataset"
    // query string
    val q = s"""SELECT word, SUM(word_count) AS word_count FROM ${table}
        GROUP BY word ORDER BY word_count DESC LIMIT 10 """
    
    // read the result of a BigQuery SQL query into a DataFrame
    val df2 =
      spark.read.format("bigquery")
      .option("query", q)
      .option("materializationDataset", tempLocation)
      .load()
    
    // show the top 5 common words in Shakespeare
    df2.show(5)
    

    더 많은 코드 예시를 보려면 Databricks BigQuery 샘플 노트북을 참조하세요.

BigQuery에 데이터 쓰기

BigQuery 테이블은 데이터 세트에 있습니다. BigQuery 테이블에 데이터를 쓰려면 먼저 BigQuery에 새 데이터 세트를 만들어야 합니다. Databricks Python 노트북에 데이터 세트를 만들려면 다음 단계를 따르세요.

  1. Google Cloud Console에서 BigQuery 페이지로 이동합니다.

    BigQuery로 이동

  2. 작업 옵션을 펼치고 데이터 세트 만들기를 클릭한 다음 이름을 together로 지정합니다.

  3. Databricks Python 노트북에서 다음 코드 스니펫을 사용하여 Python 목록으로부터 간단한 Spark 데이터 프레임을 만듭니다.

    from pyspark.sql.types import StringType
    mylist = ["Google", "Databricks", "better together"]
    
    df = spark.createDataFrame(mylist, StringType())
    
  4. 이전 단계의 Spark 데이터 프레임을 together 데이터 세트의 myTable BigQuery 테이블에 쓰는 노트북에 다른 셀을 추가합니다. 테이블을 만들거나 덮어씁니다. 앞에서 지정한 버킷 이름을 사용합니다.

    bucket = YOUR_BUCKET_NAME
    table = "together.myTable"
    
    df.write
      .format("bigquery")
      .option("temporaryGcsBucket", bucket)
      .option("table", table)
      .mode("overwrite").save()
    
  5. 데이터 쓰기가 완료되었는지 확인하려면 Spark DataFrame(df)을 통해 BigQuery 테이블을 쿼리하고 표시합니다.

    display(spark.read.format("bigquery").option("table", table).load)
    

정리

이 가이드에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트를 유지하고 개별 리소스를 삭제하세요.

Databricks를 삭제하기 전에 항상 데이터와 노트북을 백업하세요. Databricks를 정리하고 완전히 삭제하려면 Google Cloud 콘솔에서 Databricks 구독을 취소하고 콘솔에서 만든 관련 리소스를 모두 삭제하세요.

Databricks 작업공간을 삭제하면 Databricks에서 만든 databricks-WORKSPACE_IDdatabricks-WORKSPACE_ID-system이라는 이름의 Cloud Storage 버킷 두 개가 Cloud Storage 버킷이 비어 있지 않으면 삭제됩니다. 작업공간 삭제 후 프로젝트의 콘솔에서 해당 객체를 수동으로 삭제할 수 있습니다.

다음 단계

이 섹션에서는 추가 문서 및 가이드 목록을 제공합니다.