> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-fix-nav-issues.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> ClickHouse を Databricks と統合

# ClickHouse と Databricks の統合

export const ClickHouseSupportedBadge = () => {
  return <div className="ClickHouseSupportedBadge">
            <div className="ClickHouseSupportedIcon">
                <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                    <path d="M1.30762 1.39073C1.30762 1.3103 1.37465 1.22986 1.46849 1.22986H2.64824C2.72868 1.22986 2.80912 1.29689 2.80912 1.39073V14.4886C2.80912 14.5691 2.74209 14.6495 2.64824 14.6495H1.46849C1.38805 14.6495 1.30762 14.5825 1.30762 14.4886V1.39073Z" fill="currentColor" />
                    <path d="M4.2832 1.39073C4.2832 1.3103 4.35023 1.22986 4.44408 1.22986H5.62383C5.70427 1.22986 5.7847 1.29689 5.7847 1.39073V14.4886C5.7847 14.5691 5.71767 14.6495 5.62383 14.6495H4.44408C4.36364 14.6495 4.2832 14.5825 4.2832 14.4886V1.39073Z" fill="currentColor" />
                    <path d="M7.25977 1.39073C7.25977 1.3103 7.3268 1.22986 7.42064 1.22986H8.60039C8.68083 1.22986 8.76127 1.29689 8.76127 1.39073V14.4886C8.76127 14.5691 8.69423 14.6495 8.60039 14.6495H7.42064C7.3402 14.6495 7.25977 14.5825 7.25977 14.4886V1.39073Z" fill="currentColor" />
                    <path d="M10.2354 1.39073C10.2354 1.3103 10.3024 1.22986 10.3962 1.22986H11.576C11.6564 1.22986 11.7369 1.29689 11.7369 1.39073V14.4886C11.7369 14.5691 11.6698 14.6495 11.576 14.6495H10.3962C10.3158 14.6495 10.2354 14.5825 10.2354 14.4886V1.39073Z" fill="currentColor" />
                    <path d="M13.2256 6.6057C13.2256 6.52526 13.2926 6.44482 13.3865 6.44482H14.5662C14.6466 6.44482 14.7271 6.51186 14.7271 6.6057V9.27354C14.7271 9.35398 14.6601 9.43442 14.5662 9.43442H13.3865C13.306 9.43442 13.2256 9.36739 13.2256 9.27354V6.6057Z" fill="currentColor" />
                </svg>
            </div>
            ClickHouse Supported
        </div>;
};

export const Image = ({img, alt, size}) => {
  return <Frame>
      <img src={img} alt={alt} />
    </Frame>;
};

ClickHouse Spark コネクタは Databricks とシームレスに連携します。このガイドでは、Databricks 向けのプラットフォーム固有のセットアップ、インストール、利用パターンについて説明します。

<div id="api-selection">
  ## Databricks での API の選択
</div>

デフォルトでは、Databricks は Unity Catalog を使用しており、Spark のカタログ登録はブロックされます。この場合は、**TableProvider API** (フォーマットベースのアクセス) を**必ず**使用する必要があります。

一方、**No isolation shared** アクセスモードのクラスターを作成して Unity Catalog を無効にすると、代わりに **Catalog API** を使用できます。Catalog API では、設定を一元管理でき、Spark SQL とネイティブに統合できます。

| Unity Catalog の状態            | 推奨 API                        | 注記                                       |
| ---------------------------- | ----------------------------- | ---------------------------------------- |
| **有効** (デフォルト)               | TableProvider API (フォーマットベース) | Unity Catalog により Spark のカタログ登録はブロックされます |
| **無効** (No isolation shared) | Catalog API                   | "No isolation shared" アクセスモードのクラスターが必要です |

<div id="installation">
  ## Databricks へのインストール
</div>

<div id="installation-ui">
  ### オプション 1: Databricks UI から JAR をアップロードする
</div>

1. ランタイム JAR をビルドするか、[ダウンロード](https://repo1.maven.org/maven2/com/clickhouse/spark/)します。
   ```bash theme={null}
   clickhouse-spark-runtime-{{ spark_binary_version }}_{{ scala_binary_version }}-{{ stable_version }}.jar
   ```

2. JAR を Databricks のワークスペースにアップロードします。
   * **Workspace** に移動し、目的のフォルダーを開きます
   * **Upload** をクリックし、JAR ファイルを選択します
   * JAR はワークスペースに保存されます

3. クラスターにライブラリをインストールします。
   * **Compute** に移動し、対象のクラスターを選択します
   * **Libraries** タブをクリックします
   * **Install New** をクリックします
   * **DBFS** または **Workspace** を選択し、アップロードした JAR ファイルを指定します
   * **Install** をクリックします

<Image img={require('@site/images/integrations/data-ingestion/apache-spark/databricks/databricks-libraries-tab.png')} alt="Databricks の Libraries タブ" />

<Image img={require('@site/images/integrations/data-ingestion/apache-spark/databricks/databricks-install-from-volume.png')} alt="ワークスペースボリュームからライブラリをインストール" />

4. ライブラリを読み込むため、クラスターを再起動します

<div id="installation-cli">
  ### オプション 2: Databricks CLI でインストール
</div>

```bash theme={null}
# JARをDBFSにアップロード
databricks fs cp clickhouse-spark-runtime-{{ spark_binary_version }}_{{ scala_binary_version }}-{{ stable_version }}.jar \
  dbfs:/FileStore/jars/

# クラスターにインストール
databricks libraries install \
  --cluster-id <your-cluster-id> \
  --jar dbfs:/FileStore/jars/clickhouse-spark-runtime-{{ spark_binary_version }}_{{ scala_binary_version }}-{{ stable_version }}.jar
```

<div id="installation-maven">
  ### オプション 3: Maven Coordinates (推奨)
</div>

1. Databricksワークスペースに移動します:
   * **Compute** → クラスターを選択します
   * **Libraries** タブをクリックします
   * **Install New** をクリックします
   * **Maven** タブを選択します

2. Maven coordinatesを追加します:

```text theme={null}
com.clickhouse.spark:clickhouse-spark-runtime-{{ spark_binary_version }}_{{ scala_binary_version }}:{{ stable_version }}
```

<Image img={require('@site/images/integrations/data-ingestion/apache-spark/databricks/databricks-maven-tab.png')} alt="Databricks Maven ライブラリの設定" />

3. **Install** をクリックし、ライブラリを読み込むためにクラスターを再起動します

<div id="tableprovider-api">
  ## TableProvider API を使用する
</div>

Unity Catalog が有効 (デフォルト) な場合、Unity Catalog によって Spark のカタログ登録がブロックされるため、**必ず** TableProvider API (フォーマットベースのアクセス) を使用する必要があります。"No isolation shared" アクセスモードのクラスターを使用して Unity Catalog を無効にしている場合は、代わりに [Catalog API](/ja/integrations/connectors/data-ingestion/apache-spark/spark-native-connector#register-the-catalog-required) を使用できます。

<div id="reading-data-table-provider">
  ### データの読み込み
</div>

<Tabs>
  <Tab title="Python">
    ```python theme={null}
    # TableProvider API を使用して ClickHouse から読み込む
    df = spark.read \
        .format("clickhouse") \
        .option("host", "your-clickhouse-cloud-host.clickhouse.cloud") \
        .option("protocol", "https") \
        .option("http_port", "8443") \
        .option("database", "default") \
        .option("table", "events") \
        .option("user", "default") \
        .option("password", dbutils.secrets.get(scope="clickhouse", key="password")) \
        .option("ssl", "true") \
        .load()

    # スキーマは自動的に推論されます
    df.display()
    ```
  </Tab>

  <Tab title="Scala">
    ```scala theme={null}
    val df = spark.read
      .format("clickhouse")
      .option("host", "your-clickhouse-cloud-host.clickhouse.cloud")
      .option("protocol", "https")
      .option("http_port", "8443")
      .option("database", "default")
      .option("table", "events")
      .option("user", "default")
      .option("password", dbutils.secrets.get(scope="clickhouse", key="password"))
      .option("ssl", "true")
      .load()

    df.show()
    ```
  </Tab>
</Tabs>

<div id="writing-data-unity">
  ### データの書き込み
</div>

<Tabs>
  <Tab title="Python">
    ```python theme={null}
    # ClickHouse に書き込みます。テーブルが存在しない場合は自動的に作成されます
    df.write \
        .format("clickhouse") \
        .option("host", "your-clickhouse-cloud-host.clickhouse.cloud") \
        .option("protocol", "https") \
        .option("http_port", "8443") \
        .option("database", "default") \
        .option("table", "events_copy") \
        .option("user", "default") \
        .option("password", dbutils.secrets.get(scope="clickhouse", key="password")) \
        .option("ssl", "true") \
        .option("order_by", "id") \  # 必須: 新しいテーブルを作成する場合は ORDER BY を指定します
        .option("settings.allow_nullable_key", "1") \  # 必須: ORDER BY に NULL 許容カラムが含まれる場合、ClickHouse Cloud では必要です
        .mode("append") \
        .save()
    ```
  </Tab>

  <Tab title="Scala">
    ```scala theme={null}
    df.write
      .format("clickhouse")
      .option("host", "your-clickhouse-cloud-host.clickhouse.cloud")
      .option("protocol", "https")
      .option("http_port", "8443")
      .option("database", "default")
      .option("table", "events_copy")
      .option("user", "default")
      .option("password", dbutils.secrets.get(scope="clickhouse", key="password"))
      .option("ssl", "true")
      .option("order_by", "id")  // 必須: 新しいテーブルを作成する場合は ORDER BY を指定します
      .option("settings.allow_nullable_key", "1")  // 必須: ORDER BY に NULL 許容カラムが含まれる場合、ClickHouse Cloud では必要です
      .mode("append")
      .save()
    ```
  </Tab>
</Tabs>

<Note>
  この例では、Databricks でシークレットスコープが事前設定されていることを前提としています。設定手順については、Databricks の [Secret management のドキュメント](https://docs.databricks.com/aws/en/security/secrets/) を参照してください。
</Note>

<div id="considerations">
  ## Databricks 固有の考慮事項
</div>

<div id="access-mode">
  ### アクセスモードの要件
</div>

ClickHouse Spark コネクタでは、**Dedicated** (旧称 Single User) アクセスモードが必要です。Unity Catalog が有効な構成では、Databricks が外部 DataSource V2 コネクタをブロックするため、**Standard** (旧称 Shared) アクセスモードはサポートされません。

| Access Mode             | Unity Catalog | Supported |
| ----------------------- | ------------- | --------- |
| Dedicated (Single User) | 有効            | ✅ はい      |
| Dedicated (Single User) | 無効            | ✅ はい      |
| Standard (Shared)       | 有効            | ❌ いいえ     |
| Standard (Shared)       | 無効            | ✅ はい      |

<div id="secret-management">
  ### シークレット管理
</div>

ClickHouse の認証情報を安全に保存するには、Databricks のシークレットスコープを使用します。

```python theme={null}
# シークレットにアクセスする
password = dbutils.secrets.get(scope="clickhouse", key="password")
```

設定手順については、Databricks の [Secret management のドキュメント](https://docs.databricks.com/aws/en/security/secrets/) を参照してください。

<div id="clickhouse-cloud">
  ### ClickHouse Cloud への接続
</div>

Databricks から ClickHouse Cloud に接続する場合は、次の設定を行います。

1. **HTTPS プロトコル**を使用します (`protocol: https`, `http_port: 8443`)
2. **SSL**を有効にします (`ssl: true`)

<div id="examples">
  ## 例
</div>

<div id="workflow-example">
  ### 完全なワークフローの例
</div>

<Tabs>
  <Tab title="Python">
    ```python theme={null}
    from pyspark.sql import SparkSession
    from pyspark.sql.functions import col

    # ClickHouse コネクタを使用して Spark を初期化
    spark = SparkSession.builder \
        .config("spark.jars.packages", "com.clickhouse.spark:clickhouse-spark-runtime-3.4_2.12:0.9.0") \
        .getOrCreate()

    # ClickHouse から読み込む
    df = spark.read \
        .format("clickhouse") \
        .option("host", "your-host.clickhouse.cloud") \
        .option("protocol", "https") \
        .option("http_port", "8443") \
        .option("database", "default") \
        .option("table", "source_table") \
        .option("user", "default") \
        .option("password", dbutils.secrets.get(scope="clickhouse", key="password")) \
        .option("ssl", "true") \
        .load()

    # データを変換
    transformed_df = df.filter(col("status") == "active")

    # ClickHouse に書き込む
    transformed_df.write \
        .format("clickhouse") \
        .option("host", "your-host.clickhouse.cloud") \
        .option("protocol", "https") \
        .option("http_port", "8443") \
        .option("database", "default") \
        .option("table", "target_table") \
        .option("user", "default") \
        .option("password", dbutils.secrets.get(scope="clickhouse", key="password")) \
        .option("ssl", "true") \
        .option("order_by", "id") \
        .mode("append") \
        .save()
    ```
  </Tab>

  <Tab title="Scala">
    ```scala theme={null}
    import org.apache.spark.sql.SparkSession
    import org.apache.spark.sql.functions.col

    // ClickHouse コネクタを使用して Spark を初期化
    val spark = SparkSession.builder
      .config("spark.jars.packages", "com.clickhouse.spark:clickhouse-spark-runtime-3.4_2.12:0.9.0")
      .getOrCreate()

    // ClickHouse から読み込む
    val df = spark.read
      .format("clickhouse")
      .option("host", "your-host.clickhouse.cloud")
      .option("protocol", "https")
      .option("http_port", "8443")
      .option("database", "default")
      .option("table", "source_table")
      .option("user", "default")
      .option("password", dbutils.secrets.get(scope="clickhouse", key="password"))
      .option("ssl", "true")
      .load()

    // データを変換
    val transformedDF = df.filter(col("status") === "active")

    // ClickHouse に書き込む
    transformedDF.write
      .format("clickhouse")
      .option("host", "your-host.clickhouse.cloud")
      .option("protocol", "https")
      .option("http_port", "8443")
      .option("database", "default")
      .option("table", "target_table")
      .option("user", "default")
      .option("password", dbutils.secrets.get(scope="clickhouse", key="password"))
      .option("ssl", "true")
      .option("order_by", "id")
      .mode("append")
      .save()
    ```
  </Tab>
</Tabs>

<div id="related">
  ## 関連ドキュメント
</div>

* [Spark Native Connector Guide](/ja/integrations/connectors/data-ingestion/apache-spark/spark-native-connector) - コネクタに関する完全なドキュメント
* [TableProvider API Documentation](/ja/integrations/connectors/data-ingestion/apache-spark/spark-native-connector#using-the-tableprovider-api) - フォーマットベースのアクセスの詳細
* [Catalog API Documentation](/ja/integrations/connectors/data-ingestion/apache-spark/spark-native-connector#register-the-catalog-required) - カタログベースのアクセスの詳細
