0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Google Colab で操作した Delta Lake のデータから Delta Lake 用の BigLake 外部テーブルを作成する方法

Last updated at Posted at 2025-03-14

概要

本記事では、Google Colab で操作した Delta Lake のデータを用い、Delta Lake 用の BigLake 外部テーブルを作成する手順を解説します。

image.png

出所:Delta Lake 用の BigLake 外部テーブルを作成する | BigQuery | Google Cloud

ドキュメントにて最新のメタデータをディレクトリから参照する仕様が記載されており、本記事の結果としてもメタデータの最新化の処理は不要でした。

Delta Lake テーブルにクエリを実行すると、BigQuery は接頭辞の下にあるデータを読み取ってテーブルの現在のバージョンを識別し、テーブルのメタデータとファイルを計算します。

出所:Delta Lake 用の BigLake 外部テーブルを作成する | BigQuery | Google Cloud

利用時の制限事項についてドキュメントに記載されています。

image.png

出所:Delta Lake 用の BigLake 外部テーブルを作成する | BigQuery | Google Cloud

事前準備

下記の記事を参考にして Google Colab と GCS を接続する方法を確立してください。

手順

Delta Lake 用の BigLake 外部テーブルの作成

1. Google Colab にて Spark のバージョンを確認

!pyspark --version

image.png

2. SparkSession の定義

/content/drive/MyDrive/Colab Notebooks/bigquery_iceberg/gcs_key.jsonに GCS への接続情報を配置することを前提としています。

from google.colab import drive
drive.mount('/content/drive')

image.png

3. GCS 上に Delta Lake テーブルを作成

gcs_deltalake_path = "gs://manabianqiita/deltalake"
gcs_key_path = "/content/drive/MyDrive/Colab Notebooks/bigquery_iceberg/gcs_key.json"
from pyspark.sql import SparkSession

spark = (
    SparkSession.builder
        .appName("DeltaLakeExample")
        .config("spark.jars", "https://storage.googleapis.com/hadoop-lib/gcs/gcs-connector-hadoop3-latest.jar")
        .config("spark.jars.packages", "io.delta:delta-spark_2.12:3.2.1")
        .config("spark.sql.extensions", "io.delta.sql.DeltaSparkSessionExtension")
        .config("spark.sql.catalog.spark_catalog", "org.apache.spark.sql.delta.catalog.DeltaCatalog")
        .config("spark.sql.warehouse.dir", gcs_deltalake_path)
        .config("spark.hadoop.fs.gs.impl", "com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem")
        .config("google.cloud.auth.service.account.enable", "true")
        .config("spark.hadoop.google.cloud.auth.service.account.enable", "true")
        .config("spark.hadoop.google.cloud.auth.service.account.json.keyfile", gcs_key_path)
        .getOrCreate()
)
spark

image.png

4. Delta Lake テーブルの作成とデータ挿入

spark.sql("""
CREATE OR REPLACE TABLE first_table (
  id INT,
  name STRING
)
USING delta
""")
spark.sql("""
INSERT INTO
    default.first_table (id, name, status)
VALUES
    (1, 'Alice', 'active'),
    (2, 'Bob', 'active'),
    (3, 'Charlie', 'active'),
    (4, 'Daisy', 'active'),
    (5, 'Ethan', 'active');
""").show()

image.png

GCS にて Delta Lake のディレクトリが作成されていることを確認します。

image.png

5. Delta Lake 用の BigLake 外部テーブルの作成

{project_id}を実際のプロジェクト ID に置き換えて以下のコマンドを実行します。

CREATE OR REPLACE EXTERNAL TABLE `{project_id}.qiita.delta_lake_first_table`
OPTIONS(
  format="DELTA_LAKE",
  uris=["gs://manabianqiita/deltalake/first_table"]
);

CONNECTION (接続)を利用せずにテーブルを作成しておりますが、本番環境では非推奨のようです。

接続なしでも Delta Lake 外部テーブルを作成できますが、次の理由からおすすめしません。

出所:Delta Lake 用の BigLake 外部テーブルを作成する | BigQuery | Google Cloud

6. Delta Lake 用の BigLake 外部テーブルに対するクエリ実行

SELECT * FROM `qiita.delta_lake_first_table` ORDER BY id LIMIT 10;

image.png

Delta Lake テーブルのデータ操作後の Delta Lake 用の BigLake 外部テーブルの確認

1. Delta Lake テーブルに対する DELETE を実施

spark.sql("""
DELETE FROM 
    default.first_table
    WHERE
        id > 3;
""").show()

image.png

2. BigLake 外部テーブルの作成

メタデータの更新を実施することなく、最新データを取得することができます。

SELECT * FROM `qiita.delta_lake_first_table` ORDER BY id LIMIT 10;

image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?