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

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

개요

원격 함수를 사용하여 객체 테이블로 표현된 구조화되지 않은 데이터를 분석할 수 있습니다. 원격 함수를 사용하면 Cloud Run 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. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

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

  4. Enable the BigQuery, BigQuery Connection API, Cloud Run functions APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

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

  7. Enable the BigQuery, BigQuery Connection API, Cloud Run functions APIs.

    Enable the APIs

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

다음 Cloud Run 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 Run 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";

다음 단계

이미지 객체 테이블에서 추론 실행 방법 알아보기