メインコンテンツまでスキップ
バージョン: 3.16

ScalarDB Analytics を通じた分析クエリの実行

注記

このページは英語版のページが機械翻訳されたものです。英語版との間に矛盾または不一致がある場合は、英語版を正としてください。

このガイドでは、ScalarDB Analytics アプリケーションの開発方法について説明します。アーキテクチャと設計の詳細については、ScalarDB Analytics の設計を参照してください。

ScalarDB Analytics は現在、実行エンジンとして Spark を使用し、Spark カスタムカタログプラグインを提供することによって、ScalarDB で管理されているデータソースと管理されていないデータソースの統合ビューを Spark テーブルとして提供します。これにより、任意の Spark SQL クエリをシームレスに実行できます。

準備

このセクションでは、前提条件、ScalarDB Analytics セットアップのための Spark 設定、および ScalarDB Analytics 依存関係の追加について説明します。

前提条件

ScalarDB Analytics は Apache Spark 3.4以降で動作します。まだ Spark をインストールしていない場合は、Apache Spark のウェブサイトから Spark ディストリビューションをダウンロードしてください。

注記

Apache Spark は Scala 2.12 または Scala 2.13 でビルドされています。ScalarDB Analytics は両方のバージョンをサポートしています。後で適切なバージョンの ScalarDB Analytics を選択できるように、使用しているバージョンを確認してください。詳細については、バージョン互換性を参照してください。

ScalarDB Analytics のセットアップのための Spark 設定

以下のセクションでは、ScalarDB Analytics で利用可能なすべての設定オプションについて説明します。

  • ScalarDB Analytics の Spark との統合方法
  • データソースの接続とアクセス方法
  • ライセンス情報の提供方法

実践的なシナリオでの設定例については、サンプルアプリケーション設定を参照してください。

Spark プラグインの設定

設定キー名必須説明
spark.jars.packagesいいえ必要な依存関係の Maven 座標をカンマ区切りで指定します。使用する ScalarDB Analytics パッケージを含める必要があります。含めない場合は、Spark アプリケーションの実行時にコマンドライン引数として指定します。ScalarDB Analytics の Maven 座標の詳細については、ScalarDB Analytics 依存関係の追加を参照してください。
spark.sql.extensionsはいcom.scalar.db.analytics.spark.extension.ScalarDbAnalyticsExtensions を設定する必要があります。
spark.sql.catalog.<CATALOG_NAME>はいcom.scalar.db.analytics.spark.ScalarDbAnalyticsCatalog を設定する必要があります。

<CATALOG_NAME> には任意の名前を指定できます。設定全体で同じカタログ名を使用するようにしてください。

ライセンスの設定

設定キー名必須説明
spark.sql.catalog.<CATALOG_NAME>.license.keyはいScalarDB Analytics のライセンスキーの JSON 文字列
spark.sql.catalog.<CATALOG_NAME>.license.cert_pemはいScalarDB Analytics ライセンスの PEM エンコードされた証明書の文字列。cert_pem または cert_path のいずれかを設定する必要があります。
spark.sql.catalog.<CATALOG_NAME>.license.cert_pathはいScalarDB Analytics ライセンスの PEM エンコードされた証明書へのパス。cert_pem または cert_path のいずれかを設定する必要があります。

データソースの設定

ScalarDB Analytics は複数のタイプのデータソースをサポートしています。各タイプには特定の設定パラメータが必要です:

注記

ScalarDB Analytics は ScalarDB をデータソースとしてサポートしています。この表では、ScalarDB をデータソースとして設定する方法について説明します。

設定キー名必須説明
spark.sql.catalog.<CATALOG_NAME>.data_source.<DATA_SOURCE_NAME>.typeはい常に scalardb を設定します
spark.sql.catalog.<CATALOG_NAME>.data_source.<DATA_SOURCE_NAME>.config_pathはいScalarDB の設定ファイルへのパス
ヒント

<DATA_SOURCE_NAME> には任意の名前を使用できます。

設定例

以下は、複数のデータソースを持つ scalardb という名前のカタログを設定する ScalarDB Analytics の設定例です:

# Sparkプラグインの設定
spark.jars.packages com.scalar-labs:scalardb-analytics-spark-all-<SPARK_VERSION>_<SCALA_VERSION>:<SCALARDB_ANALYTICS_VERSION>
spark.sql.extensions com.scalar.db.analytics.spark.extension.ScalarDbAnalyticsExtensions
spark.sql.catalog.scalardb com.scalar.db.analytics.spark.ScalarDbAnalyticsCatalog

# ライセンスの設定
spark.sql.catalog.scalardb.license.key <LICENSE_KEY>
spark.sql.catalog.scalardb.license.cert_pem <LICENSE_PEM_ENCODED_CERTIFICATE>

# データソースの設定
spark.sql.catalog.scalardb.data_source.scalardb.type scalardb
spark.sql.catalog.scalardb.data_source.scalardb.config_path /path/to/scalardb.properties

spark.sql.catalog.scalardb.data_source.mysql_source.type mysql
spark.sql.catalog.scalardb.data_source.mysql_source.host localhost
spark.sql.catalog.scalardb.data_source.mysql_source.port 3306
spark.sql.catalog.scalardb.data_source.mysql_source.username root
spark.sql.catalog.scalardb.data_source.mysql_source.password password
spark.sql.catalog.scalardb.data_source.mysql_source.database mydb

括弧内の内容は以下のように変更する必要があります:

  • <LICENSE_KEY>: ScalarDB Analytics のライセンスキー
  • <LICENSE_PEM_ENCODED_CERTIFICATE>: ScalarDB Analytics ライセンスの PEM エンコードされた証明書
  • <SPARK_VERSION>: 使用している Spark のメジャーおよびマイナーバージョン (例: 3.4)
  • <SCALA_VERSION>: Spark インストールに対応する Scala のメジャーおよびマイナーバージョン (例: 2.12 または 2.13)
  • <SCALARDB_ANALYTICS_VERSION>: ScalarDB Analytics のバージョン

ScalarDB Analytics 依存関係の追加

ScalarDB Analytics は Maven Central Repository でホストされています。パッケージ名は scalardb-analytics-spark-all-<SPARK_VERSION>_<SCALA_VERSION>:<SCALARDB_ANALYTICS_VERSION> で、以下の通りです:

  • <SPARK_VERSION>: 使用している Spark のメジャーおよびマイナーバージョン (例: 3.4)
  • <SCALA_VERSION>: Spark インストールに対応する Scala のメジャーおよびマイナーバージョン (例: 2.12 または 2.13)
  • <SCALARDB_ANALYTICS_VERSION>: ScalarDB Analytics のバージョン

バージョンの互換性の詳細については、バージョン互換性を参照してください。

プロジェクトのビルド設定を設定することで、この依存関係をプロジェクトに追加できます。例えば、Gradle を使用している場合は、build.gradle ファイルに以下を追加できます:

dependencies {
implementation 'com.scalar-labs:scalardb-analytics-spark-all-<SPARK_VERSION>_<SCALA_VERSION>:<SCALARDB_ANALYTICS_VERSION>'
}
注記

Gradle の Shadow プラグインや Maven の Shade プラグインなどを使用して、アプリケーションを単一の fat JAR ファイルにバンドルする場合は、使用しているプラグインに応じて providedshadow などの適切な configuration を選択して、fat JAR ファイルから ScalarDB Analytics を除外する必要があります。

Spark アプリケーションの開発

このセクションでは、Java を使用して ScalarDB Analytics を使用する Spark アプリケーションを開発する方法について説明します。

ScalarDB Analytics を使用した Spark アプリケーションの開発には3つの方法があります:

  1. Spark ドライバーアプリケーション: クラスター内で実行される従来のSparkアプリケーション
  2. Spark Connect アプリケーション: Spark Connectプロトコルを使用するリモートアプリケーション
  3. JDBC アプリケーション: JDBCインターフェースを使用するリモートアプリケーション
注記

環境によっては、上記のすべての方法を使用できない場合があります。サポートされる機能とデプロイメントオプションの詳細については、サポートされるマネージド Spark サービスとそのアプリケーションタイプを参照してください。

これらのすべての方法で、同じテーブル識別子形式を使用して ScalarDB Analytics のテーブルを参照できます。ScalarDB Analytics がデータソースからカタログ情報をマッピングする方法の詳細については、データソース別のカタログ情報マッピングを参照してください。

ScalarDB Analytics には一般的に使用される SparkSession クラスを使用できます。また、YARN、Kubernetes、スタンドアロン、ローカルモードなど、Spark がサポートするあらゆるタイプのクラスターデプロイメントを使用できます。

ScalarDB Analytics のテーブルからデータを読み取るには、通常のSparkテーブルを読み取る場合と同じように spark.sql または spark.read.table 関数を使用できます。

まず、Java プロジェクトをセットアップする必要があります。例えば、Gradle を使用している場合は、build.gradle ファイルに以下を追加できます:

dependencies {
implementation 'com.scalar-labs:scalardb-analytics-spark-<SPARK_VERSION>_<SCALA_VERSION>:<SCALARDB_ANALYTICS_VERSION>'
}

以下は Spark ドライバーアプリケーションの例です:

import org.apache.spark.sql.SparkSession;

public class MyApp {
public static void main(String[] args) {
// SparkSessionを作成
try (SparkSession spark = SparkSession.builder().getOrCreate()) {
// ScalarDB Analyticsのテーブルからデータを読み取る
spark.sql("SELECT * FROM my_catalog.my_data_source.my_namespace.my_table").show();
}
}
}

その後、spark-submit コマンドを使用してアプリケーションをビルドして実行できます。

注記

通常の Spark アプリケーションと同様に、アプリケーションの fat JAR ファイルをビルドする必要がある場合があります。

spark-submit --class MyApp --master local[*] my-spark-application-all.jar
ヒント

spark-sqlspark-shell などの Spark が提供する他の CLI ツールを使用して、ScalarDB Analytics のテーブルを操作することもできます。

カタログ情報のマッピング

ScalarDB Analytics は、データソース、名前空間、テーブル、列を含む独自のカタログを管理します。この情報は自動的に Spark カタログにマッピングされます。このセクションでは、ScalarDB Analytics がカタログ情報を Spark カタログにマッピングする方法について説明します。

データソース内の情報が ScalarDB Analytics カタログにマッピングされる方法の詳細については、データソース別のカタログ情報マッピングを参照してください。

カタログレベルのマッピング

ScalarDB Analytics カタログの各カタログレベルオブジェクトは、Spark カタログにマッピングされます。以下の表は、カタログレベルがどのようにマッピングされるかを示しています:

データソーステーブル

ScalarDB Analytics カタログのデータソースのテーブルは、Spark テーブルにマッピングされます。ScalarDB Analytics テーブルに対応する Spark テーブルの識別子には以下の形式が使用されます:

<CATALOG_NAME>.<DATA_SOURCE_NAME>.<NAMESPACE_NAMES>.<TABLE_NAME>

括弧内の内容は以下の通りです:

  • <CATALOG_NAME>: カタログの名前
  • <DATA_SOURCE_NAME>: データソースの名前
  • <NAMESPACE_NAMES>: 名前空間の名前。名前空間が複数レベルある場合は、ドット (.) で区切って連結されます
  • <TABLE_NAME>: テーブルの名前

例えば、my_catalog という名前の ScalarDB カタログに、my_data_source という名前のデータソースと my_schema という名前のスキーマがある場合、そのスキーマ内の my_table という名前のテーブルを my_catalog.my_data_source.my_schema.my_table として参照できます。

ビュー

ScalarDB Analytics のビューは、ビューではなく Spark カタログのテーブルとして提供されます。ScalarDB Analytics ビューに対応する Spark テーブルの識別子には以下の形式が使用されます:

<CATALOG_NAME>.view.<VIEW_NAMESPACE_NAMES>.<VIEW_NAME>

括弧内の内容は以下の通りです:

  • <CATALOG_NAME>: カタログの名前
  • <VIEW_NAMESPACE_NAMES>: ビュー名前空間の名前。ビュー名前空間が複数レベルある場合は、ドット (.) で区切って連結されます
  • <VIEW_NAME>: ビューの名前

例えば、my_catalog という名前の ScalarDB カタログと my_view_namespace という名前のビュー名前空間がある場合、その名前空間内の my_view という名前のビューを my_catalog.view.my_view_namespace.my_view として参照できます。

注記

データソーステーブル識別子との競合を避けるため、view が接頭辞として付けられます。

WAL 解釈ビュー

ScalarDB Analytics の設計で説明されているように、ScalarDB Analytics は WAL 解釈ビューと呼ばれる特別なタイプのビューを提供します。これらのビューは、ScalarDB データソースのテーブルに対して自動的に作成され、テーブル内の WAL メタデータを解釈することでユーザーフレンドリーなビューを提供します。

元の ScalarDB テーブルのデータソース名と名前空間の名前が WAL 解釈ビューのビュー名前空間の名前として使用されるため、my_data_source という名前のデータソースの my_namespace という名前の名前空間にある my_table という名前の ScalarDB テーブルがある場合、そのテーブルの WAL 解釈ビューを my_catalog.view.my_data_source.my_namespace.my_table として参照できます。

データ型マッピング

ScalarDB Analytics は、カタログ内のデータ型を Spark データ型にマッピングします。以下の表は、データ型がどのようにマッピングされるかを示しています:

ScalarDB データ型Spark データ型
BYTEByte
SMALLINTShort
INTInteger
BIGINTLong
FLOATFloat
DOUBLEDouble
DECIMALDecimal
TEXTString
BLOBBinary
BOOLEANBoolean
DATEDate
TIMETimestampNTZ
TIMESTAMPTimestampNTZ
TIMESTAMPTZTimestamp
DURATIONCalendarInterval
INTERVALCalendarInterval

バージョン互換性

Spark と Scala は異なるマイナーバージョン間で互換性がない場合があるため、ScalarDB Analytics は様々な Spark と Scala バージョン向けに scalardb-analytics-spark-all-<SPARK_VERSION>_<SCALA_VERSION> という形式で異なるアーティファクトを提供しています。使用している Spark と Scala のバージョンに合わせてアーティファクトを選択してください。例えば、Spark 3.5 と Scala 2.13 を使用している場合は、scalardb-analytics-spark-all-3.5_2.13 を指定する必要があります。

Java バージョンに関しては、ScalarDB Analytics は Java 8以降をサポートしています。

以下は、ScalarDB Analytics の各バージョンでサポートされている Spark と Scalar のバージョンのリストです。

ScalarDB Analytics バージョンScalarDB バージョンサポートされている Spark バージョンサポートされている Scala バージョン最小 Java バージョン
3.163.163.5, 3.42.13, 2.128
3.153.153.5, 3.42.13, 2.128