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 Cloud 以外の Databricks のテーブルのデータを BigQuery にレプリケーションする方法

Posted at

概要

Databricks のテーブルのデータを BigQuery に効率よくレプリケーションする方法である Databricks の Deep Clone テクノロジーの実施手順を紹介します。Databrics on AWS や Azure Databricks のテーブルのデータを BigQuery に連携する際に有効な手順となっています。

2025年10月13日時点でGCS に対するストレージ資格を登録できるのが Databricks on Google Cloud のみのであるため、Databrics on AWS や Azure Databricks を利用している場合には Unity Catalog 経由で書き込みが実施できません。

image.png

出所:Google Cloud Storageに接続するためのストレージ資格情報を作成する | Databricks on Google Cloud

そこで、 Databricks から Google Cloud Storage (GCS)に Delta Lakte テーブルを Deep Clone し、 BigQuery に Delta Lake 用の BigLake 外部テーブルとして参照する方法を検証し、本記事にまとめました。 Databricks の Deep Clone によりシンプルな CREATE TABLE CLONE 構文だけで増分連携が可能となることから、効率的なデータ連携が可能となります。

image.png

出所:Databricks上でテーブルをクローンする | Databricks on AWS

image.png

出所:Databricks上でテーブルをクローンする | Databricks on AWS

image.png

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

事前準備

Databricks -> GCS

下記の記事を参考に Databricks -> GCS のデータ書き込みが実施できるようにしてください。

Databricks にてカタログを作成

本手順では、 manabian_test_01 というカタログが存在することを前提としています。

image.png

BigQuery にてデータセットを作成

本手順では、 manabian_test_01 というデータセットが存在することを前提としています。

image.png

実施手順

1. Databricks にてデータベースオブジェクトの準備

スキーマとテーブルを作成します。

catalog_name = "manabian_test_01"
schema_name = "dbx_with_bq"

spark.sql(f"CREATE SCHEMA IF NOT EXISTS {catalog_name}.{schema_name}")
table_name_01 = "databricks_table_01"

spark.sql(
    f"""
    CREATE OR REPLACE TABLE {catalog_name}.{schema_name}.{table_name_01} (
        id int,
        str_col string
    )
    """
)

image.png

2. Databricks のテーブルに書き込み後に GCS に Depp Clone を実施

作成済みのテーブルにデータの書き込みを実施します。

schema = """
id int,
str_col string
"""
data = [
    {
        "id": 1,
        "str_col": "abc",
    },
    {
        "id": 2,
        "str_col": "def",
    },
    {
        "id": 3,
        "str_col": "ghi",
    },
]
df = spark.createDataFrame(data, schema=schema)
df.display()
df.write.mode("overwrite").saveAsTable(f"{catalog_name}.{schema_name}.{table_name_01}")

image.png

テーブルにデータが書き込まれたことを確認します。

spark.table(f"{catalog_name}.{schema_name}.{table_name_01}").display()

image.png

Databricks から GCS に Deep Clone を実施します。

gcs_bucket_name = "dbx_with_gcs

res_df = spark.sql(
    f"""
    CREATE OR REPLACE TABLE delta.`gs://{gcs_bucket_name}/tables/cloned_table_01`
        CLONE {catalog_name}.{schema_name}.{table_name_01};
    """
)
res_df.display()

image.png

image.png

3. BigQuery にて Delta Lake 用の BigLake 外部テーブルを作成しクエリを実施

CREATE OR REPLACE EXTERNAL TABLE `manabian_test_01.databricks_table_01`
OPTIONS(
  format="DELTA_LAKE",
  uris=["gs://dbx_with_gcs/tables/cloned_table_01"]
);

image.png

本手順では接続なしの手順となっておりますが、下記のような注意事項がドキュメントに記載されています。

image.png

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

データを参照できることを確認します。

SELECT * FROM manabian_test_01.databricks_table_01

image.png

4. Databricks にてデータを再度レプリケーションし BigQUery でクエリを実施

Databricks にて id が 4 のレコードを追加します。

schema = """
id int,
str_col string
"""
data = [
    {
        "id": 4,
        "str_col": "jkl",
    },
]
df = spark.createDataFrame(data, schema=schema)
df.display()

df.write.mode("append").saveAsTable(f"{catalog_name}.{schema_name}.{table_name_01}")

spark.table(f"{catalog_name}.{schema_name}.{table_name_01}").display()

image.png

Databricks から GCS に Deep Clone を実施します。source_num_of_files列が 2 であるがnum_copied_files列が 1 であることから増分連携されていることを確認できます。

res_df = spark.sql(
    f"""
    CREATE OR REPLACE TABLE delta.`gs://{gcs_bucket_name}/tables/cloned_table_01`
        CLONE {catalog_name}.{schema_name}.{table_name_01};
    """
)
res_df.display()

image.png

BigQuery にてテーブルをクエリすると id が 4 のレコードを表示できることを確認できます。

SELECT * FROM manabian_test_01.databricks_table_01

image.png

Delta Lake 用の BigLake 外部テーブルでは、 Apache Iceberg 外部テーブルのようなメタデータファイルの更新は不要です。

image.png

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

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?