Spark は、大規模データ処理のための統合分析エンジンです。Hologres は、コミュニティ Spark および EMR Serverless Spark と効率的に統合することで、データウェアハウスを迅速に構築できます。Hologres の Spark コネクタは、Spark クラスター内での Hologres カタログの作成に対応しています。これにより、外部テーブルを使用した高性能なバッチ読み取りとインポートが可能になり、ネイティブ JDBC を上回るパフォーマンスを実現できます。
制限事項
Spark コネクタは、Hologres バージョン 1.3 以降が必要です。インスタンスバージョンは、Hologres コンソールの[Instance Details]ページで確認できます。インスタンスがバージョン 1.3 より古い場合は、インスタンスのアップグレードを行うか、Hologres DingTalk グループ (ID:32314975) に参加してアップグレードをリクエストしてください。
前提条件
spark-sql、spark-shell、またはpysparkコマンドを実行できる Spark 環境が必要です。依存関係の問題を回避し、より多くの機能にアクセスするには、Spark 3.3.0 以降を使用してください。Alibaba Cloud EMR Spark を使用すると、Spark 環境を迅速にセットアップし、Hologres インスタンスに接続できます。詳細については、「EMR Spark features」をご参照ください。
または、独立した Spark 環境をセットアップすることもできます。詳細については、「Apache Spark」をご参照ください。
Spark を使用して Hologres のデータを読み書きするには、
hologres-connector-spark-3.xコネクタが必要です。このトピックでは、バージョン 1.5.2 を例として使用します。これは Maven セントラルリポジトリ からダウンロードできます。このコネクタはオープンソースです。詳細については、「Hologres-Connectors」をご参照ください。IntelliJ IDEA などの IDE を使用して Java で Spark ジョブを開発し、ローカルでデバッグするには、pom.xml ファイルに次の Maven 依存関係を追加してください。
<dependency> <groupId>com.alibaba.hologres</groupId> <artifactId>hologres-connector-spark-3.x</artifactId> <version>1.5.2</version> <classifier>jar-with-dependencies</classifier> </dependency>
Hologres カタログ
Hologres コネクタ 1.5.2 以降は Hologres カタログをサポートしており、外部テーブルを使用して Hologres のデータを読み書きできます。
Spark の各 Hologres カタログは、Hologres のデータベースに対応します。Hologres カタログの各名前空間は、対応するデータベースのスキーマに対応します。以降のセクションでは、Spark で Hologres カタログを使用する方法について説明します。
Hologres カタログはテーブルの作成をサポートしていません。
このトピックでは、Hologres インスタンス内の次のデータベースとテーブルを使用します:
test_db -- データベース
public.test_table1 -- public スキーマのテーブル
public.test_table2
test_schema.test_table3 -- test_schema スキーマのテーブルHologres カタログの初期化
Spark クラスターで spark-sql を起動し、Hologres コネクタをロードして、カタログのパラメーターを指定します。
spark-sql --jars hologres-connector-spark-3.x-1.5.2-jar-with-dependencies.jar \
--conf spark.sql.catalog.hologres_external_test_db=com.alibaba.hologres.spark3.HoloTableCatalog \
--conf spark.sql.catalog.hologres_external_test_db.username=*** \
--conf spark.sql.catalog.hologres_external_test_db.password=*** \
--conf spark.sql.catalog.hologres_external_test_db.jdbcurl=jdbc:postgresql://hgpostcn-cn-***-vpc-st.hologres.aliyuncs.com:80/test_dbHologres カタログのコマンド
Hologres カタログのロード
Spark の Hologres カタログは、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;
テーブルの読み取りと書き込み
SELECT および INSERT ステートメントを使用して、外部テーブルのデータを読み書きします。
-- テーブルから読み取ります。 SELECT * FROM public.test_table1; -- テーブルに書き込みます。 INSERT INTO test_schema.test_table3 SELECT * FROM public.test_table1;
Hologres へのデータインポート
このセクションのテストデータは、TPC-H データセットの customer テーブルのものです。Spark は、CSV ファイルからデータを読み取り、Hologres テーブルに書き込むことができます。サンプルの customer データをダウンロードできます。次の SQL 文は customer_holo_table を作成します。
CREATE TABLE customer_holo_table
(
c_custkey BIGINT ,
c_name TEXT ,
c_address TEXT ,
c_nationkey INT ,
c_phone TEXT ,
c_acctbal DECIMAL(15,2) ,
c_mktsegment TEXT ,
c_comment TEXT
);Spark SQL を使用したインポート
Spark SQL では、カタログを使用して Hologres テーブルのメタデータをロードする方が便利です。一時テーブルを作成して Hologres テーブルを宣言することもできます。
バージョン 1.5.2 より前の Hologres Spark コネクタは、カタログをサポートしていません。一時テーブルを作成することによってのみ、Hologres テーブルを宣言できます。
Hologres Spark コネクタのパラメーターの詳細については、「パラメーター」をご参照ください。
Hologres カタログを初期化します。
spark-sql --jars hologres-connector-spark-3.x-1.5.2-jar-with-dependencies.jar \ --conf spark.sql.catalog.hologres_external_test_db=com.alibaba.hologres.spark3.HoloTableCatalog \ --conf spark.sql.catalog.hologres_external_test_db.username=*** \ --conf spark.sql.catalog.hologres_external_test_db.password=*** \ --conf spark.sql.catalog.hologres_external_test_db.jdbcurl=jdbc:postgresql://hgpostcn-cn-***-vpc-st.hologres.aliyuncs.com:80/test_dbCSV データソースから Hologres テーブルにデータをインポートします。
説明Spark の INSERT INTO 構文では、
column_listを使用して一部の列を指定することはできません。たとえば、INSERT INTO hologresTable(c_custkey) SELECT c_custkey FROM csvTableを使用して c_custkey フィールドにのみデータを書き込むことはできません。特定のフィールドにデータを書き込みたい場合は、
CREATE TEMPORARY VIEWステートメントを使用して、必要なフィールドのみを含む Hologres 一時ビューを宣言します。カタログの使用
-- Hologres カタログをロードします。 USE hologres_external_test_db; -- CSV データソースを作成します。 CREATE TEMPORARY VIEW csvTable ( c_custkey BIGINT, c_name STRING, c_address STRING, c_nationkey INT, c_phone STRING, c_acctbal DECIMAL(15, 2), c_mktsegment STRING, c_comment STRING) USING csv OPTIONS ( path "resources/customer", sep "," -- ローカルテストの場合は、ファイルへの絶対パスを使用します。 ); -- CSV テーブルから Hologres にデータを書き込みます。 INSERT INTO public.customer_holo_table SELECT * FROM csvTable;一時ビューの使用
-- CSV データソースを作成します。 CREATE TEMPORARY VIEW csvTable ( c_custkey BIGINT, c_name STRING, c_address STRING, c_nationkey INT, c_phone STRING, c_acctbal DECIMAL(15, 2), c_mktsegment STRING, c_comment STRING) USING csv OPTIONS ( path "resources/customer", sep "," ); -- Hologres の一時ビューを作成します。 CREATE TEMPORARY VIEW hologresTable ( c_custkey BIGINT, c_name STRING, c_phone STRING) USING hologres OPTIONS ( jdbcurl "jdbc:postgresql://hgpostcn-cn-***-vpc-st.hologres.aliyuncs.com:80/test_db", username "***", password "***", table "customer_holo_table" ); INSERT INTO hologresTable SELECT c_custkey,c_name,c_phone FROM csvTable;
DataFrame を使用したインポート
spark-shell や pyspark などのツールを使用して Spark ジョブを開発し、write API を呼び出してデータを書き込むことができます。 ジョブは CSV ファイルからデータを読み取り、DataFrame に変換してから、Hologres インスタンスに書き込みます。 以降のセクションでは、さまざまなプログラミング言語のサンプルコードを提供します。 Hologres Spark コネクターのパラメーターの詳細については、「パラメーター」をご参照ください。
Scala
import org.apache.spark.sql.types._
import org.apache.spark.sql.SaveMode
// CSV ソースのスキーマ。
val schema = StructType(Array(
StructField("c_custkey", LongType),
StructField("c_name", StringType),
StructField("c_address", StringType),
StructField("c_nationkey", IntegerType),
StructField("c_phone", StringType),
StructField("c_acctbal", DecimalType(15, 2)),
StructField("c_mktsegment", StringType),
StructField("c_comment", StringType)
))
// CSV ファイルから DataFrame にデータを読み取ります。
val csvDf = spark.read.format("csv").schema(schema).option("sep", ",").load("resources/customer")
// DataFrame を Hologres に書き込みます。
csvDf.write
.format("hologres")
.option("username", "***")
.option("password", "***")
.option("jdbcurl", "jdbc:postgresql://hgpostcn-cn-***-vpc-st.hologres.aliyuncs.com:80/test_db")
.option("table", "customer_holo_table")
.mode(SaveMode.Append)
.save()Java
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.types.*;
import org.apache.spark.sql.SaveMode;
import java.util.Arrays;
import java.util.List;
public class SparkTest {
public static void main(String[] args) {
// CSV ソースのスキーマ。
List<StructField> asList =
Arrays.asList(
DataTypes.createStructField("c_custkey", DataTypes.LongType, true),
DataTypes.createStructField("c_name", DataTypes.StringType, true),
DataTypes.createStructField("c_address", DataTypes.StringType, true),
DataTypes.createStructField("c_nationkey", DataTypes.IntegerType, true),
DataTypes.createStructField("c_phone", DataTypes.StringType, true),
DataTypes.createStructField("c_acctbal", new DecimalType(15, 2), true),
DataTypes.createStructField("c_mktsegment", DataTypes.StringType, true),
DataTypes.createStructField("c_comment", DataTypes.StringType, true));
StructType schema = DataTypes.createStructType(asList);
// ローカルモードで実行します。
SparkSession spark = SparkSession.builder()
.appName("Spark CSV Example")
.master("local[*]")
.getOrCreate();
// CSV ファイルから DataFrame にデータを読み取ります。
// ローカルテストの場合は、customer データへの絶対パスを使用します。
Dataset<Row> csvDf = spark.read().format("csv").schema(schema).option("sep", ",").load("resources/customer");
// DataFrame を Hologres に書き込みます。
csvDf.write.format("hologres").option(
"username", "***").option(
"password", "***").option(
"jdbcurl", "jdbc:postgresql://hgpostcn-cn-***-vpc-st.hologres.aliyuncs.com:80/test_db").option(
"table", "customer_holo_table").mode(
"append").save();
}
}pom.xml ファイルに、次の依存関係を追加します。
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.13</artifactId>
<version>3.5.4</version>
<scope>provided</scope>
</dependency>Python
from pyspark.sql.types import *
# CSV ソースのスキーマ。
schema = StructType([
StructField("c_custkey", LongType()),
StructField("c_name", StringType()),
StructField("c_address", StringType()),
StructField("c_nationkey", IntegerType()),
StructField("c_phone", StringType()),
StructField("c_acctbal", DecimalType(15, 2)),
StructField("c_mktsegment", StringType()),
StructField("c_comment", StringType())
])
# CSV ファイルから DataFrame にデータを読み取ります。
csvDf = spark.read.csv("resources/customer", header=False, schema=schema, sep=',')
# DataFrame を Hologres に書き込みます。
csvDf.write.format("hologres").option(
"username", "***").option(
"password", "***").option(
"jdbcurl", "jdbc:postgresql://hgpostcn-cn-***-vpc-st.hologres.aliyuncs.com:80/test_db").option(
"table", "customer_holo_table").mode(
"append").save()さまざまな言語で Spark ジョブを実行するには、次の手順に従います:
Scala
サンプルコードを使用して
sparktest.scalaファイルを作成し、次のコマンドを実行してジョブを実行します。-- 依存関係をロードします。 spark-shell --jars hologres-connector-spark-3.x-1.5.2-jar-with-dependencies.jar -- ローカルテストの場合は、絶対パスを使用してファイルをロードします。 scala> :load D:/sparktest.scalaまたは、依存関係をロードした後に、サンプルコードをシェルに直接貼り付けて実行することもできます。
Java
開発ツールを使用してサンプルコードをインポートし、Maven でパッケージ化します。たとえば、出力 JAR ファイルが
spark_test.jarの場合、次のコマンドを実行してジョブを実行します。-- ジョブの JAR ファイルへの絶対パスを使用します。 spark-submit --class SparkTest --jars hologres-connector-spark-3.x-1.5.2-jar-with-dependencies.jar D:\spark_test.jarPython
次のコマンドを実行した後、サンプルコードをシェルに貼り付けて実行できます。
pyspark --jars hologres-connector-spark-3.x-1.5.2-jar-with-dependencies.jar
Hologresからのデータ読み取り
バージョン 1.3.2 以降、Spark コネクタは Hologres からのデータ読み取りをサポートしています。Spark のデフォルトの
JDBC コネクタと比較して、Spark コネクタは Hologres テーブルのシャードに基づいてデータを並列で読み取ることで、より優れたパフォーマンスを発揮します。読み取りの並列度は、テーブルのシャード数に関連しています。Spark コネクタは、read.max_task_countパラメーターを使用して並列度を制限できます。ジョブは最終的にMin(shardCount, max_task_count)個の読み取りタスクを生成します。また、スキーマ推論もサポートしています。スキーマを指定しない場合、Hologres のテーブルスキーマから Spark のスキーマを推論します。Spark コネクタのバージョン 1.5.0 以降、Hologres テーブルからのデータ読み取りでは、述語プッシュダウン、LIMIT プッシュダウン、カラムプルーニングがサポートされるようになりました。また、Hologres の
SELECT QUERYを使用してデータを読み取ることもできます。このバージョンではバッチ読み取りモードが導入され、以前のバージョンと比較して読み取りパフォーマンスが 3〜4 倍向上します。
Spark SQLを使用したデータ読み取り
Spark SQL を使用する場合、カタログを使用して Hologres テーブルのメタデータをロードできます。または、一時ビューを作成して Hologres テーブルを宣言することもできます。
バージョン 1.5.2 より前の Hologres Spark コネクタは、カタログをサポートしていません。Hologres テーブルは、一時ビューを作成することでのみ宣言できます。
Hologres Spark コネクタのパラメーターの詳細については、「パラメーター」をご参照ください。
Hologres カタログを初期化します。
spark-sql --jars hologres-connector-spark-3.x-1.5.2-jar-with-dependencies.jar \ --conf spark.sql.catalog.hologres_external_test_db=com.alibaba.hologres.spark3.HoloTableCatalog \ --conf spark.sql.catalog.hologres_external_test_db.username=*** \ --conf spark.sql.catalog.hologres_external_test_db.password=*** \ --conf spark.sql.catalog.hologres_external_test_db.jdbcurl=jdbc:postgresql://hgpostcn-cn-***-vpc-st.hologres.aliyuncs.com:80/test_dbHologres からデータを読み取ります。
カタログを使用してデータを読み取ります。
-- Hologres カタログをロードします。 USE hologres_external_test_db; -- Hologres テーブルからデータを読み取ります。フィールドプルーニングと述語プッシュダウンがサポートされています。 SELECT c_custkey,c_name,c_phone FROM public.customer_holo_table WHERE c_custkey < 500 LIMIT 10;一時ビューを作成してデータを読み取ります。
テーブル
CREATE TEMPORARY VIEW hologresTable USING hologres OPTIONS ( jdbcurl "jdbc:postgresql://hgpostcn-cn-***-vpc-st.hologres.aliyuncs.com:80/test_db", username "***", password "***", read.max_task_count "80", -- Hologres テーブルからの読み取りに使用するタスクの最大数。 table "customer_holo_table" ); -- フィールドプルーニングと述語プッシュダウンがサポートされています。 SELECT c_custkey,c_name,c_phone FROM hologresTable WHERE c_custkey < 500 LIMIT 10;クエリ
CREATE TEMPORARY VIEW hologresTable USING hologres OPTIONS ( jdbcurl "jdbc:postgresql://hgpostcn-cn-***-vpc-st.hologres.aliyuncs.com:80/test_db", username "***", password "***", read.query "SELECT c_custkey,c_name,c_phone FROM customer_holo_table WHERE c_custkey < 500 LIMIT 10" ); SELECT * FROM hologresTable LIMIT 5;
HologresデータのDataFrameへの読み取り
spark-shell や pyspark などのツールを使用して Spark ジョブを開発する場合、Spark の read API を呼び出してデータを DataFrame にロードできます。以下の例では、さまざまなプログラミング言語で Hologres テーブルから DataFrame にデータを読み取る方法を示します。Hologres Spark コネクタのパラメーターの詳細については、「パラメーター」をご参照ください。
Scala
val readDf = (
spark.read
.format("hologres")
.option("username", "***")
.option("password", "***")
.option("jdbcurl", "jdbc:postgresql://hgpostcn-cn-***-vpc-st.hologres.aliyuncs.com:80/test_db")
.option("table", "customer_holo_table")
.option("read.max_task_count", "80") // Hologres テーブルからの読み取りに使用するタスクの最大数。
.load()
.filter("c_custkey < 500")
)
readDf.select("c_custkey", "c_name", "c_phone").show(10)Java
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;
public class SparkSelect {
public static void main(String[] args) {
// ローカルモードで実行
SparkSession spark = SparkSession.builder()
.appName("Spark CSV Example")
.master("local[*]")
.getOrCreate();
Dataset<Row> readDf = (
spark.read
.format("hologres")
.option("username", "***")
.option("password", "***")
.option("jdbcurl", "jdbc:postgresql://hgpostcn-cn-***-vpc-st.hologres.aliyuncs.com:80/test_db")
.option("table", "customer_holo_table")
.option("read.max_task_count", "80") // Hologres テーブルからの読み取りに使用するタスクの最大数。
.load()
.filter("c_custkey < 500")
);
readDf.select("c_custkey", "c_name", "c_phone").show(10);
}
}Maven の pom.xml ファイルに、以下の依存関係を追加します。
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.13</artifactId>
<version>3.5.4</version>
<scope>provided</scope>
</dependency>Python
readDf = spark.read.format("hologres").option(
"username", "***").option(
"password", "***").option(
"jdbcurl", "jdbc:postgresql://hgpostcn-cn-***-vpc-st.hologres.aliyuncs.com:80/test_db").option(
"table", "customer_holo_table").option(
"read.max_task_count", "80").load().filter("c_custkey < 500")
readDf.select("c_custkey", "c_name", "c_phone").show(10)さまざまなプログラミング言語で Spark ジョブを実行するには:
Scala
サンプルコードを使用して
sparkselect.scalaファイルを作成し、以下のコマンドでジョブを実行できます。-- 依存関係をロード spark-shell --jars hologres-connector-spark-3.x-1.5.2-jar-with-dependencies.jar -- ローカルテストでは、絶対パスでファイルをロード scala> :load D:/sparkselect.scalaまたは、依存関係がロードされた後、サンプルコードをシェルに直接貼り付けて実行することもできます。
Java
開発ツールを使用してサンプルコードをインポートし、Maven ツールを使用してパッケージ化できます。たとえば、パッケージ化された JAR が
spark_select.jarという名前の場合、以下のコマンドでジョブを実行します。-- ジョブの JAR には絶対パスを使用 spark-submit --class SparkSelect --jars hologres-connector-spark-3.x-1.5.2-jar-with-dependencies.jar D:\spark_select.jarPython
以下のコマンドを実行した後、サンプルコードをシェルに直接貼り付けて実行できます。
pyspark --jars hologres-connector-spark-3.x-1.5.2-jar-with-dependencies.jar
パラメータ
一般パラメータ
パラメータ | デフォルト | 必須 | 説明 |
username | なし | はい |
|
password | なし | はい |
|
table | なし | はい | 読み取りまたは書き込み対象の Hologres テーブル名。 説明 データを読み取る際、代わりに |
jdbcurl | なし | はい | Hologres リアルタイムデータ API の JDBC URL です。形式は |
enable_serverless_computing | false | いいえ | サーバーレスコンピューティングリソースを使用するかどうかを指定します。このパラメーターは、 |
serverless_computing_query_priority | 3 | いいえ | サーバーレスコンピューティングの実行優先度。 |
statement_timeout_seconds | 28800 (8時間) | いいえ | クエリ実行のタイムアウト時間 (秒単位)。 |
retry_count | 3 | いいえ | 接続に失敗した場合の再試行回数。 |
direct_connect | サポートされている場合は、デフォルトで直接接続が使用されます。 | いいえ | Hologres フロントエンド (アクセスノード) に直接接続するかどうかを指定します。エンドポイントのネットワークスループットは、多くの場合、バッチデータ操作のボトルネックになります。デフォルトでは、コネクタはスループットを向上させるために、利用可能な場合は直接接続を使用します。この動作を無効にするには、これを |
書き込みパラメータ
Hologres コネクタは、Spark の SaveMode パラメーターをサポートしています。SQL の場合、これは INSERT INTO または INSERT OVERWRITE に対応します。DataFrame の場合、データを書き込むときに SaveMode を Append または Overwrite に設定できます。Overwrite モードは、書き込み操作用の一時テーブルを作成し、成功すると元のテーブルを置き換えます。このモードは必要な場合にのみ使用してください。
パラメータ | 以前の名前 | デフォルト | 必須 | 説明 |
write.mode | copy_write_mode | auto | いいえ | 書き込みモード。書き込みモードの比較については、「Batch write modes」をご参照ください。有効な値は次のとおりです。
|
write.copy.max_buffer_size | max_cell_buffer_size | 52428800 (50 MB) | いいえ |
|
write.copy.dirty_data_check | copy_write_dirty_data_check | false | いいえ | ダーティデータをチェックするかどうかを指定します。有効にすると、この機能により書き込みに失敗した正確な行を特定できます。ただし、これは書き込みパフォーマンスに影響します。トラブルシューティング時以外は、この機能を無効のままにしてください。 |
write.on_conflict_action | なし | INSERT_OR_REPLACE | いいえ | 書き込み操作で宛先テーブルのプライマリキーの競合が発生した場合に実行するアクション。
|
write.stage.compression | なし | false | いいえ |
|
以下のパラメーターは、write.mode が insert に設定されている場合にのみ有効になります。
パラメータ | 以前の名前 | デフォルト | 必須 | 説明 |
write.insert.dynamic_partition | dynamic_partition | false | いいえ |
|
write.insert.batch_size | write_batch_size | 512 | いいえ | 各書き込みスレッドの最大バッチサイズ。 |
write.insert.batch_byte_size | write_batch_byte_size | 2097152 (2 MB) | いいえ | 各書き込みスレッドの最大バッチサイズ (バイト単位)。 デフォルト値は 2 MB です。 |
write.insert.max_interval_ms | write_max_interval_ms | 10000 | いいえ | 最後のコミットからの経過時間がこの値を超えると、バッチコミットが実行されます。 |
write.insert.thread_size | write_thread_size | 1 | いいえ | 同時書き込みスレッドの数。各スレッドは1つのデータベース接続を使用します。 |
write.rps_limit | なし | -1 | いいえ | タスクごとの書き込みレート制限 (行/秒 (RPS))。デフォルト値の -1 は制限なしを意味します。 |
読み取りパラメータ
パラメータ | 以前の名前 (v1.5.0以前) | デフォルト | 必須 | 説明 |
read.mode | bulk_read | auto | いいえ | 読み取りモード。有効な値は次のとおりです。
|
read.max_task_count | max_partition_count | 80 | いいえ | データ読み取り時の同時タスクの最大数を指定します。コネクタはテーブルを複数のパーティションに分割し、各パーティションは単一の Spark タスクによって処理されます。テーブルのシャード数がこの値より少ない場合、パーティション数はシャード数に制限されます。 |
read.copy.max_buffer_size | / | 52428800 (50 MB) | いいえ |
|
read.push_down_predicate | push_down_predicate | true | いいえ | 述語プッシュダウンを有効にするかどうかを指定します。有効にすると、フィルター条件やカラムプルーニングなどの操作がデータソースにプッシュダウンされます。 |
read.push_down_limit | push_down_limit | true | いいえ |
|
read.select.batch_size | scan_batch_size | 256 | いいえ |
|
read.select.timeout_seconds | scan_timeout_seconds | 60 | いいえ |
|
read.query | query | なし | いいえ | Hologres からの読み取りには、 説明
|
read.split.strategy | なし | auto | いいえ | 並列読み取り用にテーブルデータを複数のタスクに分割する戦略を定義します。有効な値は次のとおりです。
説明 コネクタ v1.6.1 以降でサポートされています。 |
read.split.column | なし | なし | いいえ | 分割列の名前。このパラメーターは、 |
read.split.lower_bound | なし | なし | いいえ | 分割下限は、 |
read.split.upper_bound | なし | なし | いいえ | 分割上限は、範囲ベースのシャードの上限を指定します。このパラメーターは |
read.split.num | なし | なし | いいえ | 分割数。このパラメーターは、 |
データ型マッピング
Spark の型 | Hologres の型 |
ShortType | SMALLINT |
IntegerType | INT |
LongType | BIGINT |
StringType | TEXT |
StringType | JSON |
StringType | JSONB |
DecimalType | NUMERIC(38, 18) |
BooleanType | BOOL |
DoubleType | DOUBLE PRECISION |
FloatType | FLOAT4 |
TimestampType | TIMESTAMPTZ |
DateType | DATE |
BinaryType | BYTEA |
BinaryType | ROARINGBITMAP |
ArrayType(IntegerType) | INT4[] |
ArrayType(LongType) | INT8[] |
ArrayType(FloatType) | FLOAT4[] |
ArrayType(DoubleType) | FLOAT8[] |
ArrayType(BooleanType) | BOOLEAN[] |
ArrayType(StringType) | TEXT[] |
接続数の計算
Hologres-Connector-Spark は、読み取りおよび書き込み操作に一定数の JDBC 接続を使用します。接続数は次の要因によって決まります。
Spark の並列度:ジョブ実行中に実行される並行タスクの数です。Spark UI で確認できます。
タスクごとに使用される接続数:
COPY モードで書き込む場合、各タスクは 1 つの JDBC 接続を使用します。
INSERT モードでの書き込み時、各タスクは
write_thread_size個の JDBC 接続を使用します。データを読み取る場合、各タスクは 1 つの JDBC 接続を使用します。
その他の操作:ジョブの開始時に、スキーマ取得などのタスクのために一時的に 1 つの接続を使用する場合があります。
ジョブの合計接続数は、次の式で計算できます。
項目 | 接続数 |
Querying metadata from the catalog | 1 |
データの読み取り | 並列度 * 1 + 1 |
COPY モードでの書き込み | 並列度 * 1 + 1 |
INSERT モードでの書き込み | 並列度 * write_thread_size + 1 |
この計算は、Spark の並行タスクの容量が、ジョブが生成するタスク数を超えていることが前提です。
Spark の同時実行タスクのキャパシティは、spark.executor.instances などのユーザー設定パラメーターと、Hadoop のファイルブロック分割ポリシーによって決まります。詳細については、「Apache Hadoop」をご参照ください。
Spark コネクターのリリースノート
バージョン | リリース日 | 新機能 | バグ修正 |
1.6.1 | 2026-02 |
|
|
1.6.0 | 2025-12 |
|
|
1.5.6 | 2025-11 |
|
|
1.5.5 | 2025-10 |
|
|
1.5.4 | 2025-09 |
|
|
1.5.2 | 2025-08 |
|
|
1.5.0 | 2025-06 |
|
|
1.4.2 | 2025-04 |
|
|
1.3.2 | 2025-02 |
|
|
1.3.0 | 2025-01 |
|
|