PrestoDB は、超並列処理 (MPP) アーキテクチャに基づくビッグデータ向けのオープンソースの分散 SQL クエリエンジンです。PrestoDB は、MySQL、Elasticsearch、Tablestore など、さまざまなデータソースに接続できます。PrestoDB を Tablestore に接続すると、PrestoDB で SQL ステートメントを実行して、Tablestore 内のデータのクエリと分析、Tablestore へのデータの書き込み、Tablestore へのデータのインポートを行うことができます。
背景情報
PrestoDB は、超並列処理 (MPP) アーキテクチャに基づくビッグデータ向けのオープンソースの分散 SQL クエリエンジンです。PrestoDB は、MySQL、Elasticsearch、Tablestore など、さまざまなデータソースに接続できます。PrestoDB は、クエリツール、抽出、変換、ロード (ETL) ツール、ストレステストツール、または統合クエリエンジンとして使用して、さまざまなシナリオでのデータ処理の要件を満たすことができます。
日々の開発とトラブルシューティングのためのクエリツールとして、PrestoDB を使用すると、SQL ステートメントを実行してテーブル内のデータのクエリと分析を行うことができます。
ETL ツールとして、PrestoDB を使用すると、テーブルまたはインスタンス間でデータを複製したり、異なるデータソースからデータをコピーしたりできます。
ストレステストツールとして、PrestoDB を使用すると、複数のデータレコードを同時にスキャンまたは書き込むことができます。
データミッドエンドの統合クエリエンジンとして、PrestoDB はさまざまな異なるデータソースに接続できます。
PrestoDB を使用して Tablestore にアクセスする前に、PrestoDB を Tablestore に接続する必要があります。PrestoDB が Tablestore に接続されると、PrestoDB で SQL ステートメントを実行して、Tablestore 内のデータのクエリと分析、Tablestore へのデータの書き込み、Tablestore へのデータのインポートを行うことができます。
前提条件
Linux または macOS オペレーティングシステムを実行するサーバーが利用可能です。この例では、Linux オペレーティングシステムを実行するサーバーを使用します。
説明Linux オペレーティングシステムを実行するサーバーがない場合は、Linux オペレーティングシステムを実行する Elastic Compute Service (ECS) インスタンスを使用することをお勧めします。詳細については、ECS コンソール (エクスプレスバージョン) を使用して ECS インスタンスを作成および管理する を参照してください。
64 ビット Java 8 と Python 3 がサーバーにインストールされています。
PrestoDB がサーバーにインストールされています。
PrestoDB バージョンに基づく prestodb-tablestore-connector ファイルがダウンロードされ、PrestoDB インストールディレクトリの下の
pluginディレクトリにアップロードされます。ファイルはインストールディレクトリに解凍されます。次の表は、prestodb-tablestore-connector プラグインのバージョンと PrestoDB バージョンのマッピングを示しています。
プラグインバージョン
PrestoDB バージョン
説明
0.280
プラグインバージョンは最初のリリースです。このプラグインは、PrestoDB 0.280 以降でサポートされています。
PrestoDB を Tablestore に接続するために必要な Tablestore 情報 (Tablestore にアクセスするために使用されるアカウント、インスタンス情報、テーブル情報など) が取得されます。
Tablestore を管理するための権限が付与された RAM ユーザーの AccessKey ペアが取得されます。詳細については、AccessKey ペアの取得 を参照してください。
説明RAM ユーザーに Tablestore を管理するための権限が付与されていない場合は、後続の操作を実行する前に、必要な権限を RAM ユーザーに付与する必要があります。詳細については、RAM ポリシーを使用して RAM ユーザーに権限を付与する を参照してください。
使用上の注意
PrestoDB を使用して、ワイドカラムモデル の Tablestore データにのみアクセスできます。
デフォルトでは、PrestoDB は UpdateRow 操作を呼び出すことによって Tablestore にデータを書き込みます。PrestoDB は PutRow 操作を呼び出すことによって Tablestore にデータを書き込むことはできません。PrestoDB を使用して Tablestore テーブルにデータを書き込む場合は、テーブルの 更新を許可 パラメータが はい に設定されていることを確認してください。そうでない場合、PrestoDB はテーブルにデータを書き込むことができません。
重要Tablestore テーブルの Time to Live パラメータを -1 以外の値に設定し、テーブルの検索インデックスを作成する場合は、テーブルの 更新を許可 パラメータを いいえ に設定する必要があります。PrestoDB はテーブルにデータを書き込むことができません。
PutRow 操作を呼び出すことによって PrestoDB を使用して Tablestore にデータを書き込む場合は、DingTalk グループ 36165029092 に参加して、Alibaba Cloud テクニカルサポートにお問い合わせください。
テーブルを更新できるかどうかを確認するには、Tablestore コンソールのテーブルの 基本情報 タブにある 更新を許可 パラメータの値を確認するか、Tablestore SDK を使用して DescribeTable 操作を呼び出します。

データ型のマッピング
Tablestore と PrestoDB は異なるデータ型をサポートしています。次の表は、Tablestore と PrestoDB でサポートされているデータ型間のマッピングを示しています。
Tablestore でサポートされているデータ型 | PrestoDB でサポートされているデータ型 |
string | varchar |
integer | bigint |
double | double |
boolean | boolean |
binary | varbinary |
手順
PrestoDB を使用して Tablestore にアクセスするには、次の手順を実行します。PrestoDB を Tablestore に接続し、PrestoDB の SQL CLI を実行し、スキーマとマッピングテーブルを作成してから、SQL ステートメントを実行してデータに対する操作を実行します。
手順 1: PrestoDB を Tablestore に接続する
PrestoDB をインストールした後、PrestoDB を Tablestore に接続するために、PrestoDB のカタログとスキーマを設定する必要があります。カタログ設定ファイルは、etc/catalog/tablestore.properties パスに保存されます。
設定の説明
手順 2: Presto の SQL CLI を実行する
Tablestore が PrestoDB に接続されたら、Presto サーバーを起動し、SQL ステートメントを実行できます。
PrestoDB クライアントをインストールするために実行できるプログラムを取得します。
PrestoDB クライアントのインストールパッケージをダウンロードします。
この例では、presto-cli-0.280-executable.jar パッケージがダウンロードされます。
PrestoDB クライアントのインストールパッケージを、PrestoDB がインストールされているディレクトリの下の
binディレクトリに保存します。binディレクトリで次のコマンドを実行して、PrestoDB クライアントをインストールするために実行できるプログラムを取得します。# PrestoDB クライアントのインストールパッケージの名前を presto に変更します。presto-cli-0.280-executable.jar を PrestoDB クライアントの実際のバージョン名に置き換えます。 mv presto-cli-0.280-executable.jar presto # ユーザーに presto ファイルに対する操作を実行するための権限を付与します。 chmod +x presto次の図は、PrestoDB クライアントをインストールするために実行できるプログラムが配置されているディレクトリを示しています。

binディレクトリで次のコマンドを実行して、Presto サーバーを起動します。重要Presto サーバーを起動する場合は、コーディネーターと少なくとも 1 つのワーカーを個別に起動する必要があります。
# Presto サーバーはフォアグラウンドまたはバックグラウンドで実行できます。Presto サーバーをフォアグラウンドで実行すると、操作ログをより簡単に表示できます。 # 方法 1: Presto サーバーをバックグラウンドで実行する ./launcher start # 方法 2: Presto サーバーをフォアグラウンドで実行する ./launcher runbinディレクトリで次のコマンドを実行して、SQL CLI を起動します。説明デフォルトでは、PrestoDB はポート 8080 で実行されます。ポート設定を変更する場合は、
etc/config.propertiesファイルのhttp-server.http.portパラメータの値を変更します。特定の設定を変更した後、新しい設定を有効にするには、Presto サーバーを再起動する必要があります。
コマンドの
./prestoは、binディレクトリにある PrestoDB クライアントをインストールするために実行できるプログラムの相対パスを示しています。
./presto --server localhost:8080 --catalog tablestore --schema default次の表は、コマンドのパラメータを示しています。
パラメータ
例
必須
説明
--server
localhost:8080
はい
Presto サーバーの URI。値を Presto サーバーの実際の URI に置き換えます。パラメータの値は、PrestoDB がインストールされているディレクトリの
etc/config.propertiesファイルのdiscovery.uriパラメータの値と同じでなければなりません。--catalog
tablestore
はい
カタログ設定ファイルの名前。この例では、パラメータは tablestore に設定されています。
--schema
default
はい
スキーマ設定。デフォルト設定を保持します。
手順 3: スキーマとマッピングテーブルを作成する
メタデータテーブルに基づく動的設定モードでスキーマを設定する場合は、スキーマを手動で作成および使用して、PrstoDB が接続されている Tablestore インスタンスを設定し、ユーザー権限を認証する必要があります。次に、Tablestore テーブルのマッピングテーブルを作成して、データのクエリと分析を行うことができます。
ローカル静的ファイルに基づく設定モードでスキーマを設定する場合は、この手順をスキップします。
次のステートメントを実行して、スキーマを作成します。
次の SQL ステートメントの例は、myinstance という名前の Tablestore インスタンスにアクセスするために使用される testdb という名前のスキーマを作成する方法の例を示しています。
CREATE SCHEMA tablestore.testdb WITH ( endpoint = 'https://myinstance.cn-hangzhou.ots.aliyuncs.com', instance_name = 'myinstance', access_id = '************************', access_key = '********************************' );次の表は、パラメータを示しています。
パラメータ
例
必須
説明
endpoint
https://myinstance.cn-hangzhou.ots.aliyuncs.com
はい
Tablestore インスタンスのエンドポイント。詳細については、エンドポイント を参照してください。
instance_name
myinstance
はい
接続されている Tablestore インスタンスの名前。詳細については、インスタンス
を参照してください。
access_id
************************
はい
Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID。
access_key
********************************
はい
Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey シークレット。
use <SCHEMA_NAME>;ステートメントを実行して、作成したスキーマを使用します。<SCHEMA_NAME>を作成したスキーマの名前に置き換えます。show schemas;ステートメントを実行して、スキーマのリストを表示できます。次のステートメントを実行して、Tablestore テーブルのマッピングテーブルを作成します。
重要マッピングテーブルを作成する場合は、次の点に注意してください。
マッピングテーブルのカラムのデータ型が Tablestore テーブルのデータ型にマッピングされていることを確認してください。詳細については、「PrtestoDB を使用して Tablestore にアクセスする」トピックの データ型のマッピング セクションを参照してください。
マッピングテーブルの名前は、Tablestore テーブルの実際の名前と同じでなければなりません。
CREATE TABLE ステートメントの table_name パラメータで指定されたテーブルは、Tablestore の実際のテーブルにマッピングされます。同じ Tablestore テーブルに対して複数のマッピングテーブルを作成できます。
マッピングテーブルには、Tablestore テーブルのすべてのプライマリキーカラムが含まれている必要がありますが、特定の属性カラムのみが含まれている必要があります。
マッピングテーブルのプライマリキーカラムの名前と順序は、Tablestore テーブルの名前と順序と同じでなければなりません。origin_name パラメータを指定することで、マッピングテーブルの各属性カラムを Tablestore テーブルのカラム名にマッピングできます。
この例では、gid と uid という名前の 2 つのプライマリキーカラムと col1、col2、col3 という名前の 3 つの属性カラムを含む main_table Tablestore テーブルを使用します。
次の SQL ステートメントの例は、main_table Tablestore テーブルと同じ名前のマッピングテーブルを作成する方法の例を示しています。
CREATE TABLE if not exists main_table ( gid bigint, uid bigint, c1 boolean with (origin_name = 'col1'), c2 bigint with (origin_name = 'col2'), c3 varchar with (origin_name = 'col3') ) WITH ( table_name = 'main_table' );
手順 4: SQL ステートメントを実行してデータに対する操作を実行する
SQL ステートメントを実行してデータに対する操作を実行する前に、use <SCHEMA_NAME>; ステートメントを実行して必要なスキーマを使用していることを確認してください。
SQL ステートメントを実行して、スキーマ設定とマッピングテーブルのメタデータをクエリし、Tablestore テーブルからデータを読み取り、Tablestore テーブルにデータを書き込みます。SQL ステートメントの例については、「Presto サーバーを設定し、サンプル SQL ステートメントを実行する」トピックの「一般的な SQL ステートメントの例」セクションを参照してください Presto サーバーを設定し、サンプル SQL ステートメントを実行する。
スキーマ設定をクエリします。
スキーマのリストをクエリする
show schemas;特定のスキーマのテーブルのリストをクエリする
show tables;
特定のテーブルのメタデータをクエリする
<TABLE_NAME>をテーブルの実際の名前に置き換えます。describe <TABLE_NAME>;データに対する操作を実行します。
Tablestore データを読み書きします。
データを書き込む
データの行を挿入する
次の SQL ステートメントの例は、main_table テーブルにデータの行を挿入する方法の例を示しています。
insert into main_table values(10001,10001,true,100,'hangzhou');複数のデータレコードを同時にインポートする
重要複数のデータレコードを同時にインポートする前に、宛先テーブルが作成され、宛先テーブルのスキーマがソーステーブルのスキーマと同じであることを確認してください。
次の SQL ステートメントの例は、gid カラムの値が 0 より大きく、uid カラムの値が 10000 未満の行の gid、uid、c1、c2、c3 カラムを main_table テーブルから sampletable テーブルにインポートする方法の例を示しています。
insert into sampletableselect gid, uid, c1, c2, c3 from main_table where gid > 0 and uid < 100000;
データを読み取る
次の SQL ステートメントの例は、sampletable テーブルで gid カラムの値が 0 より大きく、uid カラムの値が 10 未満で、c1 カラムの値が true である行をクエリする方法の例を示しています。
select * from sampletable where gid > 0 and uid < 10 and c1 = true;
課金
PrestoDB を使用して Tablestore にアクセスする場合、読み取りスループットと書き込みスループットに基づいて Tablestore によって課金されます。詳細については、課金概要 を参照してください。
関連情報
MaxCompute、Spark、Function Compute、Realtime Compute for Apache Flink などの他の計算エンジンを使用して、Tablestore テーブルのデータのクエリと分析を行うことができます。詳細については、概要 を参照してください。また、検索インデックスでサポートされている SQL クエリ機能または集計機能を使用して、Tablestore テーブルのデータのクエリと分析を行うこともできます。詳細については、SQL クエリの概要 と 検索インデックスの概要 を参照してください。
DataWorks のデータ統合機能を使用して、テーブルまたはインスタンス間で Tablestore データを移行できます。詳細については、Tablestore 内の 1 つのテーブルから別のテーブルにデータを同期する を参照してください。
DataV または Grafana を使用して、チャートにデータを表示するなど、データを視覚化できます。詳細については、データの視覚化 を参照してください。
