このトピックでは、論理テーブルをクエリする方法について説明します。
背景情報
-
データベースとテーブルシャーディングを実装した後、複数の物理テーブルに分散されたデータをクエリする簡単な方法が必要です。論理テーブルは統合されたビューを提供し、シャーディングされたデータを単一のテーブルであるかのようにクエリできるようにします。これにより、各クエリに対して正しいデータベースとテーブルを手動で特定する複雑さが抽象化されます。
-
データ管理 (DMS)は、
論理データベースおよび論理テーブルからデータを集約することで、これらの透過的なクエリを可能にします。
操作手順
-
データをクエリおよびエクスポートする
論理データベースを選択します。ルーティングアルゴリズムを構成する前は、SELECT、UPDATE、およびDELETEステートメントのみを実行できます。INSERTステートメントはサポートされていません。この段階で
INSERTステートメントを実行すると、システムは次のエラーを返します:[Error] dsql.DSQLException: No shard route found, execution failed. Make sure a routing algorithm is configured for the logical table. -
ルーティングアルゴリズムを構成します。この例では、単純なモジュロを使用します。複雑なアルゴリズムの構成の詳細については、「ルーティングアルゴリズムの構成」をご参照ください。
[New algorithm] ダイアログボックスで、[Algorithm type] を [Single-column modulo]、[Modulo type] を [Simple modulo]、[Routing field] を [user_id (bigint)] に設定します。[Modulo] を
128に設定し、[Save] をクリックします。 -
INSERTステートメントを実行します。たとえば、
INSERT INTO scend_test(gmt_create,gmt_modified,user_id) VALUES (now(),now(),2);を実行して、scend_testテーブルにレコードを挿入します。実行が成功すると、結果エリアに緑色のチェックマークが表示されます。 -
クイッククエリを実行します。
-
ルーティングアルゴリズムを構成した後、クエリ条件でルーティングフィールドを使用して、特定の物理シャードテーブルをクエリできます。これにより、物理データベースとテーブルを手動で計算して切り替える必要がなくなります。DMS SQL コンソールで、ルーティングフィールド
user_idをクエリ条件として使用する SQL ステートメントSELECT * FROMを実行します。実行ログには、DMS が論理テーブルscend_testWHEREuser_id= 4scend_testを物理シャードテーブルpoc_dev.scend_test_000にルーティングしたことが記録されています。 -
クエリ結果には、ソースデータベースとテーブルを示す追加の列が含まれます。この列の値をクリックすると、SQL ステートメントとクエリ条件があらかじめ入力された状態で、対応する物理シャードテーブルに移動できます。たとえば、
SELECT * FROMを実行すると、結果のデータロケーション列にscend_testWHEREuser_id= 2poc_dev.scend_test_000が表示されます。これは、DMS がデータを対応する物理シャードテーブルにルーティングし、一致するレコードを 1 件返したことを示しています。 -
ルーティングフィールドを条件として含めずにクエリを実行することもできます。これにより、すべての物理シャードテーブルにわたるフルテーブルスキャンが実行されます。これは、概要統計などの操作に役立ちます。
説明GROUP BYなどの構文もサポートされています。ほとんどの SQL 構文はソースデータベースと一致していますが、サブクエリは現在サポートされていません。たとえば、SQL コンソールで
SELECT COUNT(*) FROMを実行すると、結果は 1 となり、テーブルに 1 件のレコードが含まれていることを示します。scend_test;
-