StarRocks コネクタは、データをインポートしたり外部テーブルを作成したりすることなく、外部カタログを使用して MaxCompute データソースにシームレスにアクセスし、複雑な SQL クエリを実行します。これにより、データ分析の効率が向上し、運用の難しさとコストが削減されます。このトピックでは、StarRocks コネクタを使用して MaxCompute にアクセスする方法について説明します。
背景情報
StarRocks は、次世代の高速 Massively Parallel Processing (MPP) データベースです。StarRocks は、多次元分析、カスタムレポート作成、リアルタイムデータ分析、アドホックデータ分析など、さまざまなエンタープライズレベルの分析要件を満たします。StarRocks の詳細については、「StarRocks とは」をご参照ください。StarRocks はデータカタログ機能をサポートしています。データカタログ機能を使用すると、同じシステム内で内部データと外部データを管理できます。これにより、さまざまな外部データソースからデータに簡単にアクセスしてクエリを実行できます。詳細については、「カタログの概要」をご参照ください。
前提条件
StarRocks クラスター (V3.2.3 以降) がデプロイされており、StarRocks クラスターは MaxCompute にアクセスできます。StarRocks クラスターのデプロイ方法については、「Docker Compose を使用して shared-nothing StarRocks クラスターをデプロイする」をご参照ください。
「Data Transmission Service (サブスクリプション) の専用リソースグループを購入」していること。
制限事項
標準テーブル、パーティションテーブル、クラスター化テーブル、Delta テーブル、マテリアライズドビューからデータを読み取ることができます。外部テーブルや論理ビューからデータを読み取ることはできません。
JSON データを読み取ることはできません。
スキーマ機能が有効になっていない MaxCompute プロジェクトのみがサポートされます。スキーマ機能の詳細については、「スキーマ関連の操作」をご参照ください。
MaxCompute カタログの作成
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)、またはアンダースコア (_) のみを含めることができ、文字で始まる必要があります。
名前の長さは 1,023 文字を超えることはできません。
カタログ名では大文字と小文字が区別されます。
type
はい
データソースのタイプ。このパラメーターを
odpsに設定します。comment
いいえ
MaxCompute カタログの説明。
CatalogParams
はい
StarRocks が MaxCompute に接続するために使用されるパラメーター。
ScanParams
いいえ
StarRocks が MaxCompute ファイルストレージに接続するために使用されるパラメーター。
CachingMetaParams
いいえ
メタデータキャッシュポリシーを定義するパラメーター。
CatalogParams で設定可能なパラメーター
パラメーター
必須
説明
odps.endpoint
はい
MaxCompute サービスのエンドポイント。このパラメーターは、MaxCompute プロジェクトを作成する際に選択したリージョンとネットワーク接続モードに基づいて設定する必要があります。さまざまなリージョンとネットワーク接続モードに対応するエンドポイントの詳細については、「エンドポイント」をご参照ください。
重要Alibaba Cloud VPC ネットワークのみがサポートされています。
odps.project
はい
MaxCompute プロジェクトの名前。MaxCompute コンソールにログインし、左側のナビゲーションウィンドウで を選択して MaxCompute プロジェクト名を取得します。
説明ワークスペースが標準モードの場合、このパラメーターを設定する際に、開発環境 (_dev) のプロジェクト名と本番環境のプロジェクト名を区別する必要があります。
odps.access.id
はい
Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID。AccessKey 管理ページに移動して AccessKey ID を取得できます。
odps.access.key
はい
AccessKey ID に対応する AccessKey Secret。
odps.tunnel.quota
はい
MaxCompute へのアクセスに使用されるクォータの名前。MaxCompute へのアクセスには、Data Transmission Service (サブスクリプション) の専用リソースグループとオープンストレージ (従量課金) の 2 種類のリソースがサポートされています。クォータ名は 1 つだけ指定できます。
サブスクリプション: MaxCompute コンソールにログインし、左上のリージョンを切り替えてから、左側のナビゲーションウィンドウで [ワークスペース] > [クォータ管理] を選択して、利用可能なクォータのリストを表示します。詳細については、「コンピューティングリソース - クォータ管理」をご参照ください。
従量課金: MaxCompute コンソールにログインし、左上のリージョンを切り替えてから、左側のナビゲーションウィンドウで [テナント管理] > [テナントプロパティ] を選択します。[オープンストレージ (ストレージ API)] スイッチをオンにして、必要な権限を付与します。
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
いいえ
キャッシュされたテーブルメタデータが自動的に削除されるまでの期間。単位: 秒 (s)。デフォルト値: 86400 (24 時間に相当)。値の範囲: 0 以上。
odps.cache.table.size
いいえ
メタデータをキャッシュする必要があるテーブルの数。デフォルト値: 1000。
odps.cache.partition.enable
いいえ
目的のテーブル内のすべてのパーティションのメタデータをキャッシュするかどうかを指定します。有効な値:
true: 目的のテーブル内のすべてのパーティションのメタデータをキャッシュします。これはデフォルト値です。
false: 目的のテーブル内のどのパーティションのメタデータもキャッシュしません。
説明odps.cache.partition.enableパラメーターは、パーティション化されていないテーブルには効果がありません。odps.cache.partition.expire
いいえ
キャッシュされたすべてのパーティションのメタデータが自動的に削除されるまでの期間。単位: 秒 (s)。デフォルト値: 86400 (24 時間に相当)。値の範囲: 0 以上。
odps.cache.partition.size
いいえ
キャッシュできるパーティションテーブルの数。デフォルト値: 1000。
odps.cache.table-name.enable
いいえ
MaxCompute プロジェクト内のすべてのテーブルの名前をキャッシュするかどうかを指定します。有効な値:
true: MaxCompute プロジェクト内のすべてのテーブルの名前をキャッシュします。
false: MaxCompute プロジェクト内のすべてのテーブルの名前をキャッシュしません。これはデフォルト値です。
odps.cache.table-name.expire
いいえ
MaxCompute プロジェクト内のテーブルのキャッシュされた名前が自動的に削除されるまでの期間。単位: 秒 (s)。デフォルト値: 86400 (24 時間に相当)。値の範囲: 0 以上。
例
このセクションでは、odps_catalog という名前の MaxCompute カタログを作成する例を示します。この例では、MaxCompute プロジェクト mf_mc_bj を使用します。
-- カタログを作成します。
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 カタログとプロジェクトに切り替えます。この例では、MaxCompute カタログ
odps_catalogと MaxCompute プロジェクト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 | +-----------------+----------+------------------------------------------------------------------+特定のカタログの作成ステートメントをクエリします。
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" = "odps_project", "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 テーブルのスキーマとその作成ステートメントをクエリします。
構文
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 テーブルの統計情報の自動収集をサポートしていません。次のコマンドを実行して、統計情報を収集するタスクを手動で作成できます。
-- <table_name> を MaxCompute テーブルの名前に置き換えます。
ANALYZE TABLE <table_name>;StarRocks コストベースオプティマイザー (CBO) は、さまざまな種類の統計情報に基づいて SQL クエリの実行コストを推定し、数万の潜在的な実行計画の中から最もコストの低い実行計画を選択します。これにより、複雑なクエリの効率とパフォーマンスが向上します。詳細については、「CBO の統計情報を収集する」をご参照ください。
キャッシュされたメタデータの手動更新
デフォルトでは、StarRocks はクエリのパフォーマンスを向上させるために MaxCompute メタデータをキャッシュします。テーブルスキーマを変更したり、テーブル内のデータを更新したりした場合は、テーブルのメタデータを手動で更新できます。これにより、StarRocks は最新のメタデータキャッシュをできるだけ早く取得できます。
-- <table_name> を 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パラメーターの値を増やす必要もあります。scanner_thread_pool_queue_sizeおよびscanner_thread_pool_thread_numパラメーターを変更して、StarRocks BE スレッドプールのスレッド数を変更します。これらのパラメーターの変更方法の詳細については、「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 データの型をサポートしていません。StarRocks が TIMESTAMP 型のデータを読み取る際、StarRocks はデータのデータ型を DATETIME に変換するため、データの精度が失われます。 |
ARRAY | ARRAY |
MAP | MAP |
STRUCT | STRUCT |