|
| 1 | +--- |
| 2 | +tags: |
| 3 | + - Enterprise Option |
| 4 | +displayed_sidebar: docsJapanese |
| 5 | +--- |
| 6 | + |
| 7 | +# ScalarDB Analytics をはじめよう |
| 8 | + |
| 9 | +import WarningLicenseKeyContact from "/src/components/ja-jp/_warning-license-key-contact.mdx"; |
| 10 | +import TranslationBanner from "/src/components/_translation-ja-jp.mdx"; |
| 11 | + |
| 12 | +<TranslationBanner /> |
| 13 | + |
| 14 | +このクイックスタートガイドでは、ScalarDB Analytics をセットアップし、PostgreSQL、MySQL、Cassandra を含む異なるデータベース間でフェデレーテッドクエリを実行する方法を説明します。ScalarDB Analytics とその主要な利点の概要については、[ScalarDB 概要](../overview.mdx)および [ScalarDB 設計](../design.mdx)ページを参照してください。 |
| 15 | + |
| 16 | +## 何を構築するか |
| 17 | + |
| 18 | +このチュートリアルでは、以下のようなサンプル電子商取引分析環境をセットアップします: |
| 19 | + |
| 20 | +- 顧客データは PostgreSQL に格納 |
| 21 | +- 注文データは ScalarDB を介して MySQL で管理 |
| 22 | +- 明細項目の詳細は Cassandra に保存され、ScalarDB トランザクションを通じて更新 |
| 23 | + |
| 24 | +3つのデータベースすべてにまたがってデータを結合する分析クエリを実行し、ビジネスインサイトを得ます。ソースコードは [https://github.com/scalar-labs/scalardb-samples/tree/main/scalardb-analytics-sample](https://github.com/scalar-labs/scalardb-samples/tree/main/scalardb-analytics-sample) で入手できます。 |
| 25 | + |
| 26 | +## 前提条件 |
| 27 | + |
| 28 | +- [Docker](https://www.docker.com/get-started/) 20.10以降と [Docker Compose](https://docs.docker.com/compose/install/) V2以降 |
| 29 | + |
| 30 | +<WarningLicenseKeyContact product="ScalarDB Analytics" /> |
| 31 | + |
| 32 | +## ステップ 1: 環境をセットアップする |
| 33 | + |
| 34 | +このセクションでは、ScalarDB Analytics 環境をセットアップする方法について説明します。 |
| 35 | + |
| 36 | +### リポジトリをクローンする |
| 37 | + |
| 38 | +**ターミナル** を開き、ScalarDB サンプルリポジトリをクローンします: |
| 39 | + |
| 40 | +```console |
| 41 | +git clone https://github.com/scalar-labs/scalardb-samples |
| 42 | +cd scalardb-samples/scalardb-analytics-sample |
| 43 | +``` |
| 44 | + |
| 45 | +### ライセンスを設定する |
| 46 | + |
| 47 | +ScalarDB Analytics ライセンスを追加するには、`config/scalardb-analytics-server.properties` を開きます。次に、ライセンス設定行のコメントを外して更新し、`<YOUR_LICENSE_KEY>` と `<YOUR_LICENSE_CERT_PEM>` を実際のライセンス情報に置き換えます: |
| 48 | + |
| 49 | +```properties |
| 50 | +# License configuration (required for production) |
| 51 | +scalar.db.analytics.server.licensing.license_key=<YOUR_LICENSE_KEY> |
| 52 | +scalar.db.analytics.server.licensing.license_check_cert_pem=<YOUR_LICENSE_CERT_PEM> |
| 53 | +``` |
| 54 | + |
| 55 | +## ステップ 2: サンプルデータベースを設定する |
| 56 | + |
| 57 | +サンプルデータベースをセットアップするには、次のコマンドを実行します: |
| 58 | + |
| 59 | +```console |
| 60 | +docker compose up -d --wait |
| 61 | +``` |
| 62 | + |
| 63 | +このコマンドは、以下のサービスをローカルで起動します: |
| 64 | + |
| 65 | +- **ScalarDB Analytics コンポーネント:** |
| 66 | + - **ScalarDB Analytics サーバー:** すべてのデータソースのメタデータを管理し、クエリ実行のための統一インターフェースを提供します。 |
| 67 | +- **サンプルデータベース:** |
| 68 | + - **PostgreSQL:** ScalarDB 管理外データベースとして使用(直接アクセス) |
| 69 | + - **Cassandra および MySQL:** ScalarDB 管理下データベースとして使用(ScalarDB のトランザクションレイヤー経由でアクセス) |
| 70 | + |
| 71 | +このガイドでは、PostgreSQL は ScalarDB トランザクションによって管理されない **ScalarDB 管理外データベース** と呼ばれ、Cassandra および MySQL は ScalarDB トランザクションによって管理される **ScalarDB 管理下データベース** と呼ばれます。 |
| 72 | + |
| 73 | +サンプルデータは初回セットアップ時にすべてのデータベースに自動的にロードされます。セットアップが完了すると、次のテーブルが使用可能になります: |
| 74 | + |
| 75 | +- PostgreSQL: |
| 76 | + - `sample_ns.customer` |
| 77 | +- ScalarDB (Cassandra): |
| 78 | + - `cassandrans.lineitem` |
| 79 | +- ScalarDB (MySQL): |
| 80 | + - `mysqlns.orders` |
| 81 | + |
| 82 | +ScalarDB 内では、`cassandrans` と `mysqlns` がそれぞれ Cassandra と MySQL にマッピングされます。 |
| 83 | + |
| 84 | +列定義やデータ型を含むテーブルスキーマの詳細については、[スキーマの詳細](#スキーマの詳細)を参照してください。サンプルデータがこれらのテーブルに正常にロードされていることを確認してください。 |
| 85 | + |
| 86 | +## ステップ 3: ScalarDB Analytics CLI を使用してデータソースを登録する |
| 87 | + |
| 88 | +分析クエリを実行する前に、データソースを ScalarDB Analytics サーバーに登録する必要があります。これは ScalarDB Analytics CLI を使用して行うことができます。 |
| 89 | + |
| 90 | +### カタログを作成する |
| 91 | + |
| 92 | +まず、データソースを整理するための新しいカタログを作成します: |
| 93 | + |
| 94 | +```console |
| 95 | +docker compose run --rm scalardb-analytics-cli catalog create --catalog sample_catalog |
| 96 | +``` |
| 97 | + |
| 98 | +### ScalarDB をデータソースとして登録する |
| 99 | + |
| 100 | +ScalarDB が管理するデータベースを登録します: |
| 101 | + |
| 102 | +```console |
| 103 | +docker compose run --rm scalardb-analytics-cli data-source register \ |
| 104 | + --data-source-json /config/data-sources/scalardb.json |
| 105 | +``` |
| 106 | + |
| 107 | +これにより、ScalarDB が管理する Cassandra と MySQL の両方のテーブルが登録されます。 |
| 108 | + |
| 109 | +### PostgreSQL をデータソースとして登録する |
| 110 | + |
| 111 | +PostgreSQL データベースを登録します: |
| 112 | + |
| 113 | +```console |
| 114 | +docker compose run --rm scalardb-analytics-cli data-source register \ |
| 115 | + --data-source-json /config/data-sources/postgres.json |
| 116 | +``` |
| 117 | + |
| 118 | +## ステップ 4: Spark SQL コンソールを起動する |
| 119 | + |
| 120 | +Spark SQL コンソールを起動するには、次のコマンドを実行します: |
| 121 | + |
| 122 | +```console |
| 123 | +docker compose run --rm spark-sql |
| 124 | +``` |
| 125 | + |
| 126 | +Spark SQL コンソールを起動すると、**spark-defaults.conf** の設定で ScalarDB Analytics カタログが初期化され、`sample_catalog` という名前の Spark カタログとして登録されます。 |
| 127 | + |
| 128 | +### 名前空間マッピング |
| 129 | + |
| 130 | +設定されたデータソースの以下のテーブルは、Spark SQL テーブルにマッピングされ、異なるデータソース間でのシームレスなクエリが可能になります: |
| 131 | + |
| 132 | +- PostgreSQL: |
| 133 | + - `sample_catalog.postgres.sample_ns.customer` |
| 134 | +- ScalarDB (Cassandra): |
| 135 | + - `sample_catalog.scalardb.cassandrans.lineitem` |
| 136 | +- ScalarDB (MySQL): |
| 137 | + - `sample_catalog.scalardb.mysqlns.orders` |
| 138 | + |
| 139 | +## ステップ 5: 分析クエリを実行する |
| 140 | + |
| 141 | +ScalarDB Analytics 環境のセットアップが完了したので、Spark SQL コンソールを使用してサンプルデータに対して分析クエリを実行できます。 |
| 142 | + |
| 143 | +### クエリ 1: 出荷パフォーマンスと返品の分析 |
| 144 | + |
| 145 | +以下の SQL クエリは、Cassandra の明細項目データを調査することで、基本的な分析機能を示します。このクエリは以下のようなビジネス上の質問に答えるのに役立ちます: |
| 146 | + |
| 147 | +- 返品された商品対正常に出荷された商品の割合は? |
| 148 | +- 返品の財務的影響は? |
| 149 | +- 注文ステータスによって価格設定はどう異なるか? |
| 150 | + |
| 151 | +このクエリは、返品ステータスとラインステータス別にグループ化された主要メトリックを計算します: |
| 152 | + |
| 153 | +```sql |
| 154 | +SELECT |
| 155 | + l_returnflag, |
| 156 | + l_linestatus, |
| 157 | + sum(l_quantity) AS sum_qty, |
| 158 | + sum(l_extendedprice) AS sum_base_price, |
| 159 | + sum(l_extendedprice * (1 - l_discount)) AS sum_disc_price, |
| 160 | + sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) AS sum_charge, |
| 161 | + avg(l_quantity) AS avg_qty, |
| 162 | + avg(l_extendedprice) AS avg_price, |
| 163 | + avg(l_discount) AS avg_disc, |
| 164 | + count(*) AS count_order |
| 165 | +FROM |
| 166 | + sample_catalog.scalardb.cassandrans.lineitem |
| 167 | +WHERE |
| 168 | + to_date(l_shipdate, 'yyyy-MM-dd') <= date '1998-12-01' - 3 |
| 169 | +GROUP BY |
| 170 | + l_returnflag, |
| 171 | + l_linestatus |
| 172 | +ORDER BY |
| 173 | + l_returnflag, |
| 174 | + l_linestatus; |
| 175 | +``` |
| 176 | + |
| 177 | +次の出力が表示されます: |
| 178 | + |
| 179 | +```console |
| 180 | +A F 1519 2374824.6560278563 1387364.2207725341 1962763.4654265852 26.649122807017545 41663.590456629056 0.41501802923479575 57 |
| 181 | +N F 98 146371.2295412012 85593.96776336085 121041.55837332775 32.666666666666664 48790.409847067065 0.40984706454007996 3 |
| 182 | +N O 5374 8007373.247086477 4685647.785126835 6624210.945739046 24.427272727272726 36397.15112312035 0.4147594809559689 220 |
| 183 | +R F 1461 2190869.9676265526 1284178.4378283697 1814151.2807494882 25.189655172413794 37773.62013149229 0.41323493790730753 58 |
| 184 | +``` |
| 185 | + |
| 186 | +### クエリ 2: 収益最適化のためのクロスデータベース分析 |
| 187 | + |
| 188 | +以下の SQL クエリは、ScalarDB Analytics の主要な機能を示します:データ移動なしで異なるデータベース間のデータを結合する機能です。具体的には、このクエリは ETL パイプラインなどによるデータ移動を必要とせずに、PostgreSQL の顧客テーブル、MySQL の注文テーブル、Cassandra の明細項目を結合します。このクエリは以下のようなビジネス上の質問に答えるのに役立ちます: |
| 189 | + |
| 190 | +- フルフィルメントを優先するために、特定の顧客セグメントからのまだ出荷されていない高額注文は何か? |
| 191 | + |
| 192 | +このクエリは、AUTOMOBILE セグメントの顧客の未出荷注文を収益順に見つけます: |
| 193 | + |
| 194 | +```sql |
| 195 | +SELECT |
| 196 | + l_orderkey, |
| 197 | + sum(l_extendedprice * (1 - l_discount)) AS revenue, |
| 198 | + o_orderdate, |
| 199 | + o_shippriority |
| 200 | +FROM |
| 201 | + sample_catalog.postgres.sample_ns.customer, |
| 202 | + sample_catalog.scalardb.mysqlns.orders, |
| 203 | + sample_catalog.scalardb.cassandrans.lineitem |
| 204 | +WHERE |
| 205 | + c_mktsegment = 'AUTOMOBILE' |
| 206 | + AND c_custkey = o_custkey |
| 207 | + AND l_orderkey = o_orderkey |
| 208 | + AND o_orderdate < '1995-03-15' |
| 209 | + AND l_shipdate > '1995-03-15' |
| 210 | +GROUP BY |
| 211 | + l_orderkey, |
| 212 | + o_orderdate, |
| 213 | + o_shippriority |
| 214 | +ORDER BY |
| 215 | + revenue DESC, |
| 216 | + o_orderdate, |
| 217 | + l_orderkey |
| 218 | +LIMIT 10; |
| 219 | +``` |
| 220 | + |
| 221 | +次の出力が表示されます: |
| 222 | + |
| 223 | +```console |
| 224 | +1071617 128186.99915996166 1995-03-10 0 |
| 225 | +1959075 33104.51278645416 1994-12-23 0 |
| 226 | +430243 19476.115819260962 1994-12-24 0 |
| 227 | +``` |
| 228 | + |
| 229 | +結果は、注文キー `1071617` の注文の出荷を優先すべきであることを示しています。 |
| 230 | + |
| 231 | +:::note |
| 232 | + |
| 233 | +このサンプルチュートリアルでインポートされたテーブルに対して、Apache Spark および Spark SQL がサポートする任意のクエリを実行することもできます。ScalarDB Analytics は Spark SQL がサポートするすべてのクエリをサポートしているため、例に示されている選択 (フィルタリング)、結合、集計、順序付けだけでなく、ウィンドウ関数、ラテラル結合、その他のさまざまな操作も実行できます。 |
| 234 | + |
| 235 | +Spark SQL がサポートするクエリの種類を確認するには、[Spark SQL ドキュメント](https://spark.apache.org/docs/latest/sql-ref.html)を参照してください。 |
| 236 | + |
| 237 | +::: |
| 238 | + |
| 239 | +## ステップ 6: サンプルアプリケーションを停止する |
| 240 | + |
| 241 | +サンプルアプリケーションを停止し、関連付けられているすべてのボリュームを削除するには、次のコマンドを実行します。このアクションにより、すべてのサービスがシャットダウンされ、ボリュームに保存されているすべての永続データが削除され、アプリケーションの状態がリセットされます: |
| 242 | + |
| 243 | +```console |
| 244 | +docker compose down -v |
| 245 | +``` |
| 246 | + |
| 247 | +## リファレンス |
| 248 | + |
| 249 | +### スキーマの詳細 |
| 250 | + |
| 251 | +次のエンティティ関係図は、PostgreSQL、MySQL、Cassandra のテーブル間の関係を示しており、外部キーによって顧客、注文、明細項目がリンクされています。 |
| 252 | + |
| 253 | +```mermaid |
| 254 | +erDiagram |
| 255 | + "postgres.sample_ns.customer" ||--|{ "scalardb.mysqlns.orders" : "custkey" |
| 256 | + "postgres.sample_ns.customer" { |
| 257 | + int c_custkey |
| 258 | + text c_name |
| 259 | + text c_address |
| 260 | + int c_nationkey |
| 261 | + text c_phone |
| 262 | + double c_acctbal |
| 263 | + text c_mktsegment |
| 264 | + text c_comment |
| 265 | + } |
| 266 | + "scalardb.mysqlns.orders" ||--|{ "scalardb.cassandrans.lineitem" : "orderkey" |
| 267 | + "scalardb.mysqlns.orders" { |
| 268 | + int o_orderkey |
| 269 | + int o_custkey |
| 270 | + text o_orderstatus |
| 271 | + double o_totalprice |
| 272 | + text o_orderdate |
| 273 | + text o_orderpriority |
| 274 | + text o_clerk |
| 275 | + int o_shippriority |
| 276 | + text o_comment |
| 277 | + } |
| 278 | + "scalardb.cassandrans.lineitem" { |
| 279 | + int l_orderkey |
| 280 | + int l_partkey |
| 281 | + int l_suppkey |
| 282 | + int l_linenumber |
| 283 | + double l_quantity |
| 284 | + double l_extendedprice |
| 285 | + double l_discount |
| 286 | + double l_tax |
| 287 | + text l_returnflag |
| 288 | + text l_linestatus |
| 289 | + text l_shipdate |
| 290 | + text l_commitdate |
| 291 | + text l_receiptdate |
| 292 | + text l_shipinstruct |
| 293 | + text l_shipmode |
| 294 | + text l_comment |
| 295 | + } |
| 296 | +``` |
| 297 | + |
| 298 | +- `postgres.sample_ns.customer` は PostgreSQL のテーブルであり、ScalarDB によって管理されていません。 |
| 299 | +- `scalardb.mysqlns.orders` と `scalardb.cassandrans.lineitem` は ScalarDB のテーブルであり、それぞれ MySQL と Cassandra にマッピングされています。 |
| 300 | + |
| 301 | +テーブルの簡単な説明は次のとおりです: |
| 302 | + |
| 303 | +- **`postgres.sample_ns.customer`.** 顧客に関する情報を表すテーブル。このテーブルには、顧客キー、名前、住所、電話番号、口座残高などの属性が含まれます。 |
| 304 | +- **`scalardb.mysqlns.orders`.** 顧客が行った注文に関する情報を含むテーブル。このテーブルには、注文キー、顧客キー、注文ステータス、注文日、注文優先度などの属性が含まれます。 |
| 305 | +- **`scalardb.cassandrans.lineitem`.** 注文に関連付けられた明細項目を表すテーブル。このテーブルには、注文キー、部品キー、サプライヤーキー、数量、価格、出荷日などの属性が含まれます。 |
0 commit comments