Delta Lake BigLake 테이블 만들기

BigLake를 사용하면 보다 세분화된 액세스 제어로 Delta Lake 테이블에 액세스할 수 있습니다. Delta Lake는 페타바이트급 확장 데이터 테이블을 지원하는 Databricks에서 개발된 오픈소스 테이블 형식 데이터 스토리지 형식입니다.

BigQuery는 Delta Lake 테이블에서 다음 기능을 지원합니다.

  • 액세스 위임: 액세스 위임으로 외부 데이터 스토어의 정형 데이터를 쿼리합니다. 액세스 위임은 Delta Lake 테이블에 대한 액세스 권한과 기본 데이터 스토어에 대한 액세스 권한을 분리합니다.
  • 세분화된 액세스 제어 행 수준열 수준 보안을 포함하여 테이블 수준에서 세분화된 보안을 적용합니다 Cloud Storage 기반 Delta Lake 테이블의 경우 동적 데이터 마스킹도 사용할 수 있습니다.
  • 스키마 개선: Delta Lake 테이블의 스키마 변경사항이 자동으로 감지됩니다. 스키마 변경 사항은 BigQuery 테이블에 반영됩니다.

Delta Lake 테이블은 BigLake 테이블로 구성할 때 모든 BigLake 기능도 지원합니다.

시작하기 전에

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

    Go to project selector

  2. Make sure that billing is enabled for your Google Cloud project.

  3. Enable the BigQuery Connection and BigQuery Reservation APIs.

    Enable the APIs

  4. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

  5. BigQuery 데이터 세트가 있는지 확인합니다.

  6. 사용 중인 Google Cloud SDK 버전이 366.0.0 이상인지 확인하세요.

    gcloud version
    

    필요한 경우 Google Cloud SDK를 업데이트합니다.

  7. 외부 데이터 소스를 기반으로 Cloud 리소스 연결을 만들고 이 연결에 Cloud Storage에 대한 액세스 권한을 부여합니다. 연결을 만들 수 있는 적절한 권한이 없으면 BigQuery 관리자에게 연결을 만들고 공유해 달라고 요청합니다.

필요한 역할

Delta Lake 테이블을 만들려면 다음 권한이 필요합니다.

  • bigquery.tables.create
  • bigquery.connections.delegate

BigQuery 관리자(roles/bigquery.admin)는 사전 정의된 Identity and Access Management 역할에 이러한 권한이 포함되어 있습니다.

이 역할의 주 구성원이 아닌 경우 관리자에게 이러한 권한을 부여하거나 Delta Lake 테이블을 만들어달라고 요청하세요.

또한 BigQuery 사용자가 테이블을 쿼리할 수 있게 하려면 연결과 관련된 서비스 계정에 다음 권한과 액세스 권한이 있어야 합니다.

  • BigQuery 뷰어(roles/bigquery.viewer) 역할
  • BigQuery 연결 사용자(roles/bigquery.connectionUser) 역할
  • 해당 데이터가 포함된 Cloud Storage 버킷에 대한 액세스 권한

BigQuery의 Identity and Access Management 역할 및 권한에 대한 자세한 내용은 사전 정의된 역할 및 권한을 참조하세요.

Delta Lake로 테이블 만들기

Delta Lake 테이블을 만들려면 다음 단계를 따르세요.

SQL

CREATE EXTERNAL TABLE을 사용하여 Delta Lake 테이블을 만듭니다.

CREATE EXTERNAL TABLE `PROJECT_ID.DATASET.DELTALAKE_TABLE_NAME`
WITH CONNECTION `PROJECT_ID.REGION.CONNECTION_ID`
OPTIONS (
  format ="DELTA_LAKE",
  uris=['DELTA_TABLE_GCS_BASE_PATH']);

다음 값을 바꿉니다.

  • PROJECT_ID: Delta Lake 테이블을 만들려는 프로젝트의 ID
  • DATASET: Delta Lake 테이블을 포함할 BigQuery 데이터 세트
  • DELTALAKE_TABLE_NAME: Delta Lake 테이블 이름
  • REGION: Delta Lake 테이블을 만들기 위한 연결이 포함된 리전(예: us)
  • CONNECTION_ID: 연결 ID(예: myconnection)

    Google Cloud 콘솔에서 연결 세부정보를 볼 때 연결 ID는 연결 ID에 표시되는 정규화된 연결 ID의 마지막 섹션에 있는 값입니다(예: projects/myproject/locations/connection_location/connections/myconnection).

  • DELTA_TABLE_GCS_BASE_PATH: Delta Lake 테이블 프리픽스

bq

명령줄 환경에서 bq mk 명령어를 사용하여 Delta Lake 테이블을 만듭니다.

bq mk --table --external_table_definition=DEFINITION_FILE PROJECT_ID:DATASET.DELTALAKE_TABLE_NAME

다음 값을 바꿉니다.

  • DEFINITION_FILE: 테이블 정의 파일의 경로
  • PROJECT_ID: Delta Lake 테이블을 만들려는 프로젝트의 ID
  • DATASET: Delta Lake 테이블을 포함할 BigQuery 데이터 세트
  • DELTALAKE_TABLE_NAME: Delta Lake 테이블 이름

REST

BigQuery API에서 tables.insert API 메서드를 호출하여 Delta Lake 테이블을 만듭니다.

REQUEST='{
  "autodetect": true,
  "externalDataConfiguration": {
  "sourceFormat": "DELTA_LAKE",
  "connectionId": "PROJECT_ID.REGION.CONNECTION_ID",
  "sourceUris": [
    "DELTA_TABLE_GCS_BASE_PATH"
  ],
 },
"tableReference": {
"tableId": "DELTALAKE_TABLE_NAME"
}
}'

echo $REQUEST | curl -X POST -d @- -H "Content-Type: application/json" -H "Authorization: Bearer $(gcloud auth print-access-token)" https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/datasets/DATASET/tables?autodetect_schema=true

다음 값을 바꿉니다.

  • PROJECT_ID: Delta Lake 테이블을 만들려는 프로젝트의 ID
  • REGION: Delta Lake 테이블을 만들기 위한 연결이 포함된 리전(예: us)
  • CONNECTION_ID: 연결 ID(예: myconnection)

    Google Cloud 콘솔에서 연결 세부정보를 볼 때 연결 ID는 연결 ID에 표시되는 정규화된 연결 ID의 마지막 섹션에 있는 값입니다(예: projects/myproject/locations/connection_location/connections/myconnection).

  • DELTA_TABLE_GCS_BASE_PATH: Delta Lake 테이블 프리픽스

  • DELTALAKE_TABLE_NAME: Delta Lake 테이블 이름

  • DATASET: Delta Lake 테이블을 포함할 BigQuery 데이터 세트

Delta Lake 테이블을 만들 때 Delta Lake 프리픽스가 테이블의 URI로 사용됩니다. 예를 들어 gs://bucket/warehouse/basictable/_delta_log 버킷에 로그가 있는 테이블의 경우 테이블 URI는 gs://bucket/warehouse/basictable입니다. Delta Lake 테이블에서 쿼리를 실행하면 BigQuery가 프리픽스 아래의 데이터를 읽어 현재 테이블 버전을 식별한 다음 테이블의 메타데이터와 파일을 계산합니다.

Delta Lake 테이블 업데이트

Delta Lake 테이블의 스키마를 업데이트(새로고침)하려면 다음 단계를 따르세요.

bq

명령줄 환경에서 bq update 명령어를 사용하여 Delta Lake 테이블의 스키마를 업데이트(새로고침)합니다.

bq update --autodetect_schema PROJECT_ID:DATASET.DELTALAKE_TABLE_NAME

다음 값을 바꿉니다.

  • PROJECT_ID: Delta Lake 테이블을 만들려는 프로젝트의 ID
  • DATASET: Delta Lake 테이블을 포함할 BigQuery 데이터 세트
  • DELTALAKE_TABLE_NAME: Delta Lake 테이블 이름

REST

BigQuery APItables.patch API 메서드를 호출하여 Delta Lake 테이블을 업데이트합니다.

REQUEST='{
  "externalDataConfiguration": {
    "sourceFormat": "DELTA_LAKE",
    "sourceUris": [
      "DELTA_TABLE_GCS_BASE_PATH"
    ],
    "connectionId": "PROJECT_ID.REGION.CONNECTION_ID",
    "autodetect": true
  },
  "tableReference": {
    "tableId": "DELTALAKE_TABLE_NAME"
  }
}'
echo $REQUEST |curl -X POST -d @- -H "Content-Type: application/json" -H "Authorization: Bearer $(gcloud auth print-access-token)" https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/datasets/DATASET/tables

다음 값을 바꿉니다.

  • DELTA_TABLE_GCS_BASE_PATH: Delta Lake 테이블 프리픽스
  • PROJECT_ID: Delta Lake 테이블을 만들려는 프로젝트의 ID
  • REGION: Delta Lake 테이블을 만들기 위한 연결이 포함된 리전(예: us)
  • CONNECTION_ID: 연결 ID(예: myconnection)

    Google Cloud 콘솔에서 연결 세부정보를 볼 때 연결 ID는 연결 ID에 표시되는 정규화된 연결 ID의 마지막 섹션에 있는 값입니다(예: projects/myproject/locations/connection_location/connections/myconnection).

  • DELTALAKE_TABLE_NAME: Delta Lake 테이블 이름

  • DATASET: Delta Lake 테이블을 포함할 BigQuery 데이터 세트

Delta Lake 테이블 쿼리

Delta Lake BigLake 테이블을 만든 후에는 표준 BigQuery 테이블과 마찬가지로 GoogleSQL 구문을 사용하여 쿼리할 수 있습니다. 예를 들면 다음과 같습니다.

SELECT field1, field2 FROM mydataset.my_cloud_storage_table;

자세한 내용은 BigLake 테이블에서 Cloud Storage 데이터 쿼리를 참조하세요.

서비스 계정과 연결된 외부 연결은 데이터 스토어에 연결하는 데 사용됩니다. 서비스 계정이 데이터 스토어에서 데이터를 검색하므로 사용자는 Delta Lake 테이블에만 액세스하면 됩니다.

데이터 매핑

BigQuery는 다음 표와 같이 Delta Lake 데이터 유형을 BigQuery 데이터 유형으로 변환합니다.

Delta Lake 유형 BigQuery 유형
boolean BOOL
byte INT64
int INT64
long INT64
float FLOAT64
double FLOAT64
Decimal(P/S) 정밀도에 따라 NUMERIC 또는 BIG_NUMERIC
date DATE
time TIME
timestamp (not partition column) TIMESTAMP
timestamp (partition column) DATETIME
string STRING
binary BYTES
array<Type> ARRAY<Type>
struct STRUCT
map<KeyType, ValueType> ARRAY<Struct<key KeyType, value ValueType>>

제한사항

Delta Lake 테이블에는 BigLake 테이블 제한사항이 포함되며 다음 제한사항도 포함됩니다.

  • 삭제 벡터 및 열 매핑이 있는 Delta Lake 리더 버전 3을 지원합니다.
  • Delta Lake V2 체크포인트를 지원하지 않습니다.
  • 마지막 로그 항목 파일에 리더 버전을 나열해야 합니다. 예를 들어 새 테이블에는 00000..0.json이 포함되어야 합니다.
  • 변경 데이터 캡처(CDC) 작업이 지원되지 않습니다. 기존 CDC 작업은 무시됩니다.
  • 스키마는 자동으로 감지됩니다. BigQuery를 사용한 스키마 수정은 지원되지 않습니다.
  • 테이블 열 이름은 BigQuery 열 이름 제한사항을 준수해야 합니다.
  • 구체화된 뷰는 지원되지 않습니다.
  • Delta Lake에는 Read API가 지원되지 않습니다.