すべてのプロダクト
Search
ドキュメントセンター

E-MapReduce:Hologres データの読み書き

最終更新日:Jul 09, 2026

Hologres Spark コネクタを使用すると、必要な設定を追加することで EMR Serverless Spark を Hologres に接続できます。このトピックでは、Serverless Spark 環境で Hologres のデータを読み書きする方法について説明します。

制限事項

Spark コネクタを使用するには、Hologres のバージョンが 1.3 以降である必要があります。インスタンスのバージョンは、Hologres コンソールInstance Details ページで確認できます。インスタンスが 1.3 より前のバージョンの場合は、インスタンスをアップグレードするか、Hologres の DingTalk グループ (ID:32314975) に参加してアップグレードを依頼してください。

アクセス方法

Hologres には 2 つの方法でアクセスできます。要件に最適な方法を選択してください:

アクセス方法

説明

シナリオ

参照

方法 1:タスク/セッションレベルの設定

タスクまたはセッションごとに、Hologres の接続情報 (JDBC URL、ユーザー名、パスワード、その他のパラメータ) を個別に設定します。

  • アドホックなデータアクセスが必要

  • タスクごとに異なる Hologres インスタンスへアクセスする必要がある

  • タスク単位でのきめ細かなアクセス制御が必要

このトピック

方法 2:データカタログによる一元設定 (推奨)

EMR Serverless Spark の [Data Catalogs] 機能を使用して Hologres のデータカタログを追加します。カタログを追加すると、ワークスペース内のすべてのジョブとセッションは、デフォルトで許可されたデータにアクセスできます。

説明

エンジンバージョン esr-4.9.0 以降のみサポートされます。

  • Hologres のデータに頻繁にアクセスする必要がある

  • 複数のタスクで同一の Hologres アクセス設定を共有する

  • タスク設定を簡素化し、開発効率を向上させる

データカタログの管理

説明

ワークスペースで Hologres のデータに長期的かつ頻繁にアクセスする必要がある場合は、設定の繰り返しを減らし、開発効率を向上させるために、方法 2 (データカタログ) を推奨します。

操作手順

ステップ 1:hologres-connector-spark JAR の取得とアップロード

説明

EMR Serverless Spark の esr-4.8.0 以降には、Hologres コネクタが組み込まれています。このステップは、esr-4.8.0 より前のバージョンを使用している場合にのみ必要です。

  1. Hologres のデータを読み書きするには、Spark にコネクタの JAR ファイルが必要です。Maven Central Repository からダウンロードできます。このトピックではバージョン 1.5.6 を使用します:hologres-connector-spark-3.x-1.5.6-jar-with-dependencies.jar

  2. ダウンロードした hologres-connector-spark JAR ファイルを OSS にアップロードします。手順については、「シンプルアップロード」をご参照ください。

ステップ 2:ネットワーク接続の追加

  1. ネットワーク情報を取得します。

    Hologres ページに移動し、対象の Hologres インスタンスの詳細ページに移動して、VPC と vSwitch の情報を確認します。

  2. ネットワーク接続を追加します。

    Serverless Spark が Hologres にアクセスするには、Hologres クラスターへのネットワーク接続が必要です。ネットワーク接続の詳細については、「EMR Serverless Spark と他の VPC 間のネットワーク接続」をご参照ください。

ステップ 3:Hologres データベースとテーブルの作成

  1. Hologres インスタンスに接続します。詳細については、「インスタンスへの接続」をご参照ください。

  2. [SQL Editor] タブで、新しい一時クエリに次の SQL 文を入力して実行します。

    -- データベースを作成します。
    CREATE DATABASE testdb;
    -- テーブルを作成します。
    CREATE TABLE "public"."test" (
        "id" text  NULL,
        "name" text  NULL);
    -- データを挿入します。
    INSERT INTO public.test VALUES ('1001','jack'),('1002','tony'),('1003','mike');
    -- データをクエリします。
    SELECT * FROM public.test 

    image

ステップ 4:Hologres データの読み書き

例 1:SQL セッション

この例では、SQL セッションを使用して Hologres のデータを読み書きする方法を示します。

  1. SQL セッションを作成します。詳細については、「SQL セッションの管理」をご参照ください。

    セッションを作成する際に、ネットワーク接続リストから前のステップで作成したネットワーク接続を選択します。Spark Configuration セクションで、hologres-connector-spark を読み込むために次のパラメータを追加します。

    # hologres-connector の JAR ファイルを追加します (esr-4.8.0 より前のバージョンでのみ必要)。
    spark.emr.serverless.user.defined.jars oss://<bucket>/hologres-connector-spark-3.x-<version>.jar
    
    # Hologres カタログを設定します。
    spark.sql.catalog.hologres_external_test_db com.alibaba.hologres.spark3.HoloTableCatalog
    spark.sql.catalog.hologres_external_test_db.username ***
    spark.sql.catalog.hologres_external_test_db.password ***
    spark.sql.catalog.hologres_external_test_db.jdbcurl jdbc:postgresql://hgpostcn-cn-***-vpc-st.hologres.aliyuncs.com:80/testdb

    次の表にパラメータを示します。

    パラメータ

    説明

    spark.emr.serverless.user.defined.jars

    oss://<bucket>/hologres-connector-spark-3.x-<version>.jar

    ユーザー定義 JAR ファイルのパスを指定します。

    spark.sql.catalog.hologres_external_test_db

    com.alibaba.hologres.spark3.HoloTableCatalog

    Spark 3.x では、このパラメータを使用して Hologres のデータソースを外部カタログとして設定します。この値は固定です。

    spark.sql.catalog.hologres_external_test_db.username

    LTAI******

    Alibaba Cloud アカウントの AccessKey ID です。機密情報の取り扱いには、シークレット管理の使用を推奨します。詳細については、「シークレット管理を使用した機密情報の管理」をご参照ください。

    spark.sql.catalog.hologres_external_test_db.password

    mXYV******

    Alibaba Cloud アカウントの AccessKey Secret です。機密情報の取り扱いには、シークレット管理の使用を推奨します。詳細については、「シークレット管理を使用した機密情報の管理」をご参照ください。

    spark.sql.catalog.hologres_external_test_db.jdbcurl

    jdbc:postgresql://hgpostcn-cn-***-vpc-st.hologres.aliyuncs.com:80/testdb

    Hologres インスタンスの JDBC 接続 URL です。

    パラメーター名の hologres_external_test_db の部分をカスタマイズできます。

  2. [Data Development] ページで [SparkSQL] ジョブを作成し、右上から作成した SQL セッションを選択します。

    詳細については、「SparkSQL 開発」をご参照ください。

  3. 次のコードを新しい SparkSQL タブに貼り付け、Run をクリックします。

    -- hologres_external_test_db カタログに切り替えます。
    USE hologres_external_test_db;
    -- データを書き込みます。
    INSERT INTO `public`.test VALUES ('1004','tom');
    -- データをクエリします。
    SELECT * FROM `public`.test;

    image

例 2:ストリーミングジョブ

この PySpark の例では、Kafka からデータを読み取り、ストリーミングジョブとして Hologres に書き込む方法を示します。

説明

Kafka と Hologres 間のネットワーク接続が確立されていることを確認してください。Kafka と Hologres は、同一の VPC と vSwitch にデプロイすることを推奨します。

  1. このコード例では、Kafka の情報と Hologres のテーブルを実際の値に置き換えてください。

    from pyspark.sql import SparkSession
    from pyspark.sql.functions import col
    
    # Kafka 情報を設定します。
    servers = "alikafka-serverless-cn-xxxxx-vpc.alikafka.aliyuncs.com:9092"  # Kafka ブートストラップサーバーに置き換えてください。
    topic = "topic-name"  # Kafka トピックに置き換えてください。
    
    # SparkSession を作成します。
    spark = SparkSession.builder \
        .appName("test read kafka") \
        .getOrCreate()
    
    # Kafka ストリームを読み取ります。
    df = spark \
        .readStream \
        .format("kafka") \
        .option("kafka.bootstrap.servers", servers) \
        .option("subscribe", topic) \
        .load()
    
    # Hologres に書き込む関数を定義します (マイクロバッチごとに呼び出されます)。
    def write_to_hologres(batch_df, batch_id):
        print(f"Writing batch {batch_id} to Hologres...")
        batch_df.write \
            .mode("append") \
            .insertInto("hologres_external_test_db.public.test")  # Hologres テーブルに置き換えてください。
    
    # キーと値を文字列に変換してストリームを書き込みます。
    query = df.selectExpr("CAST(key AS STRING)", "CAST(value AS STRING)") \
        .writeStream \
        .foreachBatch(write_to_hologres) \
        .outputMode("append") \
        .trigger(processingTime='30 seconds') \
        .start()
    
    # ストリーミングクエリが終了するのを待ちます (これにより、ノートブックでのセル実行がブロックされます)。
    query.awaitTermination()
  2. ファイルをアップロードします。

    1. Artifacts ページで Upload File をクリックします。

    2. Upload File ダイアログボックスで、アップロード領域をクリックして前のステップの Python ファイルを選択するか、ファイルをアップロード領域にドラッグします。

  3. ストリーミングジョブを作成して実行します。

    1. Development ページで、image (Create) アイコンをクリックします。

    2. 表示されるダイアログボックスで Name を入力し、Application (Streaming) リストから PySpark を選択して、OK をクリックします。

    3. 新しい開発タブで、次のパラメータを設定し、その他は既定値のままにします。その後、Publish をクリックします。

      パラメータ

      説明

      [Main Python Resources]

      前のステップでアップロードした Python ファイルを選択します。

      Engine Version

      互換性のある Spark バージョンを選択します。この例では esr-4.6.0 を使用します。

      Network Connection

      ステップ 2 で作成したネットワーク接続を選択します。

      [Spark Configuration]

      # hologres-connector の JAR ファイルを追加します (esr-4.8.0 より前のバージョンでのみ必要)。
      spark.emr.serverless.user.defined.jars              oss://<bucket>/test_script/hologres-connector-spark-3.x-1.5.6-jar-with-dependencies.jar
      # Hologres カタログを設定します。
      spark.sql.catalog.hologres_external_test_db com.alibaba.hologres.spark3.HoloTableCatalog
      spark.sql.catalog.hologres_external_test_db.username ***
      spark.sql.catalog.hologres_external_test_db.password ***
      spark.sql.catalog.hologres_external_test_db.jdbcurl jdbc:postgresql://hgpostcn-cn-***-vpc-st.hologres.aliyuncs.com:80/testdb

      パラメータの詳細については、「例 1:SQL セッション」をご参照ください。

    4. ジョブを公開したら、Go to O&M をクリックします。開いたページで Start をクリックします。

  4. 結果を確認します。

    1. Kafka にメッセージを送信します。

      image

    2. Spark SQL を使用してデータをクエリします。image

例 3:ノートブックセッション

  1. ノートブックセッションを作成します。詳細については、「ノートブックセッションの管理」をご参照ください。

    セッションを作成する際に、ネットワーク接続リストから前のステップで作成したネットワーク接続を選択します。Spark Configuration セクションで、hologres-connector-spark を読み込むために次のパラメータを追加します。

    # hologres-connector の JAR ファイルを追加します (esr-4.8.0 より前のバージョンでのみ必要)。
    spark.emr.serverless.user.defined.jars oss://<bucket>/hologres-connector-spark-3.x-<version>.jar
  2. [Data Development] ページで [Notebook] ジョブを作成し、右上から作成したノートブックセッションを選択します。

  3. 次のコードを新しい Notebook タブに貼り付け、image をクリックします。

    import pandas as pd
    from pyspark.sql import SparkSession
    from pyspark.sql.types import StructType, StructField, StringType, IntegerType, LongType
    
    # 1. Pandas DataFrame を準備します。
    pdf = pd.DataFrame({
        "id": ["1006"],
        "name": ["sl"]
    })
    
    # 2. PySpark DataFrame に変換します。
    # (任意:データ型を正しくするために、スキーマを明示的に定義します)
    schema = StructType([
        StructField("id", StringType(), True),
        StructField("name", StringType(), True)
    ])
    
    df = spark.createDataFrame(pdf, schema=schema)
    
    # Hologres に書き込みます。
    df.write \
      .format("hologres") \
      .option("username", "LTAI******") \
      .option("password", "mXYV******") \
      .option("jdbcurl", "jdbc:postgresql://hgpostcn-cn-***-vpc-st.hologres.aliyuncs.com:80/testdb") \
      .option("table", "test") \
      .mode("append") \
      .save()
    
    # データを読み取ります。
    readDf = spark.read\
      .format("hologres") \
      .option("username", "LTAI******") \
      .option("password", "mXYV******") \
      .option("jdbcurl", "jdbc:postgresql://hgpostcn-cn-***-vpc-st.hologres.aliyuncs.com:80/testdb") \
      .option("table", "test") \
      .load()
    
    readDf.select("id", "name").show(10)

    次の表にパラメータを示します。

    パラメータ

    説明

    ユーザー名

    LTAI******

    Alibaba Cloud アカウントの AccessKey ID です。機密情報の取り扱いには、シークレット管理の使用を推奨します。詳細については、「シークレット管理を使用した機密情報の管理」をご参照ください。

    パスワード

    mXYV******

    Alibaba Cloud アカウントの AccessKey Secret です。機密情報の取り扱いには、シークレット管理の使用を推奨します。詳細については、「シークレット管理を使用した機密情報の管理」をご参照ください。

    jdbcurl

    jdbc:postgresql://hgpostcn-cn-***-vpc-st.hologres.aliyuncs.com:80/testdb

    Hologres インスタンスの JDBC 接続 URL です。

  4. 結果を確認します。image

一般的な Hologres カタログコマンド

Serverless Spark では、Hologres カタログを使用して、Hologres データベースを Spark SQL の 外部カタログ として接続します。各カタログは 1 つの Hologres データベースに厳密にバインドされており、データベース間のアクセスはサポートされません (同一のカタログで複数の Hologres データベースにアクセスすることはできません)。カタログ内の論理構造は Hologres と一致します:

Spark の概念

Hologres の概念

説明

カタログ

データベース

たとえば、hologres_external_test_db は、Hologres の testdb データベースにマッピングされます。

名前空間

スキーマ

たとえば、publictest_schema などです。デフォルトは public です。USE を使用して、現在のデフォルト名前空間を切り替えることができます。

テーブル

テーブル

テーブル名を直接参照する前に、namespace.table_name (例: public.test) を明示的に指定するか、USE namespace を実行する必要があります。

Hologres カタログの使用

Spark の Hologres カタログは、1 つの Hologres データベースにのみマッピングされ、作成後に変更できません。

USE hologres_external_test_db;

すべての名前空間の表示

Spark では、名前空間は Hologres のスキーマに対応します。デフォルトのスキーマは public です。USE コマンドを使用して、セッションのデフォルトスキーマを変更できます。

-- Hologres カタログ内のすべての名前空間を表示します。これは、Hologres 内のすべてのスキーマに対応します。
SHOW NAMESPACES;

名前空間内のテーブルの表示

  • すべてのテーブルを表示します。

    SHOW TABLES;
  • 特定の名前空間内のテーブルを表示します。

    USE test_schema;
    SHOW TABLES;
    
    -- または以下を使用します:
    SHOW TABLES IN test_schema;

関連ドキュメント

Spark を使用して Hologres のデータを読み書きする方法の詳細については、「Spark を使用した Hologres データの読み書き」をご参照ください。