ScalarDB Analytics をはじめよう
このページは英語版のページが機械翻訳されたものです。英語版との間に矛盾または不一致がある場合は、英語版を正としてください。
このチュートリアルでは、ScalarDB Analytics を使用してサンプルデータに対して分析クエリを実行する方法について説明します。ソースコードは https://github.com/scalar-labs/scalardb-samples/tree/main/scalardb-analytics-spark-sample で入手できます。
現在のバージョンの ScalarDB Analytics は、実行エンジンとして Apache Spark を活用しています。Spark カスタムカタログを使用して、ScalarDB 管理下データソースと ScalarDB 管理外データソースの統合ビューを提供します。ScalarDB Analytics を使用すると、これらのデータソースのテーブルをネイティブ Spark テーブルとして扱うことができ、任意の Spark SQL クエリをシームレスに実行できます。たとえば、Cassandra に格納されているテーブルを PostgreSQL のテーブルと結合して、複数のデータソースにまたがる分析を簡単に実行できます。
サンプルアプリケーションの概要
このサンプルチュートリアルでは、Sparkの設定によってScalarDB Analyticsを有効にし、ScalarDB Analytics から提供されるテーブルに対して spark-sql
を用いたインタラクティブな分析を実行する方法をしめします。
このサンプルアプリケーションの前提条件
- Docker 20.10以降と Docker Compose V2以降
ScalarDB Analytics を使用するには、ライセンスキー (試用ライセンスまたは商用ライセンス) が必要です。ライセンスキーをお持ちでない場合は、お問い合わせください。
ステップ 1: ScalarDB Analytics をセットアップする
ScalarDB サンプルリポジトリをクローンする
ターミナル を開き、次のコマンドを実行して ScalarDB サンプルリポジトリをクローンします:
git clone https://github.com/scalar-labs/scalardb-samples
次に、次のコマンドを実行してサンプルアプリケーションを含むディレクトリに移動します:
cd scalardb-samples/scalardb-analytics-spark-sample
ライセンス情報を設定する
ScalarDB Analytics では、Spark 設定で有効なライセンス情報を指定する必要があります。ライセンスの詳細は、spark-defaults.conf ファイルで指定できます。
Spark インストールの conf ディレクトリにある spark-defaults.conf ファイルを開きます。次に、<REPLACE_THIS_WITH_YOUR_LICENSE>
をライセンスキーに置き換え、<REPLACE_THIS_WITH_YOUR_LICENSE_CERTIFICATE_PEM_CONTENTS>
をライセンス証明書の PEM エンコードされた内容に置き換えます。
spark.sql.catalog.test_catalog.license.key <REPLACE_THIS_WITH_YOUR_LICENSE>
spark.sql.catalog.test_catalog.license.cert_pem <REPLACE_THIS_WITH_YOUR_LICENSE_CERTIFICATE_PEM_CONTENTS>
ScalarDB Analytics を設定するために spark-defaults.conf で必要な項目の詳細については、ScalarDB Analytics の設定を参照してください。
ステップ 2: サンプルデータベースをセットアップする
サンプルデータベースをセットアップするには、次のコマンドを実行します:
docker compose up -d --wait
このコマンドは、PostgreSQL、Cassandra、MySQL の3つのサービスをローカルで起動します。
- PostgreSQL: 単独で使用されます (ScalarDB 管理外)。
- Cassandra および MySQL: ScalarDB のバックエンドデータベースとして使用されます (ScalarDB 管理下)。
このガイドでは、PostgreSQL は ScalarDB トランザクションによって管理されない ScalarDB 管理外データベース と呼ばれ、Cassandra および DynamoDB は ScalarDB トランザクションによって管理される ScalarDB 管理下データベース と呼ばれます。
ScalarDB 管理外データベースについては、Docker コンテナが初期化されるとサンプルデータ が自動的に読み込まれるため、追加の手順は必要ありません。 ScalarDB 管理下データベースについては、コンテナを起動した後、次のコマンドを実行してサンプルデータをロードします:
docker compose run --rm sample-data-loader
セットアップが完了すると、次のテーブルが使用可能になります:
- PostgreSQL:
sample_ns.customer
- ScalarDB (Cassandra):
cassandrans.lineitem
- ScalarDB (MySQL):
mysqlns.order
ScalarDB 内では、cassandrans
と mysqlns
がそれぞれ Cassandra と MySQL にマッピングされます。
列定義やデータ型を含むテーブルスキーマの詳細については、スキーマの詳細を参照してください。サンプルデータがこれらのテーブルに正常にロードされていることを確認してください。
ステップ 3: Spark SQL コンソールを起動する
Spark SQL コンソールを起動するには、次のコマンドを実行します:
docker compose run --rm spark-sql
Spark SQL コンソールを起動すると、spark-defaults.conf の設定で ScalarDB Analytics カタログが初期化され、test_catalog
という名前の Spark カタログとして登録されます。
名前空間マッピング
データソース内の各テーブルは、以下のようにSpark SQLのテーブルにマッピングされます。
- PostgreSQL:
test_catalog.postgresql.sample_ns.customer
- ScalarDB (Cassandra ):
test_catalog.scalardb.cassandrans.lineitem
- ScalarDB (MySQL):
test_catalog.scalardb.mysqlns.orders
各データソースのテーブル名をSpark SQLのテーブル名にマッピングする規則の詳細は、名前空間マッピングの詳細を参照してください。
さらに、ScalarDB Analytics は ScalarDB テーブルに対して、一般的なユースケースを簡単にするために、WAL 解釈 ビューを提供します。このサンプルアプリケーションでは、次の WAL 解釈ビューが利用できます:
- ScalarDB (Cassandra ):
test_catalog.view.scalardb.cassandrans.lineitem
- ScalarDB (MySQL):
test_catalog.view.scalardb.mysqlns.orders
ほとんどの場合、WAL 解釈ビューは生のテーブルよりも便利です。このチュートリアルでは、ScalarDB のテーブルについては WAL 解釈ビューを使用します。WAL 解釈ビューの詳細な情報 (使用例や利点など) については、ScalarDB テーブル用の WAL 解釈ビューを参照してください。
ステップ 4: 分析クエリを実行する
これですべての設定が完了し、Spark SQL コンソールを使用してサンプルデータに対して分析クエリを実行できます。
データの読み取りとサマリーの計算
次のクエリを実行して、Cassandra の test_catalog.scalardb.cassandrans.lineitem
からデータを取得し、返品フラグとラインステータス別にグループ化されたラ インアイテムの合計数量、平均価格、合計収益などの集計メトリックを計算できます。
SELECT
l_returnflag,
l_linestatus,
sum(l_quantity) AS sum_qty,
sum(l_extendedprice) AS sum_base_price,
sum(l_extendedprice * (1 - l_discount)) AS sum_disc_price,
sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) AS sum_charge,
avg(l_quantity) AS avg_qty,
avg(l_extendedprice) AS avg_price,
avg(l_discount) AS avg_disc,
count(*) AS count_order
FROM
test_catalog.view.scalardb.cassandrans.lineitem
WHERE
to_date(l_shipdate, 'yyyy-MM-dd') <= date '1998-12-01' - 3
GROUP BY
l_returnflag,
l_linestatus
ORDER BY
l_returnflag,
l_linestatus;
次の出力が表示されます:
A F 1519 2374824.6560278563 1387364.2207725341 1962763.4654265852 26.649122807017545 41663.590456629056 0.41501802923479575 57
N F 98 146371.2295412012 85593.96776336085 121041.55837332775 32.666666666666664 48790.409847067065 0.40984706454007996 3
N O 5374 8007373.247086477 4685647.785126835 6624210.945739046 24.427272727272726 36397.15112312035 0.4147594809559689 220
RF 1461 2190869.9676265526 1284178.4378283697 1814151.2807494882 25.189655172413794 37773.62013149229 0.41323493790730753 58
複数のデータソースにまたがるテーブルを結合
次のクエリを実行して、ScalarDB 管理下テーブルと ScalarDB 管理外テーブルの両方を含む複数のデータソースのテーブルを結合することもできます。このクエリは、PostgreSQL、MySQL、Cassandra の顧客、注文、明細データを結合し、特定の日付の収益が最も高い未出荷の注文を特定します。
SELECT
l_orderkey,
sum(l_extendedprice * (1 - l_discount)) AS revenue,
o_orderdate,
o_shippriority
FROM
test_catalog.postgresql.sample_ns.customer,
test_catalog.scalardb.mysqlns.orders,
test_catalog.scalardb.cassandrans.lineitem
WHERE
c_mktsegment = 'AUTOMOBILE'
AND c_custkey = o_custkey
AND l_orderkey = o_orderkey
AND o_orderdate < '1995-03-15'
AND l_shipdate > '1995-03-15'
GROUP BY
l_orderkey,
o_orderdate,
o_shippriority
ORDER BY
revenue DESC,
o_orderdate,
l_orderkey
LIMIT 10;
次の出力が表示されます:
1071617 128186.99915996166 1995-03-10 0
1959075 33104.51278645416 1994-12-23 0
430243 19476.115819260962 1994-12-24 0
このサンプルチュートリアルでインポートされたテーブルに対して、Apache Spark および Spark SQL がサポートする任意のクエリを実行することもできます。ScalarDB Analytics は Spark SQL がサポートするすべてのクエリをサポートしているため、例に示されている選択 (フィルタリング)、結合、集計、順序付けだけでなく、ウィンドウ関数、ラテラル結合、その他のさまざまな操作も実行できます。
Spark SQL がサポートするクエリの種類を確認するには、Spark SQL ドキュメントを参照してください。
ステップ 5: サンプルアプリケーションを停止する
サンプルアプリケーションを停止し、関連付けられているすべてのボリュームを削除するには、次のコマンドを実行します。このアクションにより、すべてのサービスがシャットダウンされ、ボリュームに保存されているすべての永続データが削除され、アプリケーションの状態がリセットされます:
docker compose down -v
リファレンス
このセクションには、設定やスキーマの詳細など、ScalarDB Analytics に関連するその他の詳細が含まれています。
ScalarDB Analytics の設定
ScalarDB Analytics の設定は、spark-defaults.conf
ファイルなどの Spark の設定によって行います。このセクションでは、このサンプルアプリケーションでの ScalarDB Analytics の設定について簡単に説明します。
一般的な設定
以下は、ScalarDB Analytics の一般的な設定です:
spark.sql.catalog.test_catalog com.scalar.db.analytics.spark.ScalarDbAnalyticsCatalog
spark.sql.extensions com.scalar.db.analytics.spark.extension.ScalarDbAnalyticsExtensions
最初の行は、Spark カタログプラグインの実装クラスを指定します。Spark SQL で ScalarDB Analytics カタログを有効にするには、常にこれを com.scalar.db.analytics.spark.ScalarDbAnalyticsCatalog
に設定する必要があります。
カタログ名として任意の文字列を設定できます。この例では test_catalog
です。設定されたカタログ名は、Spark SQL クエリのテーブル識別子の一部として使用されます。
2 行目は、Spark SQL 拡張実装クラスを指定します。これは、前述の spark.sql.catalog.test_catalog
設定とともに、常に com.scalar.db.analytics.spark.extension.ScalarDbAnalyticsExtensions
に設定する必要があります。
ライセンス情報
以下は、ScalarDB Analytics のライセンス設定です:
spark.sql.catalog.test_catalog.license.key <REPLACE_THIS_WITH_YOUR_LICENSE>
spark.sql.catalog.test_catalog.license.cert_pem <REPLACE_THIS_WITH_YOUR_LICENSE_CERTIFICATE_PEM_CONTENTS>
これらの行は、ScalarDB Analytics のライセンス情報を提供します。上で説明したように、Spark SQL コンソールを起動する前に、プレースホルダーをライセンス情報に置き換える必要があります。