StarRocks コネクタは、外部カタログメカニズムを使用して、データをインポートしたり外部テーブルを作成したりすることなく、MaxCompute データソースにシームレスにアクセスし、複雑な SQL クエリを実行します。これにより、データ分析の効率が向上し、運用保守 (O&M) の複雑さとコストが削減されます。このトピックでは、StarRocks コネクタを使用して MaxCompute にアクセスする方法について説明します。
背景情報
StarRocks は、オンライン分析処理 (OLAP) ベースの多次元分析、カスタムレポートの作成、リアルタイムデータ分析、アドホッククエリなど、複数のエンタープライズレベルの分析ワークロードをサポートする、次世代の高速な超並列処理 (MPP) データベースです。StarRocks の詳細については、「StarRocks の概要」をご参照ください。StarRocks は、単一のシステム内で内部データと外部データの両方を管理し、さまざまな外部ソースに保存されているデータに簡単にアクセスしてクエリを実行できる Catalog (データカタログ) 機能をサポートしています。詳細については、「Catalog の概要」をご参照ください。
前提条件
-
バージョン 3.2.3 以降の StarRocks クラスターをデプロイし、クラスターが MaxCompute サービスに正しくアクセスできることを確認済みであること。StarRocks クラスターのデプロイ方法の詳細については、「 Docker Compose を使用した StarRocks 共有なしクラスターのデプロイ」をご参照ください。
-
専用の Data Transmission Service リソースグループ (サブスクリプション) を購入するか、オープンストレージ (従量課金) リソースをアクティブ化済みであること。
制限事項
-
標準テーブル、パーティションテーブル、クラスタ化テーブル、Delta テーブル、マテリアライズドビューの読み取りをサポートしています。外部テーブルや論理ビューの読み取りはサポートしていません。
-
JSON データ型に対するネイティブなクエリはサポートされていません。データは VARCHAR 型として読み込まれます。
-
スキーマが無効になっている MaxCompute プロジェクトのみをサポートしています。スキーマの詳細については、「スキーマ操作」をご参照ください。
MaxCompute カタログの作成
StarRocks にログインし、StarRocks で MaxCompute カタログを作成します。外部カタログの詳細については、「Create External Catalog」をご参照ください。
構文
CREATE EXTERNAL CATALOG <catalog_name>
[COMMENT <comment>]
PROPERTIES
(
"type" = "odps",
CatalogParams,
ScanParams,
CachingMetaParams
)
パラメータの説明
-
共通パラメータ
パラメータ
必須
説明
catalog_name
はい
MaxCompute カタログの名前。次の命名規則に従ってください:
-
英字 (a~z または A~Z)、数字 (0~9)、またはアンダースコア (_) で構成し、先頭は英字である必要があります。
-
最大長は 1023 文字です。
-
カタログ名では大文字と小文字が区別されます。
type
はい
データソースのタイプ。このパラメータを
odpsに設定します。comment
いいえ
MaxCompute カタログの説明。
CatalogParams
はい
StarRocks が MaxCompute にアクセスするためのパラメータ。
ScanParams
いいえ
StarRocks が MaxCompute のファイルストレージにアクセスするためのパラメータ。
CachingMetaParams
いいえ
メタデータキャッシュポリシーを定義するパラメータ。
-
-
CatalogParams パラメータ
パラメータ
必須
説明
odps.endpoint
はい
MaxCompute サービスへの接続アドレス。MaxCompute プロジェクトの作成時に選択したリージョンとネットワーク接続方法に基づいてエンドポイントを設定します。リージョンとネットワークタイプ別のエンドポイントについては、「エンドポイント」をご参照ください。
重要現在、Alibaba Cloud VPC ネットワークのみがサポートされています。
odps.project
はい
MaxCompute プロジェクトの名前。MaxCompute コンソールにログインし、 ページに移動してプロジェクト名を取得します。
説明標準モードでワークスペースを作成した場合、このパラメータを設定する際に、本番環境と開発環境 (_dev) のプロジェクト名を区別してください。
odps.access.id
はい
Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID。AccessKey 管理ページに移動して AccessKey ID を取得します。
odps.access.key
はい
AccessKey ID に対応する AccessKey シークレット。
odps.tunnel.quota
はい
MaxCompute Tunnel の課金モード。Data Transmission Service を利用してデータを読み込む際に使用されます。有効な値:
pay-as-you-go:オープンストレージ (従量課金) リソースを使用します。subscription:購入済みの専用 Data Transmission Service リソースグループを使用します。
-
ScanParams パラメータ
パラメータ
必須
説明
odps.split.policy
いいえ
データスキャン時に使用するシャーディング戦略。有効な値:
-
size(デフォルト):データサイズに基づいて分割します。デフォルト値:256 MB。 -
row_offset:行数に基づいて分割します。
説明シャーディング戦略は、コンピューティングエンジンのデータスキャン並列処理に大きく影響します。デフォルトの戦略がニーズを満たさない場合は、
row_offset戦略を選択し、odps.split.row.countパラメータを使用して調整してください。odps.split.row.count
いいえ
シャードあたりの最大行数。デフォルト値:4194304。値の範囲:0 より大きい。
説明このパラメータは、
odps.split.policyがrow_offsetに設定されている場合にのみ設定してください。 -
-
CachingMetaParams パラメータ
パラメータ
必須
説明
odps.cache.table.enable
いいえ
テーブルのメタデータをキャッシュするかどうか。有効な値:
-
true(デフォルト):テーブルメタデータのキャッシュを有効にします。これにより、メタデータの取得と更新の速度が向上し、頻繁な DDL 操作、大規模なマルチユーザー環境、または複雑なクエリ最適化を伴うシナリオに適しています。 -
false:テーブルメタデータのキャッシュを無効にします。キャッシュリソースには限りがあり、キャッシュに過度に依存するとメモリを消費しすぎる可能性があるため、頻度の低いクエリやメタデータが頻繁に変更されるテーブルではキャッシュを無効にしてください。
odps.cache.table.expire
いいえ
キャッシュされたテーブルメタデータが自動的に削除されるまでの時間間隔 (秒)。デフォルト値:86400 (24 時間)。値の範囲:0 以上。
odps.cache.table.size
いいえ
キャッシュするテーブルメタデータエントリの数。デフォルト値:1000。
odps.cache.partition.enable
いいえ
ターゲットテーブルのすべてのパーティションのメタデータをキャッシュするかどうか。有効な値:
-
true(デフォルト):ターゲットテーブルのすべてのパーティションのメタデータのキャッシュを有効にします。 -
false:キャッシュを無効にします。すべてのパーティションのメタデータはキャッシュされません。
説明テーブルがパーティション化されていない場合、
odps.cache.partition.enableパラメータは効果がありません。odps.cache.partition.expire
いいえ
キャッシュされたパーティションメタデータが自動的に削除されるまでの時間間隔 (秒)。デフォルト値:86400 (24 時間)。値の範囲:0 以上。
odps.cache.partition.size
いいえ
メタデータをキャッシュできるパーティションテーブルの数。デフォルト値:1000。
odps.cache.table-name.enable
いいえ
MaxCompute プロジェクト内のすべてのテーブル名をキャッシュするかどうか。有効な値:
-
true:MaxCompute プロジェクト内のすべてのテーブル名のキャッシュを有効にします。 -
false(デフォルト):MaxCompute プロジェクト内のすべてのテーブル名のキャッシュを無効にします。
odps.cache.table-name.expire
いいえ
MaxCompute プロジェクト内のキャッシュされたテーブル名情報が自動的に削除されるまでの時間間隔 (秒)。デフォルト値:86400 (24 時間)。値の範囲:0 以上。
-
例
次の例では、MaxCompute プロジェクト mf_mc_bj を使用して、odps_catalog という名前の MaxCompute カタログを作成します。
-- カタログを作成
CREATE EXTERNAL CATALOG odps_catalog PROPERTIES(
"type"="odps",
"odps.access.id"="<yourAccessKeyId>",
"odps.access.key"="<yourAccessKeySecret>",
"odps.endpoint"="http://service.cn-beijing.maxcompute.aliyun.com/api",
"odps.tunnel.quota"="pay-as-you-go",
"odps.project"="mf_mc_bj"
);
MaxCompute へのアクセス
-
ターゲットのカタログと MaxCompute プロジェクトに切り替えます。この例では
odps_catalogとmf_mc_bjを使用します。-
構文
-
方法 1
-- カタログを指定 SET CATALOG <catalog_name>; -- MaxCompute プロジェクトを指定 USE <project_name>; -
方法 2
USE <catalog_name>.<project_name>;
-
-
例
SET CATALOG odps_catalog; USE mf_mc_bj;
-
-
データをクエリします。この例では
srcテーブルを使用します。
SELECT * FROM src LIMIT 10;
結果は次のようになります。
+------+-------+
| key | value |
+------+-------+
| 1 | 1 |
| 3 | 3 |
| 2 | 2 |
| 4 | 100 |
| 5 | 200 |
| 6 | 300 |
| 3 | 400 |
+------+-------+
その他の操作
MaxCompute カタログの表示
-
現在の StarRocks クラスター内のすべてのカタログを一覧表示します。
SHOW CATALOGS;結果は次のようになります。
+-----------------+----------+------------------------------------------------------------------+ | Catalog | Type | Comment | +-----------------+----------+------------------------------------------------------------------+ | default_catalog | Internal | An internal catalog contains this cluster‘s self-managed tables. | | odps_catalog | Odps | NULL | +-----------------+----------+------------------------------------------------------------------+ -
特定のカタログの CREATE 文を表示します。
SHOW CREATE CATALOG odps_catalog;結果は次のようになります。
+--------------+--------------------------------------------------------------------------+ | Catalog | Create Catalog | +--------------+--------------------------------------------------------------------------+ | odps_catalog | CREATE EXTERNAL CATALOG `odps_catalog` PROPERTIES ("odps.endpoint" = "http://service.cn-beijing.maxcompute.aliyun.com/api", "odps.access.id" = "<yourAccessKeyId>", "odps.access.key" = "<yourAccessKeySecret>", "odps.project" = "mf_mc_bj", "type" = "odps" )| +-----------------------------------------------------------------------------------------+
MaxCompute テーブルスキーマの表示
-
MaxCompute テーブルスキーマを記述します。
-
構文
DESC[RIBE] <catalog_name>.<database_name>.<table_name>; -
パラメータの説明
-
catalog_name:必須。カタログの名前。
-
database_name:必須。ターゲットカタログの MaxCompute プロジェクトの名前。
-
table_name:必須。ターゲット MaxCompute プロジェクトのテーブルの名前。
-
-
例
DESC odps_catalog.mf_mc_bj.src;結果は次のようになります。
+-------+------+------+-------+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+------+------+-------+---------+-------+ | id | INT | Yes | false | NULL | | | a | INT | Yes | false | NULL | | +-------+------+------+-------+---------+-------+
-
-
MaxCompute テーブルスキーマとその CREATE TABLE 文を表示します。
-
構文
SHOW CREATE TABLE <catalog_name>.<database_name>.<table_name>; -
パラメータの説明
-
catalog_name:必須。カタログの名前。
-
database_name:必須。ターゲットカタログの MaxCompute プロジェクトの名前。
-
table_name:必須。ターゲット MaxCompute プロジェクトのテーブルの名前。
-
-
例
SHOW CREATE TABLE odps_catalog.mf_mc_bj.src;結果は次のようになります。
+-------+--------------------------------------------------------------------------------+ | Table | Create Table | +-------+--------------------------------------------------------------------------------+ | src | CREATE TABLE `src` ( `id` int(11) DEFAULT NULL, `a` int(11) DEFAULT NULL ) | +-------+--------------------------------------------------------------------------------+
-
MaxCompute カタログの削除
次のコマンドを実行して、MaxCompute カタログを削除します。
DROP CATALOG odps_catalog;
コストベースオプティマイザ (CBO) の統計情報収集
現在のバージョンの StarRocks は、MaxCompute テーブル統計の自動収集をサポートしていません。次のコマンドを実行して、統計情報収集タスクを手動で作成します。
-- を MaxCompute テーブル名に置き換えます
ANALYZE TABLE <table_name>;
StarRocks の CBO は、さまざまな統計に基づいてコストを見積もり、数万の実行計画の中から最もコストの低い実行計画を選択することで、複雑なクエリの効率とパフォーマンスを向上させることができます。詳細については、「CBO のための統計情報収集」をご参照ください。
メタデータキャッシュの手動更新
デフォルトでは、StarRocks はクエリのパフォーマンスを向上させるために MaxCompute のメタデータをキャッシュします。テーブルスキーマの変更やテーブルデータの更新後、テーブルのメタデータを手動で更新し、StarRocks が最新のメタデータをすぐに取得できるようにしてください。
-- を MaxCompute テーブル名に置き換えます
REFRESH EXTERNAL TABLE <table_name>;
よくある質問
データ読み取り時のエラー:「Your slot quota is exceeded.」
-
問題分析
このエラーは、データ読み取り量が Data Transmission Service のクォータを超えた場合に発生します。読み取り中、StarRocks はテーブルを複数のシャードに分割し、それらを BE ノードに分散します。BE ノードはスレッドプールを使用してデータを並行して読み取ります。読み取り中に占有されるスロット数は、通常次のようになります:
Max(シャード数、BE 数 × BE スレッドプールの同時実行数)。 -
解決策
-
より同時実行性の高い専用の Data Transmission Service リソースグループを購入します。手順については、「専用の Data Transmission Service リソースグループの購入と使用」をご参照ください。
-
ScanParamsパラメータを設定してシャード数を調整します。row_offsetシャーディング戦略を使用する場合は、odps.split.row.countパラメータも増やしてください。 -
StarRocks BE のスレッドプールパラメータ
scanner_thread_pool_queue_sizeとscanner_thread_pool_thread_numを変更します。詳細については、「StarRocks の概要」をご参照ください。
-
付録:型マッピング
|
MaxCompute のフィールド型 |
StarRocks のフィールド型 |
|
BOOLEAN |
BOOLEAN |
|
TINYINT |
TINYINT |
|
SMALLINT |
SMALLINT |
|
INT |
INT |
|
BIGINT |
BIGINT |
|
FLOAT |
FLOAT |
|
DOUBLE |
DOUBLE |
|
DECIMAL(p, s) |
DECIMAL(p, s) |
|
STRING |
VARCHAR(1073741824) |
|
VARCHAR(n) |
VARCHAR(n) |
|
CHAR(n) |
CHAR(n) |
|
JSON |
VARCHAR(1073741824) |
|
BINARY |
VARBINARY |
|
DATE |
DATE |
|
DATETIME |
DATETIME |
|
TIMESTAMP |
DATETIME 重要
StarRocks には TIMESTAMP 型がありません。TIMESTAMP データを読み取る際、DATETIME として扱われるため、精度の損失が発生します。 |
|
ARRAY |
ARRAY |
|
MAP |
MAP |
|
STRUCT |
STRUCT |