원격 함수를 사용하여 객체 테이블 분석

이 문서에서는 원격 함수를 사용하여 객체 테이블에서 구조화되지 않은 데이터를 분석하는 방법을 설명합니다.

개요

원격 함수를 사용하여 객체 테이블로 표현된 구조화되지 않은 데이터를 분석할 수 있습니다. 원격 함수를 사용하면 Cloud Functions 또는 Cloud Run에서 실행되는 함수를 호출하여 다음과 같은 리소스에 액세스할 수 있습니다.

  • Cloud Vision API, Document AI 등 Google의 선행 학습된 AI 모델
  • Apache Tika와 같은 오픈소스 라이브러리
  • 자체 커스텀 모델

원격 함수를 사용하여 객체 테이블 데이터를 분석하려면 원격 함수를 호출할 때 객체 테이블의 객체에 대한 서명된 URL을 생성하고 전달해야 합니다. 이처럼 서명된 URL은 원격 함수에 객체에 대한 액세스 권한을 부여하는 URL입니다.

필수 권한

  • 원격 함수에서 사용하는 연결 리소스를 만들려면 다음 권한이 필요합니다.

    • bigquery.connections.create
    • bigquery.connections.get
    • bigquery.connections.list
    • bigquery.connections.update
    • bigquery.connections.use
    • bigquery.connections.delete
  • 원격 함수를 만들려면 Cloud Functions 개발자 또는 Cloud Run 개발자 역할과 연결된 권한이 필요합니다.

  • 원격 함수를 호출하려면 원격 함수에 설명된 권한이 필요합니다.

  • 원격 함수로 객체 테이블을 분석하려면 객체 테이블에 대한 bigquery.tables.getData 권한이 필요합니다.

시작하기 전에

  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  3. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  4. API BigQuery, BigQuery Connection API, Cloud Functions 사용 설정

    API 사용 설정

  5. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  6. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  7. API BigQuery, BigQuery Connection API, Cloud Functions 사용 설정

    API 사용 설정

  8. BigQuery 관리자가 연결을 만들고 Cloud Storage에 대한 액세스를 설정했는지 확인합니다.

원격 함수 만들기

원격 함수 만들기에 대한 일반 안내는 원격 함수 작업을 참조하세요.

객체 테이블 데이터를 분석하는 원격 함수를 만들 때는 객체 테이블의 객체에 대해 생성된 서명된 URLS를 전달해야 합니다. STRING 데이터 유형과 함께 입력 매개변수를 사용하면 됩니다. 서명된 URL은 HTTP POST 요청의 calls 필드에서 입력 데이터로 원격 함수에 제공됩니다. 요청 예시는 다음과 같습니다.

{
  // Other fields omitted.
  "calls": [
    ["https://storage.googleapis.com/mybucket/1.pdf?X-Goog-SignedHeaders=abcd"],
    ["https://storage.googleapis.com/mybucket/2.pdf?X-Goog-SignedHeaders=wxyz"]
  ]
}

서명된 URL에 대해 HTTP GET 요청을 하는 메서드를 사용하여 원격 함수의 객체를 읽을 수 있습니다. 서명된 URL의 쿼리 문자열에 인증 정보가 포함되어 있으므로 원격 함수가 객체에 액세스할 수 있습니다.

Cloud Functions 시간 초과를 방지하고 처리 동시 로드를 늘리기 위해 원격 함수의 CREATE FUNCTION을 지정할 때 max_batching_rows 옵션을 1로 설정하는 것이 좋습니다.

다음 Cloud Functions Python 코드 예시는 스토리지 객체를 읽고 콘텐츠 길이를 BigQuery에 반환합니다.

import functions_framework
import json
import urllib.request

@functions_framework.http
def object_length(request):
  calls = request.get_json()['calls']
  replies = []
  for call in calls:
    object_content = urllib.request.urlopen(call[0]).read()
    replies.append(len(object_content))
  return json.dumps({'replies': replies})

배포된 함수에는 https://us-central1-myproject.cloudfunctions.net/object_length와 비슷한 엔드포인트가 있습니다.

다음 예시에서는 이 Cloud Functions 함수를 기반으로 BigQuery 원격 함수를 만드는 방법을 보여줍니다.

CREATE FUNCTION mydataset.object_length(signed_url STRING) RETURNS INT64
REMOTE WITH CONNECTION `us.myconnection`
OPTIONS(
  endpoint = "https://us-central1-myproject.cloudfunctions.net/object_length",
  max_batching_rows = 1
);

단계별 안내는 튜토리얼: 원격 함수를 사용하여 객체 테이블 분석을 참조하세요.

원격 함수 호출

객체 테이블 데이터에서 원격 함수를 호출하려면 쿼리의 select_list에서 원격 함수를 참조한 다음 FROM에서 EXTERNAL_OBJECT_TRANSFORM 함수를 호출하여 객체에 대해 서명된 URL을생성합니다.

다음 예시에서는 일반적인 문의 문법을 보여줍니다.

SELECT uri, function_name(signed_url) AS function_output
FROM EXTERNAL_OBJECT_TRANSFORM(TABLE my_dataset.object_table, ["SIGNED_URL"])
LIMIT 10000;

다음 예시에서는 원격 함수를 사용하여 객체 테이블 콘텐츠의 하위 집합만 처리하는 방법을 보여줍니다.

SELECT uri, function_name(signed_url) AS function_output
FROM EXTERNAL_OBJECT_TRANSFORM(TABLE my_dataset.object_table, ["SIGNED_URL"])
WHERE content_type = "application/pdf";

다음 단계