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

AnalyticDB:Spark SQL を使用して C-Store テーブルのデータの読み取りまたは書き込みを行う

最終更新日:Nov 09, 2025

AnalyticDB for MySQL クラスターでは、Spark SQL を使用して、C-Store テーブル (XUANWU テーブルエンジンを使用するテーブル) のデータをリアルタイムまたはバッチモードで読み書きできます。このトピックでは、これらの操作を実行する方法について説明します。

前提条件

  • AnalyticDB for MySQL Enterprise Edition、Basic Edition、または Data Lakehouse Edition クラスターが作成されていること。

    説明
    • Data Lakehouse Edition クラスターの予約済みストレージリソースの量は 0 ACU より大きい必要があります。

    • Enterprise Edition クラスターの予約済みリソースの量は 0 ACU より大きい必要があります。

    • Basic Edition クラスターの予約済みリソースの量は 0 ACU より大きい必要があります。

  • AnalyticDB for MySQL Enterprise Edition、Basic Edition、または Data Lakehouse Edition クラスター用にジョブリソースグループが作成されていること。

  • AnalyticDB for MySQL Enterprise Edition、Basic Edition、または Data Lakehouse Edition クラスター用にデータベースアカウントが作成されていること。

ステップ 1: データ開発に移動

  1. AnalyticDB for MySQL コンソールにログインします。コンソールの左上隅で、リージョンを選択します。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。管理するクラスターを見つけ、クラスター ID をクリックします。

  2. 左側のナビゲーションウィンドウで、[ジョブ開発] > [SQL 開発] を選択します。

  3. [SQLConsole] タブで、Spark エンジンとジョブリソースグループを選択します。

ステップ 2: データベースと C-Store テーブルの作成

説明

次の SQL 文は、バッチモードまたはインタラクティブモードで実行できます。詳細については、「Spark SQL 実行モード」をご参照ください。

  1. 次の文を実行してデータベースを作成します。

    CREATE DATABASE spark_create_adb_db_test;
  2. 次の文を実行して C-Store テーブルを作成します。テーブルを作成するための Spark SQL 構文の詳細については、「Spark SQL を使用して内部テーブルを作成する」をご参照ください。

    CREATE TABLE spark_create_adb_db_test.test_adb_tbl (
      id int,
      name string COMMENT 'test_name',
      age int
    ) using adb TBLPROPERTIES('primaryKey'='id,age',
                    'distributeType'='HASH', 
                    'distributeColumns'='id', 
                    'partitionType'='value', 
                    'partitionColumn'='age',   
                    'partitionCount'='120',
                    'storagePolicy'='COLD'   
                   );

ステップ 3: C-Store テーブルのデータの読み取りと書き込み

説明
  • 次の SQL 文は、バッチモードまたはインタラクティブモードで実行できます。詳細については、「Spark SQL 実行モード」をご参照ください。

  • Spark SQL 文を実行すると、システムは実行の成功または失敗を示すメッセージを返しますが、データは返しません。データを表示するには、[Spark JAR 開発] ページに移動し、[アプリケーション] タブでアプリケーションに対応する [アクション] 列の [ログ] をクリックします。詳細については、Spark エディターのトピックの「Spark アプリケーションに関する情報を表示する」セクションをご参照ください。

バッチモード (INSERT OVERWRITE) でテーブルのデータを読み書きする場合、Spark エンジンとジョブリソースグループを選択するだけで済みます。他のパラメーターは必要ありません。リアルタイムモード (INSERT INTO) でテーブルのデータを読み書きする場合、SET コマンドを使用して SQL 文を実行するためのインタラクティブリソースグループを指定する必要があります。

バッチモードでのデータの読み取りと書き込み (INSERT OVERWRITE)

使用上の注意

バッチモードでテーブルのデータを読み書きする場合は、次の点に注意してください。

  • Spark SQL を使用して、SELECT 文と INSERT 文を使用してパーティション化された C-Store テーブルのデータのみを読み書きできます。パーティション化されていないテーブルのデータは読み書きできません。パーティションテーブルの作成方法の詳細については、「CREATE TABLE」をご参照ください。

  • Spark SQL を使用して、テーブルがパーティション化されているかどうかに関係なく、C-Store テーブルのデータを更新 (UPDATE) または削除 (DELETE) することはできません。

  • ホットデータをクエリする場合、まず ELASTIC_ENABLE_HOT_PARTITION_HAS_HDD_REPLICA 設定項目を変更し、次に手動で BUILD ジョブをトリガーする必要があります。SQL クエリ文は、BUILD ジョブが完了した後にのみ実行できます。そうしないと、SQL 文は失敗します。

    1. XIHE エンジンを使用して次の SQL 文を実行し、設定項目を変更します。

      SET adb_config ELASTIC_ENABLE_HOT_PARTITION_HAS_HDD_REPLICA=true;
    2. 手動で BUILD ジョブをトリガーします。

      • 特定のパーティションで BUILD 文を実行します。

        重要

        特定のパーティションで BUILD 文を実行できるのは、V3.1.6.0 以降のクラスターのみです。

        AnalyticDB for MySQL クラスターのマイナーバージョンを表示および更新するには、AnalyticDB for MySQL コンソールにログインし、クラスター情報 ページの 構成情報 セクションに移動します。

        BUILD TABLE <table_name> force partitions='partition1,partition2';
      • テーブル全体で BUILD 文を実行します。

        重要

        この機能はデフォルトで無効になっています。テーブル全体で BUILD 文を強制的に実行すると、システムはテーブルのすべてのパーティションのすべてのデータに対してインデックスを再作成します。このプロセスには時間がかかります。代わりに、特定のパーティションで BUILD 文を実行することをお勧めします。この機能を使用したい場合は、システムリスクを評価してから、有効にするためにチケットを送信してください。

        BUILD TABLE <table_name> force = true;
    3. BUILD ジョブがトリガーされた後、次の文を実行して BUILD ジョブのステータスを表示します。

      SELECT table_name, schema_name, status FROM INFORMATION_SCHEMA.KEPLER_META_BUILD_TASK ORDER BY create_time DESC LIMIT 10;
  1. C-Store テーブルにデータを書き込みます。

    AnalyticDB for MySQL では、INSERT OVERWRITE 文を使用して、バッチモードで C-Store テーブルにデータを書き込むことができます。次のいずれかの方法を使用して、C-Store テーブルにデータを書き込むことができます。

    • 方法 1: INSERT OVERWRITE 文を実行して静的パーティションにデータを書き込む

      INSERT OVERWRITE spark_create_adb_db_test.test_adb_tbl partition(age=10) VALUES (1, 'bom');
    • 方法 2: INSERT OVERWRITE 文を実行して動的パーティションにデータを書き込む

      INSERT OVERWRITE spark_create_adb_db_test.test_adb_tbl partition (age) VALUES (1, 'bom', 10);
  2. C-Store テーブルからデータを読み取ります。

    SELECT * FROM spark_create_adb_db_test.test_adb_tbl;

リアルタイムモードでのデータの読み取りと書き込み (INSERT INTO)

AnalyticDB for MySQL では、INSERT INTO 文を使用して、リアルタイムモードで C-Store テーブルにデータを書き込むことができます。JDBC メソッドまたはビューメソッドを使用して、テーブルのデータを読み書きできます。

JDBC メソッド

-- クラスターのデータベースアカウント、パスワード、および内部エンドポイント。
conf spark.adb.username=user;
conf spark.adb.password=password;
conf spark.adb.endpoint=amv-bp1a74zh****.ads.aliyuncs.com:3306;
-- ENI ベースのアクセスを有効にします。
SET spark.adb.eni.enabled=true;
SET spark.adb.eni.vswitchId=vsw-bp12ldm83z4zu9k4d****;
SET spark.adb.eni.securityGroupId=sg-bp1cdm3acizrgq6x****;
-- JDBC モードを使用します。
SET spark.adb.useJdbc = true;
-- SQL 文を実行するためのオンラインリソースグループを設定します。
SET spark.adb.resourceGroup=user_default;
-- データを書き込みます。
INSERT INTO spark_create_adb_db_test.test_adb_tbl VALUES (1, 'adb', 20);
-- データを読み取ります。
SELECT * FROM spark_create_adb_db_test.test_adb_tbl;

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

パラメーター

説明

spark.adb.username

クラスターのデータベースアカウント。

spark.adb.password

データベースアカウントのパスワード。

spark.adb.endpoint

クラスターの内部エンドポイントとポート。フォーマットは amv-bp1a74zh****.ads.aliyuncs.com:3306 です。

spark.adb.eni.enabled

ENI ベースのアクセスを有効にします。

データにアクセスするときは、spark.adb.eni.enabled パラメーターを true に設定する必要があります。

spark.adb.eni.vswitchId

クラスターが属する vSwitch の ID。

spark.adb.eni.securityGroupId

クラスターが属するセキュリティグループの ID。既存のセキュリティグループを選択するか、新しいセキュリティグループを作成できます。

重要

セキュリティグループは、Enterprise Edition、Basic Edition、または Data Lakehouse Edition クラスターと同じ VPC に属している必要があります。

spark.adb.useJdbc

JDBC モードを使用してデータにアクセスするかどうかを指定します。有効な値:

  • true: はい。

  • false (デフォルト): いいえ。

リアルタイムモードでデータを書き込む場合、このパラメーターを true に設定する必要があります。

spark.adb.resourceGroup

SQL 文の実行に使用されるインタラクティブリソースグループ。

説明

Enterprise Edition、Basic Edition、または Data Lakehouse Edition クラスターを作成すると、user_default という名前のインタラクティブリソースグループがデフォルトで作成されます。このリソースグループを選択するか、別のインタラクティブリソースグループを作成できます。リソースグループの作成方法の詳細については、「リソースグループの作成と管理」をご参照ください。

ビューメソッド

-- ENI ベースのアクセスを有効にします。
SET spark.adb.eni.enabled=true;
SET spark.adb.eni.vswitchId=vsw-bp1sxxsodv28ey5dl****;   
SET spark.adb.eni.securityGroupId=sg-bp19mr685pmg4ihc****;    
-- ビューを作成します。
CREATE TEMPORARY VIEW table_tmp
USING org.apache.spark.sql.jdbc
OPTIONS (
  url 'jdbc:mysql://amv-bp1a74zh****.ads.aliyuncs.com:3306/spark_create_adb_db_test?useServerPrepStmts=false&rewriteBatchedStatements=true',     
  dbtable 'spark_create_adb_db_test.test_adb_tbl',    
  user 'user',       
  password 'password****'      
);
-- データを書き込みます。
INSERT INTO table_tmp VALUES (1, 'adb', 20);
-- データをクエリします。
SELECT * FROM table_tmp;

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

パラメーター

説明

spark.adb.eni.enabled

ENI ベースのアクセスを有効にします。

データにアクセスするときは、spark.adb.eni.enabled パラメーターを true に設定する必要があります。

spark.adb.eni.vswitchId

クラスターが属する vSwitch の ID。

spark.adb.eni.securityGroupId

クラスターが属するセキュリティグループの ID。既存のセキュリティグループを選択するか、新しいセキュリティグループを作成できます。

重要

セキュリティグループは、Enterprise Edition、Basic Edition、または Data Lakehouse Edition クラスターと同じ VPC に属している必要があります。

table_tmp

ビューの名前。このトピックでは、table_tmp を例として使用します。

USING org.apache.spark.sql.jdbc

このパラメーターの値は USING org.apache.spark.sql.jdbc に固定されています。

url

クラスターの JDBC URL。

フォーマット: jdbc:mysql://<endpoint:port>/<db_name>?useServerPrepStmts=false&rewriteBatchedStatements=true、ここで:

  • endpoint: クラスターの内部エンドポイント。

  • port: クラスターのポート番号。値は 3306 に固定されています。

  • db_name: クラスター内のデータベースの名前。

  • useServerPrepStmts=false&rewriteBatchedStatements=true: この構成は、バッチでデータを書き込むために必要です。書き込みパフォーマンスを向上させ、クラスターへの圧力を軽減するために使用されます。

例: jdbc:mysql://amv-bp1a74zh****.ads.aliyuncs.com:3306/spark_create_adb_db_test?useServerPrepStmts=false&rewriteBatchedStatements=true

dbtable

クラスター内のテーブルの名前。フォーマット: db_name.table_name。このトピックでは、spark_create_adb_db_test.test_adb_tbl を例として使用します。

user

クラスターのデータベースアカウント。

password

データベースアカウントのパスワード。

Spark 設定項目

Spark SQL を使用して C-Store テーブルのデータを読み書きする場合、次の設定項目を構成できます。

設定項目

説明

デフォルト値

spark.adb.write.batchSize

バッチごとに書き込むことができるデータレコードの数。値は正の整数である必要があります。

説明

このパラメーターは、リアルタイムモードでデータを書き込む場合にのみサポートされます。

600

spark.adb.write.arrow.maxMemoryBufferSize

書き込みメモリバッファーの最大サイズ。値は正の整数である必要があります。単位: MB。

説明

このパラメーターは、バッチモードでデータを書き込む場合にのみサポートされます。

1024

spark.adb.write.arrow.maxRecordSizePerBatch

バッチごとに書き込むことができるデータレコードの最大数。値は正の整数である必要があります。

説明

このパラメーターは、バッチモードでデータを書き込む場合にのみサポートされます。

500