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

MaxCompute:MaxCompute からの Hologres アクセス

最終更新日:Apr 28, 2026

このトピックでは、MaxCompute から Hologres にアクセスする方法について説明します。

背景情報

Hologres は Alibaba Cloud のリアルタイムインタラクティブ分析プロダクトです。データ移行なしに MaxCompute データ分析を高性能でアクセラレーションできます。Hologres のリアルタイムデータと MaxCompute のオフラインデータに対してフェデレーテッド分析を実行することで、リアルタイムとオフラインの両方に対応した統合データウェアハウスを構築できます。この組み合わせにより、大規模オフライン分析、リアルタイム運用分析、インタラクティブクエリなど、さまざまなビジネスシナリオの要件を満たすことができます。

前提条件

  • MaxCompute 環境を準備済みです。

  • DataWorks を有効化済みです。

    詳細については、「DataWorks の有効化」をご参照ください。

  • Hologres を有効化し、HoloWeb に接続済みです。

    詳細については、「Hologres の有効化」および「HoloWeb への接続とクエリの実行」をご参照ください。

  • PostgreSQL JDBC ドライバーをダウンロード済みです。

    このチュートリアルでは、Linux システムの /home/postgreSQL ディレクトリに保存されている postgresql-42.2.16.jar ドライバーを使用します。

SQL 外部テーブルを使用した Hologres アクセス

  1. Hologres コンソールでターゲットインスタンスを選択し、mc_db_holo という名前の Hologres データベースを作成します。 詳細については、「Hologres データベースの作成」をご参照ください。

  2. HoloWeb で、mc_db_holo データベースに対して次の文を実行し、mc_sql_holo テーブルを作成してデータを挿入します。

    Hologres テーブルの作成方法については、「Hologres テーブルの作成」をご参照ください。

    CREATE TABLE mc_sql_holo(
            id INTEGER,
            name TEXT
    );
    
    INSERT INTO mc_sql_holo VALUES
            (1,'zhangsan'),
            (2,'lisi'),
            (3,'wangwu')
    ;
  3. RAM コンソールで、AliyunOdpsHoloRole という名前の RAM ロールを作成し、その信頼ポリシーを変更します。

    RAM ロールの作成方法については、「RAM ロールの作成」をご参照ください。

    説明

    このチュートリアルでは、RAM ロールの信頼できるエンティティは Alibaba Cloud アカウント です。

  4. AliyunOdpsHoloRole RAM ロールを Hologres インスタンスに追加し、権限を付与します。

    詳細については、「Hologres インスタンスへの RAM ロールの追加と権限付与」をご参照ください。

  5. MaxCompute クライアントで、次の文を実行して mc_externaltable_holo という名前の外部テーブルを作成します。

    create external table if not exists mc_externaltable_holo
    (
        id int ,
        name string
    )
    stored by 'com.aliyun.odps.jdbc.JdbcStorageHandler'
    with serdeproperties (
      'odps.properties.rolearn'='acs:ram::13969******5947:role/aliyunodpsholorole')
    LOCATION 'jdbc:postgresql://hgprecn-cn-2r42******-cn-hangzhou-internal.hologres.aliyuncs.com:80/mc_db_holo?currentSchema=public&useSSL=false&table=mc_sql_holo/'
    TBLPROPERTIES (
      'mcfed.mapreduce.jdbc.driver.class'='org.postgresql.Driver',
      'odps.federation.jdbc.target.db.type'='holo',
      'odps.federation.jdbc.colmapping'='id:id,name:name'
    );
    説明

    外部テーブルの作成に使用されるパラメーターの詳細については、「Hologres 外部テーブル」をご参照ください。

  6. 外部テーブルを作成後、MaxCompute クライアントで次の文を実行して Hologres 外部テーブルをクエリします。

    set odps.sql.split.hive.bridge=true;
    set odps.sql.hive.compatible=true;
    select * from mc_externaltable_holo limit 10;
    説明

    SET 操作のプロパティの詳細については、「SET 操作」をご参照ください。

    クエリの結果は次のとおりです。

    +----+----------+
    | id | name     |
    +----+----------+
    | 1  | zhangsan |
    | 2  | lisi     |
    | 3  | wangwu   |
    +----+----------+
  7. MaxCompute クライアントで次の文を実行して、Hologres 外部テーブルにデータを書き込みます。

    set odps.sql.split.hive.bridge=true;
    set odps.sql.hive.compatible=true;
    insert into mc_externaltable_holo values (4,'alice');
  8. HoloWeb で、mc_sql_holo テーブルのデータをクエリし、新しいデータが書き込まれたことを確認します。

    select * from mc_sql_holo;

ローカルモードでの Spark による Hologres アクセス

  1. HoloWeb で、mc_db_holo データベースに対して次の文を実行し、mc_jdbc_holo という名前の Hologres テーブルを作成します。

    Hologres テーブルの作成方法については、「Hologres テーブルの作成」をご参照ください。

    CREATE TABLE mc_jdbc_holo(
            id INTEGER,
            name TEXT
    );
  2. Linux システム上で、/home/pythoncode ディレクトリに holo_local.py という名前の Python ファイルを作成します。

    以下のコードはサンプル Python スクリプトです。

    from pyspark.sql import SparkSession
    
    spark = SparkSession \
                .builder \
                .appName("Spark_local") \
                .config("spark.eventLog.enabled","false") \
                .getOrCreate()
    
    jdbcDF = spark.read.format("jdbc"). \
                options(
                url='jdbc:postgresql://hgprecn-cn-2r42******-cn-hangzhou.hologres.aliyuncs.com:80/mc_db_holo',
                dbtable='mc_jdbc_holo',
                user='LTAI****************',
                password='********************',
                driver='org.postgresql.Driver').load()
    
    jdbcDF.printSchema()

    以下の表は、スクリプト内のパラメーターを示しています。

    • urlpostgresql ドライバーを使用する JDBC 接続 URL です。

      • hgprecn-cn-2r42******-cn-hangzhou.hologres.aliyuncs.com:80: Hologres インスタンスのパブリックエンドポイントです。エンドポイントを取得する方法については、「インスタンスの詳細の表示」をご参照ください。

      • mc_db_holo: ターゲット Hologres データベースの名前です。このチュートリアルでは、データベース名は mc_db_holo です。

    • dbtable: Hologres 内のソーステーブルの名前です。このチュートリアルでは、テーブル名は mc_jdbc_holo です。

    • user: Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID です。AccessKey 管理ページで AccessKey ID を取得できます。

    • password: 指定された AccessKey ID の AccessKey Secret です。AccessKey 管理ページで AccessKey Secret を取得できます。

    • driver: PostgreSQL ドライバーです。値は org.postgresql.Driver である必要があります。

  3. Linux システム上の任意のディレクトリから、spark-submit コマンドを実行してローカルジョブを送信します。

    spark-submit -- master local -- driver-class-path /home/postgreSQL/postgresql-42.2.16.jar -- jars /home/postgreSQL/postgresql-42.2.16.jar /home/pythoncode/holo_local.py

    Spark ログを確認します。mc_jdbc_holo テーブルのスキーマと出力されたスキーマが一致する場合、接続は成功しています。

クラスターモードでの Spark による Hologres アクセス

  1. HoloWeb で、mc_db_holo データベースに対して次の文を実行し、mc_jdbc_holo という名前の Hologres テーブルを作成します。

    Hologres テーブルの作成方法については、「Hologres テーブルの作成」をご参照ください。

    CREATE TABLE mc_jdbc_holo(
            id INTEGER,
            name TEXT
    );
  2. Linux システム上で、/home/pythoncode ディレクトリに holo_yarncluster.py という名前の Python ファイルを作成します。

    以下のコードはサンプル Python スクリプトです。

    from pyspark.sql import SparkSession
    
    spark = SparkSession \
                .builder \
                .appName("Spark_yarn") \
                .getOrCreate()
    
    jdbcDF = spark.read.format("jdbc"). \
                options(
                url='jdbc:postgresql://hgprecn-cn-2r42******-cn-hangzhou-internal.hologres.aliyuncs.com:80/mc_db_holo',
                dbtable='mc_jdbc_holo',
                user='LTAI****************',
                password='********************',
                driver='org.postgresql.Driver').load()
    
    jdbcDF.printSchema()

    以下の表は、スクリプト内のパラメーターを示しています。

    • urlpostgresql ドライバーを使用する JDBC 接続 URL です。

      • hgprecn-cn-2r42******-cn-hangzhou-internal.hologres.aliyuncs.com:80: Hologres インスタンスのクラシックネットワークエンドポイントです。エンドポイントを取得する方法については、「インスタンスの詳細の表示」をご参照ください。

      • mc_db_holo: ターゲット Hologres データベースの名前です。このチュートリアルでは、データベース名は mc_db_holo です。

    • dbtable: Hologres 内のソーステーブルの名前です。このチュートリアルでは、テーブル名は mc_jdbc_holo です。

    • user: Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID です。AccessKey 管理ページで AccessKey ID を取得できます。

    • password: 指定された AccessKey ID の AccessKey Secret です。AccessKey 管理ページで AccessKey Secret を取得できます。

    • driver: PostgreSQL ドライバーです。値は org.postgresql.Driver である必要があります。

  3. MaxCompute Spark クライアントを解凍したディレクトリの /home/spark2.4.5/spark-2.4.5-odps0.33.2/conf にある spark-defaults.conf ファイルを設定します。

    # 次の構成を設定します。
    spark.hadoop.odps.project.name = <MaxCompute_Project_Name>
    spark.hadoop.odps.end.point = <Endpoint>
    spark.hadoop.odps.runtime.end.point = <VPC_Endpoint>
    spark.hadoop.odps.access.id = <AccessKey_ID>
    spark.hadoop.odps.access.key = <AccessKey_Secret>
    
    spark.hadoop.odps.cupid.trusted.services.access.list = <Hologres_Classic_Network>
    
    # 以下の内容は変更しません。
    spark.master = yarn-cluster
    spark.driver.cores = 2
    spark.driver.memory = 4g
    
    spark.dynamicAllocation.shuffleTracking.enabled = true
    spark.dynamicAllocation.shuffleTracking.timeout = 20s
    spark.dynamicAllocation.enabled = true
    spark.dynamicAllocation.maxExecutors = 10
    spark.dynamicAllocation.initialExecutors = 2
    spark.executor.cores = 2
    spark.executor.memory = 8g
    
    spark.eventLog.enabled = true
    spark.eventLog.overwrite = true
    spark.eventLog.dir = odps://admin_task_project/cupidhistory/sparkhistory
    
    spark.sql.catalogImplementation = hive
    spark.sql.sources.default = hive

    以下の表は、構成ファイル内のパラメーターを示しています。

    • MaxCompute_Project_Name: アクセスする MaxCompute プロジェクトの名前です。

      これは MaxCompute プロジェクト名であり、ワークスペース名ではありません。MaxCompute コンソールにログインし、左上隅でリージョンを切り替えて、左側のナビゲーションウィンドウで 構成の管理 > プロジェクト管理 を選択すると、プロジェクト名を確認できます。

    • AccessKey_ID: 対象の MaxCompute プロジェクトにアクセスする権限を持つ AccessKey ID です。

      AccessKey 管理ページで AccessKey ID を取得できます。

    • AccessKey_Secret: 指定された AccessKey ID の AccessKey Secret です。

    • Endpoint: MaxCompute プロジェクトが存在するリージョンのパブリックエンドポイントです。

      各リージョンのパブリックエンドポイントの詳細については、「エンドポイント」をご参照ください。

    • VPC_Endpoint: MaxCompute プロジェクトが存在するリージョンの VPC エンドポイントです。

      各リージョンの VPC エンドポイントの詳細については、「VPC エンドポイント」をご参照ください。

    • Hologres_Classic_Network: Hologres インスタンスのクラシックネットワークエンドポイントです。この設定により、MaxCompute サンドボックス環境から Hologres インスタンスへの接続を許可するネットワークポリシーが構成されます。この設定がないと、MaxCompute クラスターは外部サービスにアクセスできません。

  4. Linux システム上の任意のディレクトリから、spark-submit コマンドを実行してジョブを送信します。

    spark-submit -- master yarn-cluster -- driver-class-path /home/postgreSQL/postgresql-42.2.16.jar -- jars /home/postgreSQL/postgresql-42.2.16.jar /home/pythoncode/holo_yarncluster.py

    ジョブを送信後、正常に完了したジョブからは診断用の Logview URL および Spark UI Jobview URL が返されます。

    • ジョブの Logview URL。Logview

    • Spark UI Jobview URL。Jobview

  5. Logview URL を開きます。ジョブステータスが success の場合、ジョブの詳細 > master-0 > StdOut に移動して、jdbcDF.printSchema() の出力を確認します。

    Logview

    StdOut ログを確認します。mc_jdbc_holo テーブルのスキーマと出力されたスキーマが一致する場合、接続は成功しています。StdOut

    説明

    Spark UI Jobview URL を開いて、ジョブを表示および診断することもできます。

DataWorks での Spark による Hologres アクセス

  1. HoloWeb で、mc_db_holo データベースに対して次の文を実行し、mc_jdbc_holo という名前の Hologres テーブルを作成します。

    Hologres テーブルの作成方法については、「Hologres テーブルの作成」をご参照ください。

    CREATE TABLE mc_jdbc_holo(
            id INTEGER,
            name TEXT
    );
  2. MaxCompute Spark クライアントを解凍したディレクトリの /home/spark2.4.5/spark-2.4.5-odps0.33.2/conf にある spark-defaults.conf ファイルを設定します。

    # 次の構成を設定します。
    spark.hadoop.odps.project.name = <MaxCompute_Project_Name>
    spark.hadoop.odps.end.point = <Endpoint>
    spark.hadoop.odps.runtime.end.point = <VPC_Endpoint>
    spark.hadoop.odps.access.id = <AccessKey_ID>
    spark.hadoop.odps.access.key = <AccessKey_Secret>
    
    spark.hadoop.odps.cupid.trusted.services.access.list = <Hologres_Classic_Network>
    
    # 以下の内容は変更しません。
    spark.master = yarn-cluster
    spark.driver.cores = 2
    spark.driver.memory = 4g
    
    spark.dynamicAllocation.shuffleTracking.enabled = true
    spark.dynamicAllocation.shuffleTracking.timeout = 20s
    spark.dynamicAllocation.enabled = true
    spark.dynamicAllocation.maxExecutors = 10
    spark.dynamicAllocation.initialExecutors = 2
    spark.executor.cores = 2
    spark.executor.memory = 8g
    
    spark.eventLog.enabled = true
    spark.eventLog.overwrite = true
    spark.eventLog.dir = odps://admin_task_project/cupidhistory/sparkhistory
    
    spark.sql.catalogImplementation = hive
    spark.sql.sources.default = hive

    以下の表は、構成ファイル内のパラメーターを示しています。

    • MaxCompute_Project_Name: アクセスする MaxCompute プロジェクトの名前です。

      これは MaxCompute プロジェクト名であり、ワークスペース名ではありません。MaxCompute コンソールにログインし、左上隅でリージョンを切り替えて、左側のナビゲーションウィンドウで 構成の管理 > プロジェクト管理 を選択すると、プロジェクト名を確認できます。

    • AccessKey_ID: 対象の MaxCompute プロジェクトにアクセスする権限を持つ AccessKey ID です。

      AccessKey 管理ページで AccessKey ID を取得できます。

    • AccessKey_Secret: 指定された AccessKey ID の AccessKey Secret です。

    • Endpoint: MaxCompute プロジェクトが存在するリージョンのパブリックエンドポイントです。

      各リージョンのパブリックエンドポイントの詳細については、「エンドポイント」をご参照ください。

    • VPC_Endpoint: MaxCompute プロジェクトが存在するリージョンの VPC エンドポイントです。

      各リージョンの VPC エンドポイントの詳細については、「VPC エンドポイント」をご参照ください。

    • Hologres_Classic_Network: Hologres インスタンスのクラシックネットワークエンドポイントです。この設定により、MaxCompute サンドボックス環境から Hologres インスタンスへの接続を許可するネットワークポリシーが構成されます。この設定がないと、MaxCompute クラスターは外部サービスにアクセスできません。

  3. DataWorks コンソールにログインします。

  4. 左側のナビゲーションウィンドウで、ワークスペース をクリックします。

  5. ワークスペース一覧 ページで、対象のワークスペースの 操作 列の クイックアクセス > データ開発 をクリックします。

  6. PostgreSQL JDBC リソースと ODPS Spark ノードを作成します。

    1. 対象のワークフロー内で右クリックし、リソースの作成 > MaxCompute > ファイル を選択します。リソースの作成 ダイアログボックスで、PostgreSQL JDBC JAR ファイルをアップロードし、OK をクリックします。

      説明
    2. 対象のワークフロー内で右クリックし、リソースの作成 > MaxCompute > Python を選択します。リソースの作成 ダイアログボックスで、リソース名 を入力し、OK をクリックします。

      この実践では、リソース名read_holo.py に設定します。

    3. read_holo.py に次のスクリプト内容を入力し、保存 をクリックします。

      from pyspark.sql import SparkSession
      
      spark = SparkSession \
                  .builder \
                  .appName("Spark") \
                  .getOrCreate()
      
      jdbcDF = spark.read.format("jdbc"). \
                  options(
                  url='jdbc:postgresql://hgprecn-cn-2r42******-cn-hangzhou-internal.hologres.aliyuncs.com:80/mc_db_holo',
                  dbtable='mc_jdbc_holo',
                  user='LTAI****************',
                  password='********************',
                  driver='org.postgresql.Driver').load()
      
      jdbcDF.printSchema()

      以下の表は、スクリプト内のパラメーターを示しています。

      • urlpostgresql ドライバーを使用する JDBC 接続 URL です。

        • hgprecn-cn-2r42******-cn-hangzhou.hologres.aliyuncs.com:80: Hologres インスタンスのパブリックエンドポイントです。エンドポイントを取得する方法については、「インスタンスの詳細の表示」をご参照ください。

        • mc_db_holo: ターゲット Hologres データベースの名前です。このチュートリアルでは、データベース名は mc_db_holo です。

      • dbtable: Hologres 内のソーステーブルの名前です。このチュートリアルでは、テーブル名は mc_jdbc_holo です。

      • user: Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID です。AccessKey 管理ページで AccessKey ID を取得できます。

      • password: 指定された AccessKey ID の AccessKey Secret です。AccessKey 管理ページで AccessKey Secret を取得できます。

      • driver: PostgreSQL ドライバーです。値は org.postgresql.Driver である必要があります。

    4. 対象のワークフロー内で右クリックし、ノードの作成 > ODPS Spark を選択します。ノードの作成 ダイアログボックスで、ノード名 を入力し、OK をクリックします。

    5. spark_read_holo ノードを設定します。

      • 構成項目spark.hadoop.odps.cupid.trusted.services.access.list

      • hgprecn-cn-2r42******-cn-hangzhou-internal.hologres.aliyuncs.com:80。これは Hologres のクラシックネットワークエンドポイントです。

        説明

        この設定により、MaxCompute サンドボックス環境から Hologres インスタンスへの接続を許可するネットワークポリシーが構成されます。この設定がないと、MaxCompute クラスターは外部サービスにアクセスできません。

  7. ワークフローキャンバス上で、spark_read_holo > 実行 を選択します。

    ジョブが実行されると、MaxCompute ジョブの診断情報、Logview URL、および Spark UI Jobview URL を含むログが表示されます。

  8. Logview URL を開きます。ジョブステータスが success の場合、ジョブの詳細 > master-0 > StdOut に移動して、jdbcDF.printSchema() の出力を確認します。

    Logview

    StdOut ログを確認します。mc_jdbc_holo テーブルのスキーマと出力されたスキーマが一致する場合、接続は成功しています。StdOut

    説明

    Spark UI Jobview URL を開いて、ジョブを表示および診断することもできます。