PrestoDB を Tablestore に接続するには、Presto Server のカタログおよびスキーマを構成します。接続後は、本トピックの SQL 使用例を用いてデータ操作を行います。
サーバー構成
Presto Server のカタログおよびスキーマを構成します。
カタログ構成では、コネクタ設定とスキーマ構成モードを定義します。スキーマは、メタテーブルによる動的構成またはローカルファイルによる静的構成のいずれかで設定します。
動的構成(メタテーブルモード)の場合、Presto Server 起動前にスキーマ構成は不要です。SQL コマンドラインインターフェイス (CLI) を起動した後に、スキーマおよびマッピングテーブルを作成します。
カタログ構成
カタログ構成ファイルは、PrestoDB インストールフォルダ内の etc/catalog/tablestore.properties にあります。
connector.name=tablestore
tablestore.schema-mode=meta-table
#tablestore.schema-mode=file
tablestore.schema-file=/users/test/tablestore/presto/tablestore.schema
tablestore.meta-instance=metastoreinstance
tablestore.endpoint=http://metastoreinstance.cn-hangzhou,ots.aliyuncs.com/
tablestore.accessid=****************
tablestore.accesskey=**************************
tablestore.meta-table=meta_table
tablestore.auto-create-meta-table=true
|
構成項目 |
例 |
必須 |
説明 |
|
connector.name |
tablestore |
はい |
コネクタの名前です。 |
|
tablestore.schema-mode |
meta-table |
はい |
スキーマ構成モードです。有効な値は以下のとおりです。
|
|
tablestore.schema-file |
/users/test/tablestore/presto/tablestore.schema |
はい、条件付きの |
ローカル静的ファイルの完全なパスです。詳細については、「スキーマ構成」をご参照ください。 |
|
tablestore.meta-instance |
metastoreinstance |
はい、条件付きの |
メタデータを格納する Tablestore インスタンスです。詳細については、「インスタンス」をご参照ください。 重要
設定されたインスタンスがご利用の Alibaba Cloud アカウントに存在することを確認してください。 |
|
tablestore.endpoint |
http://metastoreinstance.cn-hangzhou,ots.aliyuncs.com/ |
はい、条件付きの |
メタデータを格納する Tablestore インスタンスのエンドポイントです。詳細については、「エンドポイント」をご参照ください。 |
|
tablestore.accessid |
|
はい、条件付きの |
メタデータインスタンスへのアクセス権限を持つ Alibaba Cloud アカウントまたは Resource Access Management (RAM) ユーザーの AccessKey ID および AccessKey Secret です。 |
|
tablestore.accesskey |
|
条件付き必須 |
|
|
tablestore.meta-table |
meta_table |
はい、条件付きの |
メタデータを格納する Tablestore テーブルの名前です。 |
|
tablestore.auto-create-meta-table |
true |
いいえ |
メタデータテーブルを自動作成するかどうかを指定します。デフォルトは |
スキーマ構成
スキーマは、メタテーブルによる動的構成(推奨)またはローカルファイルによる静的構成のいずれかで設定します。
メタテーブルによる動的構成
Presto Server 起動前にスキーマ構成は不要です。
接続および SQL CLI 起動後、
create schemaコマンドおよびcreate tableコマンドを使用して、スキーマおよびマッピングテーブルを作成します。詳細については、「スキーマの作成」および「マッピングテーブルの作成」をご参照ください。
ローカル静的ファイルによる構成
ローカル静的ファイルのパスは、カタログ構成で指定された tablestore.schema-file の完全なパスと一致する必要があります。
サーバー上に以下の内容のファイルを作成します。
{
"account" : {
"accessId" : "xxxxxxxx", ----- <Required> Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID。
"accessKey" : "xxxxxxxxxxxxxxx", ----- <Required> Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey Secret。
},
"instances" : {
"mydb" : { ----- <Required> PrestoDB 内のスキーマ名。
"instanceName" : "myinstance", ----- <Required> Tablestore インスタンスの名前。
"endpoint" : "http://myinstance.cn-hangzhou.ots.aliyuncs.com", ----- <Required> Tablestore インスタンスのエンドポイント。
"tables": {
"mytable" : { ----- <Required> PrestoDB 内のテーブル名。
"originName" : "SampleTable", ----- <Optional> Tablestore 内の対応するテーブル名(大文字・小文字を区別)。設定しない場合は、Presto 内のテーブル名と同じになります。
"columns" : [ ----- <Required> テーブルのメタデータ。すべてのプライマリキー列を含める必要があり、プライマリキー列の順序はテーブルのプライマリキー順序と同じである必要があります。
{"name" : "gid", "type" : "bigint"},
{"name" : "uid", "type" : "bigint"},
{"name" : "c1", "type" : "boolean", "originName" : "col1"},
{"name" : "c2", "type" : "bigint", "originName" : "col2"},
{"name" : "C3", "type" : "varchar", "originName" : "col3"}
]
},
"anotherTable" : {
"originName" : "sampleTable2",
"columns" : [
{"name" : "gid", "type" : "bigint"},
{"name" : "uid", "type" : "bigint"},
{"name" : "a", "type" : "varchar"},
{"name" : "b", "type" : "varchar"},
{"name" : "c", "type" : "boolean"},
{"name" : "d", "type" : "bigint"},
{"name" : "e", "type" : "varchar"}
]
}
}
}
}
}
|
構成項目 |
必須 |
説明 |
|
|
account |
accessId |
はい |
Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID および AccessKey Secret です。 |
|
accessKey |
はい |
||
|
instances(map(<schema_name> -> <schema_info>)) |
はい |
スキーマ名からスキーマ情報へのマッピングを行う JSON マップです。 重要
PrestoDB ではスキーマ名の大文字・小文字は区別されません。 |
|
|
<schema_info> |
instanceName |
はい |
このスキーマに対応する Tablestore インスタンス名です。詳細については、「インスタンス」をご参照ください。 |
|
endpoint |
はい |
Tablestore インスタンスのエンドポイントです。詳細については、「エンドポイント」をご参照ください。 |
|
|
tables(map(<table_name> -> <table_info>)) |
はい |
PrestoDB にマウントされるテーブルの一覧です。 重要
|
|
|
<table_info> |
originName |
いいえ |
Tablestore 内の実際のテーブル名です。
コネクタが Tablestore 内で対応するテーブルを見つけられない場合、そのテーブルに対する読み取りおよび書き込み操作は失敗します。 |
|
columns(list([<column_info>])) |
はい |
テーブルのメタデータで、定義済みのすべての列を含みます。 重要
|
|
|
<column_info> |
name |
はい |
列名です。 重要
PrestoDB では列名の大文字・小文字は区別されません。 |
|
type |
はい |
列の型です。Tablestore 列型にマッピングされる PrestoDB でサポートされる型は、Bigint、Varchar、Varbinary、Double、Boolean です。 重要
PrestoDB 内の列型は、Tablestore 内の列型と一致している必要があります。 |
|
|
originName |
いいえ |
Tablestore データテーブル内の対応する列の名前です。 |
|
一般的な SQL 使用例
以下の SQL 使用例は、PrestoDB を通じて Tablestore データを操作する方法を示しています。すべての例では、Tablestore インスタンス myinstance に接続された testdb という名前のスキーマと、スキーマ (pk varchar, c1 double, c2 varchar, c3 varchar) を持つ exampletable という名前のマッピングテーブルを使用しています。
スキーマの作成
スキーマは Tablestore インスタンスへのアクセスおよび認証を構成します。以下の例では、Tablestore インスタンス myinstance にアクセスするための 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 Secret です。 |
マッピングテーブルの作成
マッピングテーブルは、Tablestore インスタンス内の物理テーブルに対応します。
マッピングテーブルを作成する際は、以下の点に注意してください。
マッピングテーブル内のフィールド型が Tablestore データテーブル内のものと一致していることを確認してください。詳細については、「フィールド型マッピング」をご参照ください。
マッピングテーブル名は Tablestore 内のテーブル名と一致している必要があります。
CREATE TABLE 文の
table_nameプロパティにより、PrestoDB テーブルが Tablestore 内の実際のテーブルにマッピングされます。異なる名前の複数のマッピングテーブルが同じ Tablestore データテーブルを指すことができます。マッピングテーブルにはデータテーブルのすべてのプライマリキー列を含める必要がありますが、属性列はサブセットのみを含めることができます。
マッピングテーブル内のプライマリキー列の名前および順序は、Tablestore データテーブル内のものと一致している必要があります。各属性列は、
origin_nameパラメーターを使用して Tablestore 内の対応する列にマッピングします。
以下の例では、Tablestore データテーブルと同名の exampletable という名前のマッピングテーブルを作成します。
CREATE TABLE if not exists exampletable
(
pk varchar,
c1 double with (origin_name = 'col1'),
c2 varchar with (origin_name = 'col2'),
c3 varchar with (origin_name = 'col3')
) WITH (
table_name = 'exampletable'
);
スキーマ操作
スキーマ作成後、すべてのスキーマを一覧表示するか、使用するスキーマを選択します。
すべてのスキーマを一覧表示
show schemas;
サンプル応答:
Schema
--------------------
information_schema
testdb
testdb1
(3 rows)
スキーマの使用
テーブルに対する操作を実行する前に、スキーマを選択します。
テーブルに対する操作を実行する前に、スキーマを選択してください。
以下の例では、testdb スキーマを選択します。
use testdb;
サンプル応答:
USE
マッピングテーブル操作
マッピングテーブル作成後、スキーマ内のテーブルを一覧表示したり、テーブルメタデータを表示したり、マッピングテーブルを削除したりできます。
スキーマ内のテーブルを一覧表示
スキーマ選択後、そのテーブルを一覧表示します。
show tables;
サンプル応答:
Table
-----------------
exampletable
sampletable
sampletabletest
table1
testtable
(5 rows)
テーブルの説明
以下の例では、exampletable テーブルを説明します。
describe exampletable;
サンプル応答:
Column | Type | Extra | Comment
--------+---------+-------+---------
pk | varchar | |
c1 | double | |
c2 | varchar | |
c3 | varchar | |
(4 rows)
マッピングテーブルの削除
以下の例では、table1 マッピングテーブルを削除します。
drop table table1;
サンプル応答:
DROP TABLE
データ操作
マッピングテーブル作成後、対応する Tablestore テーブルにデータを書き込んだり、データを読み取ったりできます。
PrestoDB は Tablestore テーブルに対する UPDATE 操作または DELETE 操作をサポートしていません。
データの書き込み
-
単一行の挿入
以下の例では、
exampletableに 1 行を挿入します。insert into exampletable values('101', 22.0, 'Mary', '10002');サンプル応答:
INSERT: 1 row -
バッチでのデータインポート
重要バッチでデータをインポートする前に、送信先テーブルが存在し、そのスキーマがソーステーブルと一致していることを確認してください。
以下の例では、
exampletableのうちc1 < 50の行をsampletableにコピーします。insert into sampletable select pk, c1, c2, c3 from exampletable where c1 < 50;サンプル応答:
INSERT: 3 rows
データの読み取り
-
すべての行の照会
以下の例では、
exampletableからすべてのデータを読み取ります。select * from exampletable;サンプル応答:
pk | c1 | c2 | c3 -----+------+------+------- 100 | 11.0 | Lily | 10001 101 | 22.0 | Mary | 10002 102 | 12.0 | Jim | 10003 (3 rows) -
条件付きの行の照会
以下の例では、
exampletableのうちc1 < 15かつc3 = '10001'の行を照会します。select * from exampletable where c1 < 15 and c3 = '10001';サンプル応答:
pk | c1 | c2 | c3 -----+------+------+------- 100 | 11.0 | Lily | 10001 (1 row)
データの分析
-
列の平均値の計算
以下の例では、
exampletableのc1列の平均値を計算します。select avg(c1) as Average from exampletable;サンプル応答:
Average --------- 15.0 (1 row) -
総行数のカウント
以下の例では、
exampletableのすべての行をカウントします。select count(*) as total from exampletable;サンプル応答:
total ------- 3 (1 row)