概要
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 経由で書き込みが実施できません。
出所: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 構文だけで増分連携が可能となることから、効率的なデータ連携が可能となります。
出所:Databricks上でテーブルをクローンする | Databricks on AWS
出所:Databricks上でテーブルをクローンする | Databricks on AWS
出所:Delta Lake 用の BigLake 外部テーブルを作成する | BigQuery | Google Cloud
事前準備
Databricks -> GCS
下記の記事を参考に Databricks -> GCS のデータ書き込みが実施できるようにしてください。
Databricks にてカタログを作成
本手順では、 manabian_test_01 というカタログが存在することを前提としています。
BigQuery にてデータセットを作成
本手順では、 manabian_test_01 というデータセットが存在することを前提としています。
実施手順
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
)
"""
)
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}")
テーブルにデータが書き込まれたことを確認します。
spark.table(f"{catalog_name}.{schema_name}.{table_name_01}").display()
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()
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"]
);
本手順では接続なしの手順となっておりますが、下記のような注意事項がドキュメントに記載されています。
出所:Delta Lake 用の BigLake 外部テーブルを作成する | BigQuery | Google Cloud
データを参照できることを確認します。
SELECT * FROM manabian_test_01.databricks_table_01
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()
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()
BigQuery にてテーブルをクエリすると id が 4 のレコードを表示できることを確認できます。
SELECT * FROM manabian_test_01.databricks_table_01
Delta Lake 用の BigLake 外部テーブルでは、 Apache Iceberg 外部テーブルのようなメタデータファイルの更新は不要です。
出所:Delta Lake 用の BigLake 外部テーブルを作成する | BigQuery | Google Cloud