このトピックでは、オンライン分析処理 (OLAP) リソースグループを使用して、列のストアおよびワイドテーブルデータにアクセスする方法について説明します。OLAP リソースグループは、ワイドテーブルエンジンの組み込み SQL 機能よりも包括的な SQL 分析機能を提供します。これにより、大規模データの高同時実行分析に適しています。
前提条件
お使いの Lindorm インスタンスで LindormTable を有効化していること。
Lindorm コンピュートエンジンを有効化していること。
クライアントの IP アドレスが Lindorm ホワイトリストに追加されていること。
OLAP リソースグループを有効化していること。
OLAP リソースグループのエンドポイントを取得して接続する
Lindorm コンソールにログインします。ページの左上隅で、インスタンスのリージョンを選択します。Instances ページで、対象インスタンスの ID をクリックするか、インスタンスの Actions 列にある View Instance Details をクリックします。
Instance Details ページの Configurations セクションで、Compute Engine のアクション列にある Resource Groups をクリックします。
Resource Group Details ページで、ステータスと説明情報 が 実行中 の OLAP リソースグループを選択します。OLAP リソースグループの名前にポインターを合わせると、VPC 内部エンドポイント (例:
jdbc:mysql://ld-bp1dv48fk0yg0****-olap-proxy-ldps.lindorm.aliyuncs.com:9030) を取得できます。MySQL クライアントを設定した後、VPC 内部エンドポイントと LindormTable のユーザー名とパスワードを使用して OLAP リソースグループに接続します。接続には MySQL プロトコルが使用されます。
mysql -hld-bp1dv48fk0yg0****-olap-proxy-ldps.lindorm.aliyuncs.com -P9030 -uroot -p接続が確立されると、MySQL コマンドラインプロンプトが表示されます。その後、SQL 文を実行できます。
データへのアクセス
OLAP リソースグループは、計算とストレージの分離アーキテクチャを使用します。列のストアエンジンとワイドテーブルエンジンの 2 つの内部データソースへの直接アクセスをサポートしています。カタログは、データソースを区別するために使用されます。
次の SQL 文を使用して、列のストアとワイドテーブルのデータソースを切り替えることができます:
ワイドテーブルデータソースに切り替える:
SET CATALOG lindorm_table;。列のストアデータソースに切り替える:
SET CATALOG lindorm_columnar;。
切り替えた後、SELECT catalog(); を実行して現在のカタログを確認できます。
列のストアデータへのアクセス
列のストアデータは、Apache Iceberg 仕様と互換性のあるオープンデータレイクフォーマットを使用します。データは、Lindorm インスタンスの基盤となる分散ファイルシステムに物理的に保存されます。このストレージアーキテクチャにより、同じ Lindorm インスタンス内の異なるタイプのリソースグループ (OLAP や抽出・変換・書き出し (ETL) リソースグループなど) が、同じカラムナデータに直接アクセスできます。
データベースを作成します。
CREATE DATABASE olapdemo;データベースを使用します。
USE olapdemo;データテーブルを作成します。
CREATE TABLE test (id INT, name STRING) ENGINE = iceberg;データを書き込みます。
INSERT INTO test VALUES (0, 'Jay'), (1, 'Edison');データをクエリします。
例 1:
SELECT id, name FROM test WHERE id != 0;出力:
+------+--------+ | id | name | +------+--------+ | 1 | Edison | +------+--------+例 2:
SELECT count(distinct name) FROM test;出力:
+----------------------+ | count(DISTINCT name) | +----------------------+ | 2 | +----------------------+例 3:
SELECT * FROM (SELECT id, name FROM test WHERE id != 0) t0 JOIN (SELECT id, name FROM test WHERE id != 2) t1 ON t0.id=t1.id;+------+--------+------+--------+ | id | name | id | name | +------+--------+------+--------+ | 1 | Edison | 1 | Edison | +------+--------+------+--------+
クエリ結果をテーブルに書き込みます。
INSERT INTO test SELECT * FROM test;データテーブルを削除します。
DROP TABLE test;データベースを削除します。
DROP DATABASE olapdemo;
ワイドテーブルデータへのアクセス
Lindorm ワイドテーブルエンジンは、大規模な構造化データおよび半構造化データ向けに設計された分散ストレージシステムです。HBase、Phoenix (SQL)、Cassandra などのオープン標準インターフェイスと互換性があります。このエンジンは、単一のテーブルに数兆行のデータを保存し、ミリ秒レベルの応答時間で数千万の同時リクエストを処理し、強力な整合性とデータセンター間のディザスタリカバリを提供できます。ワイドテーブルエンジンは、メタデータ管理、注文と請求書、ユーザーペルソナ、ソーシャルグラフ、ログ分析などのシナリオに適しています。大規模データのオンラインストレージとリアルタイムクエリのビジネス要件を効率的に満たします。
OLAP リソースグループは、ワイドテーブルエンジンに接続できます。独立した計算リソースと強化されたクエリ機能を使用して、ワイドテーブルデータに対してリアルタイム分析を実行します。
使用可能なワイドテーブルが既にある場合は、次のステップに進みます。そうでない場合は、LindormTable に接続し、次のステートメントを実行して tb という名前のワイドテーブルを作成します:
-- データベースを作成します。
CREATE DATABASE test;
-- データベースを使用します。
USE test;
-- ワイドテーブルを作成し、2 つのデータレコードを挿入します。
CREATE TABLE tb (id varchar, name varchar, address varchar, primary key(id, name)) ;
UPSERT INTO tb (id, name, address) values ('001', 'Jack', 'hz');
UPSERT INTO tb (id, name, address) values ('002', 'Edison', 'bj'); OLAP リソースグループに接続されている MySQL コマンドラインインターフェイスで、次のステートメントを実行してワイドテーブルデータにアクセスします。
データソースを明示的に
lindorm_tableに切り替えます。SET CATALOG lindorm_table;現在の Lindorm インスタンス内のすべてのデータベースを表示します。
SHOW DATABASES;testデータベースを使用します。USE test;現在のデータベース内のすべての既存テーブルを表示します。
SHOW TABLES;ワイドテーブルデータをクエリします。
例 1:
SELECT * FROM tb LIMIT 5;出力:
+------+--------+---------+ | id | name | address | +------+--------+---------+ | 001 | Jack | hz | | 002 | Edison | bj | +------+--------+---------+例 2:
SELECT count(*) FROM tb;出力:
+----------+ | count(*) | +----------+ | 2 | +----------+
ワイドテーブルエンジンデータソースは、既存のテーブルからのデータクエリのみをサポートします。その他の操作はサポートされていません。
ワイドテーブルエンジンを介した OLAP リソースグループの使用
OLAP リソースグループは、ワイドテーブルエンジンの拡張クエリエンジンとして機能します。ワイドテーブルエンジンのエンドポイントに接続し、SQL 文に特定のヒントワードを追加することで、複雑なクエリを OLAP リソースグループに転送して実行できます。このプロセスでは、個別の接続は必要ありません。この方法により、ワイドテーブルエンジンの高同時実行クエリ機能と OLAP リソースグループの複雑な分析機能を組み合わせることができ、SQL 文のインテリジェントなルーティングが可能になります。
MySQL または Lindorm-cli を使用して Lindorm ワイドテーブルエンジンに接続している場合、_use_ldps_ ヒントワードを使用して特定の SQL 文を OLAP リソースグループに転送して実行できます。例:
-- データベースを使用
USE db01;
-- クエリをデフォルトの OLAP リソースグループに転送
SELECT /*+ _use_ldps_ */ * FROM tb01 LIMIT 5;
-- クエリを指定された OLAP リソースグループに転送
SELECT /*+ _use_ldps_(olap_cg_name) */ * FROM tb01 LIMIT 5;ヒントワードのフォーマットは /*+ _use_ldps_(olap_cg_name) */ で、最も外側の SELECT キーワードの後に配置する必要があります。(olap_cg_name) パラメーターは、クエリが転送される OLAP リソースグループの名前を指定します。このパラメーターが指定されていない場合、クエリはデフォルトのリソースグループに転送されます。
高度な使用法
クエリを OLAP リソースグループに転送する際に、クエリ実行のためのセッション変数を指定できます。これにより、クエリの動作を詳細にコントロールできます。次の例は、変数を指定する方法を示しています:
-- クエリのセッション変数を指定
SELECT /*+ _use_ldps_ */ /*+ SET_VAR(enable_lindorm_table_concurrent_scan = false) */ * FROM tb01 LIMIT 5;
-- クエリの複数のセッション変数を指定
SELECT /*+ _use_ldps_ */ /*+ SET_VAR(enable_lindorm_table_concurrent_scan = false, enable_build_join_filter_from_lindorm_table_in_opt = true) */ * FROM tb01 LIMIT 5;セッション変数を指定するためのヒントワードのフォーマットは /*+ SET_VAR(enable_lindorm_table_concurrent_scan = false) */ です。変数は key = value フォーマットで指定します。複数の変数はカンマで区切ることができます。サポートされている変数については、次のセクションをご参照ください。このヒントワードは、OLAP リソースグループ転送ヒントワードの後に配置する必要があり、同じコメントブロックを共有することはできません。
セッションヒントワードは、OLAP リソースグループ転送ヒントワードの後の別のコメントブロックに配置する必要があります。
パラメーター
変数 | タイプ | デフォルト値 | 説明 |
enable_build_join_filter_from_lindorm_table_in_opt | BOOL | FALSE | ワイドテーブルエンジンで 2 つのテーブルを結合するときに、右テーブルのクエリ結果に基づいて左テーブルのフィルター条件を生成してプッシュダウンできます。これにより、左テーブルのデータスキャンプロセスが高速化されます。 |
enable_lindorm_table_concurrent_scan | BOOL | TRUE | このパラメーターは、Lindorm ワイドテーブルの読み取りの同時実行性を制御します。TRUE に設定すると、ワイドテーブルは同時にスキャンされます。FALSE に設定すると、ワイドテーブルは単一のスレッドでスキャンされます。 |