테이블 스키마에서 ObjectRef 열 지정

이 문서에서는 ObjectRef 값을 저장할 수 있는 열이 있는 BigQuery 표준 테이블 스키마를 정의하는 방법을 설명합니다.

ObjectRef 값은 Cloud Storage의 객체에 대한 메타데이터와 연결 정보를 제공합니다. 구조화되지 않은 데이터를 표준 테이블에 통합해야 하는 경우 ObjectRef 값을 사용합니다. 예를 들어 제품 테이블에서 ObjectRef 값이 포함된 열을 추가하여 나머지 제품 정보와 동일한 행에 제품 이미지를 저장할 수 있습니다. ObjectRef 형식을 사용하는 STRUCT 열에 ObjectRef 값을 저장할 수 있습니다. 이 형식은 STRUCT<uri STRING, version STRING, authorizer STRING, details JSON>입니다.

멀티모달 데이터 작업에 대한 자세한 내용은 멀티모달 데이터 분석을 참고하세요. ObjectRef 데이터로 작업하는 방법을 보여주는 튜토리얼은 SQL로 멀티모달 데이터 분석을 참고하세요. Python에서 멀티모달 데이터를 사용하는 방법에 관한 자세한 내용은 BigQuery DataFrames로 Python에서 멀티모달 데이터 분석하기를 참고하세요.

기본 요건

표준 테이블에서 ObjectRef 값을 채우고 업데이트하려면 테이블에 관련 Cloud Storage 객체의 URI 정보가 포함된 STRING 열이 있어야 합니다.

타겟 표준 테이블의 URI 데이터에 식별된 것과 동일한 객체가 포함된 Cloud Storage 버킷이 있어야 합니다. 객체 테이블을 사용하여 표준 테이블에서 ObjectRef 값을 유지하려면 해당 버킷의 객체를 나타내는 객체 테이블도 있어야 합니다.

ObjectRef 값 유지

객체 테이블을 사용하여 표준 테이블에서 ObjectRef 값을 채우고 업데이트할 수 있습니다. 미리보기 허용 목록에 있는 경우 생성하는 모든 객체 테이블에는 지정된 객체의 ObjectRef 값을 포함하는 ref 열이 있습니다. 객체 URI를 사용하여 표준 테이블을 객체 테이블에 조인하여 ObjectRef 값을 채우고 업데이트할 수 있습니다. Cloud Storage에서 객체 메타데이터를 검색할 필요가 없으므로 확장성을 위해 이 방법을 사용하는 것이 좋습니다.

객체 테이블을 만들고 싶지 않다면 OBJ.FETCH_METADATAOBJ.MAKE_REF 함수를 사용하여 Cloud Storage에서 직접 객체 메타데이터를 가져와 ObjectRef 값을 채우고 업데이트할 수 있습니다. 이 접근 방식은 Cloud Storage에서 객체 메타데이터를 가져와야 하므로 확장성이 떨어질 수 있습니다.

ObjectRef 열 만들기

표준 테이블에서 ObjectRef 열을 만들고 채우려면 다음 옵션 중 하나를 선택합니다.

객체 테이블

객체 테이블 ref 열의 데이터를 기반으로 ObjectRef 열을 만들고 채웁니다.

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

    BigQuery로 이동

  2. 쿼리 편집기에서 다음 문을 입력합니다.

    CREATE OR REPLACE TABLE PROJECT_ID.DATASET_ID.TABLE_NAME
    AS
    SELECT TABLE_NAME.*, OBJECT_TABLE.ref AS objectrefcolumn
    FROM DATASET_ID.TABLE_NAME
    INNER JOIN DATASET_ID.OBJECT_TABLE
    ON OBJECT_TABLE.uri = TABLE_NAME.uri;

    다음을 바꿉니다.

    • PROJECT_ID: 프로젝트 ID입니다. 현재 프로젝트에서 테이블을 만드는 경우 이 인수를 건너뛸 수 있습니다.
    • DATASET_ID: 만들려는 데이터 세트의 ID입니다.
    • TABLE_NAME: 다시 만드는 표준 테이블의 이름입니다.
    • OBJECT_TABLE: 표준 테이블에 통합할 객체 데이터가 포함된 객체 테이블의 이름입니다.

  3. 실행을 클릭합니다.

쿼리를 실행하는 방법에 대한 자세한 내용은 대화형 쿼리 실행을 참조하세요.

SQL 함수를 사용하여 작성 가능

OBJ.FETCH_METADATAOBJ.MAKE_REF 함수의 출력을 기반으로 ObjectRef 열을 만들고 채웁니다.

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

    BigQuery로 이동

  2. 쿼리 편집기에서 다음 문을 입력합니다.

    CREATE OR REPLACE TABLE PROJECT_ID.DATASET_ID.TABLE_NAME
    AS
    SELECT TABLE_NAME.*,
    OBJ.FETCH_METADATA(OBJ.MAKE_REF(uri, 'CONNECTION_ID')) AS objectrefcolumn
    FROM DATASET_ID.TABLE_NAME;

    다음을 바꿉니다.

    • PROJECT_ID: 프로젝트 ID입니다. 현재 프로젝트에서 테이블을 만드는 경우 이 인수를 건너뛸 수 있습니다.
    • DATASET_ID: 만들려는 데이터 세트의 ID입니다.
    • TABLE_NAME: 다시 만드는 표준 테이블의 이름입니다.
    • CONNECTION_ID: 서비스가 Cloud Storage의 객체에 액세스하는 데 사용할 수 있는 클라우드 리소스 연결이 포함된 STRING 값입니다(location.connection_id 형식). 예를 들면 us-west1.myconnection입니다. Google Cloud 콘솔에서 연결 세부정보를 확인하고 연결 ID에 표시되는 정규화된 연결 ID의 마지막 섹션에 있는 값을 복사하여 연결 ID를 가져올 수 있습니다. 예를 들면 다음과 같습니다. projects/myproject/locations/connection_location/connections/myconnection

      객체에 액세스하는 데 사용하는 Cloud Storage 버킷에서 연결의 서비스 계정에 스토리지 객체 사용자(roles/storage.objectUser) 역할을 부여해야 합니다.

      연결은 함수를 호출하는 쿼리와 동일한 프로젝트 및 리전에 있어야 합니다.

  3. 실행을 클릭합니다.

쿼리를 실행하는 방법에 대한 자세한 내용은 대화형 쿼리 실행을 참조하세요.

ARRAY<ObjectRef> 열 만들기

ObjectRef 값의 배열을 포함하는 ARRAY<STRUCT<uri STRING, version STRING, authorizer STRING, details JSON>> 열을 만들 수 있습니다. 예를 들어 동영상을 별도의 이미지로 청크한 다음 이러한 이미지를 ObjectRef 값의 배열로 저장할 수 있습니다.

ARRAY_AGG 함수를 사용하여 ObjectRef 값의 배열을 집계할 수 있습니다. 필요한 경우 ORDER BY 절을 사용하여 객체 순서를 유지할 수 있습니다. UNNEST 연산자를 사용하여 ObjectRef 값의 배열을 개별 ObjectRef 값으로 파싱할 수 있습니다. 필요한 경우 WITH OFFSET 절을 사용하여 객체 순서를 유지할 수 있습니다. URI 경로 및 객체 파일 이름과 같은 객체 메타데이터를 사용하여 객체 청크를 나타내는 ObjectRef 값을 원본 객체를 나타내는 ObjectRef 값에 매핑할 수 있습니다.

ObjectRef 값의 배열을 사용하는 방법의 예는 SQL로 멀티모달 데이터 분석 튜토리얼의 ARRAY<ObjectRef> 값을 사용하여 순서가 지정된 멀티모달 데이터 처리 섹션을 참고하세요.

ObjectRef 열 업데이트

표준 테이블에서 ObjectRef 열을 업데이트하려면 다음 옵션 중 하나를 선택합니다.

객체 테이블

객체 테이블 ref 열의 데이터를 사용하여 ObjectRef 열을 업데이트합니다.

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

    BigQuery로 이동

  2. 쿼리 편집기에서 다음 문을 입력합니다.

    UPDATE PROJECT_ID.DATASET_ID.TABLE_NAME
    SET objectrefcolumn = (SELECT ref FROM DATASET_ID.OBJECT_TABLE WHERE OBJECT_TABLE.uri = TABLE_NAME.uri)
    WHERE uri != "";

    다음을 바꿉니다.

    • PROJECT_ID: 프로젝트 ID입니다. 현재 프로젝트에서 테이블을 만드는 경우 이 인수를 건너뛸 수 있습니다.
    • DATASET_ID: 만들려는 데이터 세트의 ID입니다.
    • TABLE_NAME: 다시 만드는 표준 테이블의 이름입니다.
    • OBJECT_TABLE: 표준 테이블 ObjectRef 열과 동일한 객체 데이터가 포함된 객체 테이블의 이름입니다.

  3. 실행을 클릭합니다.

쿼리를 실행하는 방법에 대한 자세한 내용은 대화형 쿼리 실행을 참조하세요.

SQL 함수를 사용하여 작성 가능

OBJ.FETCH_METADATAOBJ.MAKE_REF 함수의 출력을 사용하여 ObjectRef 열을 업데이트합니다.

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

    BigQuery로 이동

  2. 쿼리 편집기에서 다음 문을 입력합니다.

    UPDATE PROJECT_ID.DATASET_ID.TABLE_NAME
    SET objectrefcolumn = (SELECT OBJ.FETCH_METADATA(OBJ.MAKE_REF(uri, 'CONNECTION_ID')))
    WHERE uri != "";

    다음을 바꿉니다.

    • PROJECT_ID: 프로젝트 ID입니다. 현재 프로젝트에서 테이블을 만드는 경우 이 인수를 건너뛸 수 있습니다.
    • DATASET_ID: 만들려는 데이터 세트의 ID입니다.
    • TABLE_NAME: 다시 만드는 표준 테이블의 이름입니다.
    • CONNECTION_ID: 서비스가 Cloud Storage의 객체에 액세스하는 데 사용할 수 있는 클라우드 리소스 연결이 포함된 STRING 값입니다(location.connection_id 형식). 예를 들면 us-west1.myconnection입니다. Google Cloud 콘솔에서 연결 세부정보를 확인하고 연결 ID에 표시되는 정규화된 연결 ID의 마지막 섹션에 있는 값을 복사하여 연결 ID를 가져올 수 있습니다. 예를 들면 다음과 같습니다. projects/myproject/locations/connection_location/connections/myconnection

      객체에 액세스하는 데 사용하는 Cloud Storage 버킷에서 연결의 서비스 계정에 스토리지 객체 사용자(roles/storage.objectUser) 역할을 부여해야 합니다.

      연결은 함수를 호출하는 쿼리와 동일한 프로젝트 및 리전에 있어야 합니다.

  3. 실행을 클릭합니다.

쿼리를 실행하는 방법에 대한 자세한 내용은 대화형 쿼리 실행을 참조하세요.

다음 단계