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

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

注記

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

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

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

準備

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

前提条件

  • ScalarDB Analytics server: カタログメタデータを管理し、データソースに接続する実行中のインスタンス。サーバーには少なくとも1つのデータソースが登録されている必要があります。データソースの登録については、ScalarDB Analytics カタログの作成を参照してください。
  • Apache Spark: 互換性のあるバージョンの Apache Spark。サポートされているバージョンについては、バージョン互換性を参照してください。まだ Spark をインストールしていない場合は、Apache Spark のウェブサイトから Spark ディストリビューションをダウンロードしてください。
注記

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

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

ScalarDB Analytics は ScalarDB Analytics server と統合するために特定の Spark 設定が必要です。

必要な Spark 設定

ScalarDB Analytics を Spark で使用するには、以下を設定する必要があります:

  1. ScalarDB Analytics パッケージ: Spark と Scala のバージョンに一致する JAR 依存関係を追加
  2. メータリングリスナー: 課金のためのリソース使用状況を追跡するリスナーを登録
  3. カタログ登録: ScalarDB Analytics サーバーに接続する Spark カタログを登録

Spark を設定する際は、ScalarDB Analytics サーバー上で作成されたカタログと一致するカタログ名を指定する必要があります。これにより、Spark がそのカタログで管理されているデータソースに正しくアクセスできるようになります。

設定例

以下は完全な設定例です:

# 1. ScalarDB Analytics パッケージ
spark.jars.packages com.scalar-labs:scalardb-analytics-spark-all-<SPARK_VERSION>_<SCALA_VERSION>:<SCALARDB_ANALYTICS_VERSION>

# 2. メータリングリスナー
spark.extraListeners com.scalar.db.analytics.spark.metering.ScalarDbAnalyticsListener

# 3. カタログ登録
spark.sql.catalog.myanalytics com.scalar.db.analytics.spark.catalog.ScalarDBAnalyticsCatalog
spark.sql.catalog.myanalytics.server.host analytics-server.example.com
spark.sql.catalog.myanalytics.server.catalog.port 11051
spark.sql.catalog.myanalytics.server.metering.port 11052

プレースホルダーを置き換えてください:

  • <SPARK_VERSION>: 使用している Spark のバージョン (例: 3.5 または 3.4)
  • <SCALA_VERSION>: 使用している Scala のバージョン (例: 2.13 または 2.12)
  • <SCALARDB_ANALYTICS_VERSION>: ScalarDB Analytics のバージョン (例: 3.16.0)

この例では:

  • カタログ名 myanalytics は、ScalarDB Analytics サーバー上に存在するカタログと一致する必要があります.
  • ScalarDB Analytics サーバーは analytics-server.example.com で実行されています.
  • テーブルには myanalytics.<data_source>.<namespace>.<table> の形式でアクセスします.
important

Spark 設定のカタログ名は、CLI を使用して ScalarDB Analytics サーバー上で作成されたカタログの名前と一致させる必要があります。たとえば、サーバー上で production という名前のカタログを作成した場合、Spark 設定プロパティでカタログ名として production を使用する必要があります(例:spark.sql.catalog.productionspark.sql.catalog.production.server.host など)。

注記

データソース設定は ScalarDB Analytics server で管理されます。ScalarDB Analytics server でのデータソースの設定方法については、ScalarDB Analytics カタログの作成を参照してください。

Spark アプリケーションのビルド設定

ScalarDB Analytics を使用する Spark アプリケーションを開発する際は、ビルド設定に依存関係を追加できます。たとえば Gradle の場合:

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

Gradle Shadow や Maven Shade などのプラグインを使用してアプリケーションを fat JAR にバンドルする場合は、providedshadow などの設定を使用して 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.kts ファイルに以下を追加できます:

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 テーブルにマッピングされ、以下の形式で識別されます:

<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 データ型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