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: データ開発に移動
AnalyticDB for MySQL コンソールにログインします。コンソールの左上隅で、リージョンを選択します。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。管理するクラスターを見つけ、クラスター ID をクリックします。
左側のナビゲーションウィンドウで、 を選択します。
[SQLConsole] タブで、Spark エンジンとジョブリソースグループを選択します。
ステップ 2: データベースと C-Store テーブルの作成
次の SQL 文は、バッチモードまたはインタラクティブモードで実行できます。詳細については、「Spark SQL 実行モード」をご参照ください。
次の文を実行してデータベースを作成します。
CREATE DATABASE spark_create_adb_db_test;次の文を実行して 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 文は失敗します。XIHE エンジンを使用して次の SQL 文を実行し、設定項目を変更します。
SET adb_config ELASTIC_ENABLE_HOT_PARTITION_HAS_HDD_REPLICA=true;手動で 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;
BUILD ジョブがトリガーされた後、次の文を実行して BUILD ジョブのステータスを表示します。
SELECT table_name, schema_name, status FROM INFORMATION_SCHEMA.KEPLER_META_BUILD_TASK ORDER BY create_time DESC LIMIT 10;
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);
C-Store テーブルからデータを読み取ります。
SELECT * FROM spark_create_adb_db_test.test_adb_tbl;
リアルタイムモードでのデータの読み取りと書き込み (INSERT INTO)
AnalyticDB for MySQL では、INSERT INTO 文を使用して、リアルタイムモードで C-Store テーブルにデータを書き込むことができます。JDBC メソッドまたはビューメソッドを使用して、テーブルのデータを読み書きできます。
Spark 設定項目
Spark SQL を使用して C-Store テーブルのデータを読み書きする場合、次の設定項目を構成できます。
設定項目 | 説明 | デフォルト値 |
spark.adb.write.batchSize | バッチごとに書き込むことができるデータレコードの数。値は正の整数である必要があります。 説明 このパラメーターは、リアルタイムモードでデータを書き込む場合にのみサポートされます。 | 600 |
spark.adb.write.arrow.maxMemoryBufferSize | 書き込みメモリバッファーの最大サイズ。値は正の整数である必要があります。単位: MB。 説明 このパラメーターは、バッチモードでデータを書き込む場合にのみサポートされます。 | 1024 |
spark.adb.write.arrow.maxRecordSizePerBatch | バッチごとに書き込むことができるデータレコードの最大数。値は正の整数である必要があります。 説明 このパラメーターは、バッチモードでデータを書き込む場合にのみサポートされます。 | 500 |