PrestoDBをTablestoreに接続する場合は、ビジネス要件に基づいてPrestoサーバーのカタログとスキーマの構成を完了する必要があります。PrestoDBがTablestoreに接続された後、一般的なSQLステートメントのサンプルを使用してTablestoreデータに対する操作を実行できます。このトピックでは、Prestoサーバーの構成方法とSQLステートメントのサンプルについて説明します。
Prestoサーバーを構成する
ビジネス要件に基づいて、Prestoサーバーのカタログとスキーマを構成します。
カタログ構成には、コネクタの構成とスキーマ構成モードが含まれます。スキーマは、ローカルの静的ファイルに基づいて構成できます。また、メタデータテーブルに基づいてスキーマを動的に構成することもできます。
スキーマ構成には、主にローカルの静的ファイルの構成が含まれます。メタデータテーブルに基づく動的構成モードを使用する場合、Prestoサーバーを起動する前にスキーマを構成する必要はありません。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に設定します。 |
tablestore.schema-mode | meta-table | はい | スキーマ構成モード。有効な値:
|
tablestore.schema-file | /users/test/tablestore/presto/tablestore.schema | 条件付き | このパラメータは、 ローカルの静的ファイルのフルパス。ローカルの静的ファイルの構成方法の詳細については、このトピックの「スキーマ構成」セクションを参照してください。 |
tablestore.meta-instance | metastoreinstance | 条件付き | このパラメータは、 メタデータを格納するために使用されるTablestoreインスタンス。ビジネス要件に基づいて、このパラメータの値を変更します。詳細については、インスタンスを参照してください。 重要 構成するTablestoreインスタンスがAlibaba Cloudアカウントに存在することを確認してください。 |
tablestore.endpoint | http://metastoreinstance.cn-hangzhou,ots.aliyuncs.com/ | 条件付き | このパラメータは、 メタデータを格納するために使用されるTablestoreインスタンスのエンドポイント。ビジネス要件に基づいて、このパラメータの値を変更します。詳細については、エンドポイントを参照してください。 |
tablestore.accessid | **************** | 条件付き | このパラメータは、 メタデータを格納するために使用されるTablestoreインスタンスにアクセスする権限を持つResource Access Management(RAM)ユーザーのAccessKey IDとAccessKeyシークレット。 |
tablestore.accesskey | ************************** | 条件付き | |
tablestore.meta-table | meta_table | 条件付き | このパラメータは、 メタデータを格納するために使用されるTablestoreテーブルの名前。ビジネス要件に基づいて、このパラメータの値を変更します。 |
tablestore.auto-create-meta-table | true | 条件付き | このパラメータは、 メタデータテーブルを自動的に作成するかどうかを指定します。デフォルト値:true。スキーマを作成するときにメタデータテーブルが自動的に作成されることを示します。 |
スキーマ構成
スキーマは、ローカルの静的ファイルに基づいて構成できます。また、メタデータテーブルに基づいてスキーマを動的に構成することもできます。メタデータテーブルに基づく動的構成モードを使用することをお勧めします。
メタデータテーブルに基づく動的構成モードでスキーマを構成する
このモードを使用する場合、Prestoサーバーを実行する前にスキーマを構成する必要はありません。
PrestoDBをTablestoreに接続してSQL CLIを実行した後、
CREATE SCHEMAステートメントとCREATE TABLEステートメントを実行して、スキーマとマッピングテーブルを動的に作成する必要があります。詳細については、このトピックのスキーマを作成するセクションとマッピングテーブルを作成するセクションを参照してください。
ローカルの静的ファイルに基づいてスキーマを構成する
ローカルの静的ファイルのパスは、カタログ構成ファイルのtablestore.schema-fileパラメータで指定されたフルパスと同じである必要があります。
Prestoサーバー上にファイルを作成し、次のサンプルコードに基づいてファイルを構成できます。
{
"account" : {
"accessId" : "xxxxxxxx", ----- <必須> Alibaba CloudアカウントまたはRAMユーザーのAccessKey ID。
"accessKey" : "xxxxxxxxxxxxxxx", ----- <必須> Alibaba CloudアカウントまたはRAMユーザーのAccessKeyシークレット。
},
"instances" : {
"mydb" : { ----- <必須> PrestoDBのスキーマの名前。
"instanceName" : "myinstance", ----- <必須> 接続されているTablestoreインスタンスの名前。
"endpoint" : "http://myinstance.cn-hangzhou.ots.aliyuncs.com", ----- <必須> 接続されているTablestoreインスタンスのエンドポイント。
"tables": {
"mytable" : { ----- <必須> PrestoDBのテーブルの名前。
"originName" : "SampleTable", ----- <オプション> PrestoDBのテーブルにマップされているTablestoreテーブルの名前。名前は大文字と小文字が区別されます。このパラメータを指定しない場合、Tablestoreテーブルの名前はPrestoのテーブルの名前と同じになります。
"columns" : [ ----- <必須> PrestoDBのテーブルのメタデータ。メタデータには、すべてのプライマリキー列が含まれている必要があります。メタデータのプライマリキー列の順序は、テーブルの順序と同じである必要があります。
{"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シークレット |
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 | いいえ | PrestoDBのテーブルにマップされているTablestoreテーブルの名前。
コネクタがPrstoDBのテーブルにマップされているTablestoreテーブルの名前を見つけられない場合、テーブルからデータを読み取ったり、テーブルにデータを書き込んだりすることはできません。 |
columns(list([<column_info>])) | はい | テーブルのメタデータ。メタデータには、定義されているすべての列が含まれている必要があります。 重要
| |
<column_info> | name | はい | 列の名前。 重要 列の名前は、PrestoDBでは大文字と小文字が区別されません。 |
type | はい | テーブルの列のデータ型。PrestoDBは、BIGINT、VARCHAR、VARBINARY、DOUBLE、BOOLEANのデータ型のみをサポートしています。 重要 PrestoDBで定義されているデータ型は、Tablestoreのデータ型にマップする必要があります。 | |
originName | いいえ | PrestoDBのスキーマにマップされているTablestoreインスタンスの列の名前。 | |
一般的なSQLステートメントのサンプル
PrestoDBを使用してTablestoreにアクセスする場合、一般的なSQLステートメントのサンプルを実行して、スキーマとマッピングテーブルを作成できます。また、一般的なSQLステートメントのサンプルを実行して、スキーマ、マッピングテーブル、およびデータに対する操作を実行することもできます。
スキーマを作成する
アクセスする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シークレット。 |
マッピングテーブルを作成する
Tablestoreテーブルにマップされているマッピングテーブルを作成します。
マッピングテーブルを作成するときは、次の点に注意してください。
マッピングテーブルの列のデータ型がTablestoreテーブルのデータ型にマップされていることを確認してください。詳細については、「PrtestoDBを使用してTablestoreにアクセスする」トピックのデータ型マッピングセクションを参照してください。
マッピングテーブルの名前は、Tablestoreテーブルの実際の名前と同じである必要があります。
CREATE TABLEステートメントのtable_nameパラメータで指定されたテーブルは、Tablestoreの実際のテーブルにマップされます。同じTablestoreテーブルに対して複数のマッピングテーブルを作成できます。
マッピングテーブルには、Tablestoreテーブルのすべてのプライマリキー列が含まれている必要がありますが、特定の属性列のみが含まれている必要があります。
マッピングテーブルのプライマリキー列の名前と順序は、Tablestoreテーブルの名前と順序と同じである必要があります。origin_nameパラメータを指定することにより、マッピングテーブルの各属性列を実際のTablestoreテーブルの列名にマップできます。
次のSQLステートメントは、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'
);スキーマに対する操作を実行する
スキーマを作成した後、スキーマのリストをクエリし、ビジネス要件に基づいてスキーマを使用できます。
スキーマのリストをクエリする
次のSQLステートメントを実行して、スキーマのリストをクエリします。
show schemas;サンプルレスポンス:
Schema
--------------------
information_schema
testdb
testdb1
(3 rows)スキーマを使用する
スキーマを使用して、スキーマ内のテーブルに対する後続の操作を実行します。
スキーマを使用した後でのみ、スキーマ内のテーブルに対する操作を実行できます。
次のSQLステートメントは、testdbスキーマを使用する方法の例を示しています。
use testdb;サンプルレスポンス:
USEマッピングテーブルに対する操作を実行する
マッピングテーブルを作成した後、特定のスキーマ内のテーブルをクエリしたり、特定のテーブルのメタデータを表示したり、マッピングテーブルを削除したりできます。
特定のスキーマ内のテーブルをクエリする
次のSQLステートメントを実行して、使用されているスキーマ内のテーブルをクエリします。
show tables;サンプルレスポンス:
Table
-----------------
exampletable
sampletable
sampletabletest
table1
testtable
(5 rows)特定のテーブルのメタデータを表示する
次のSQLステートメントは、exampletableテーブルのメタデータを表示する方法の例を示しています。
describe exampletable;サンプルレスポンス:
Column | Type | Extra | Comment
--------+---------+-------+---------
pk | varchar | |
c1 | double | |
c2 | varchar | |
c3 | varchar | |
(4 rows)テーブルの説明を表示する
次のSQLステートメントは、exampletableテーブルの説明を表示する方法の例を示しています。
describe exampletable;サンプルレスポンス:
Column | Type | Extra | Comment
--------+---------+-------+---------
pk | varchar | |
c1 | double | |
c2 | varchar | |
c3 | varchar | |
(4 rows)マッピングテーブルを削除する
次のSQLステートメントは、table1という名前のマッピングテーブルを削除する方法の例を示しています。
drop table table1;サンプルレスポンス:
DROP TABLEデータに対する操作を実行する
Tablestoreテーブルのマッピングテーブルを作成した後、Tablestoreテーブルにデータを書き込んだり、Tablestoreテーブルのデータをクエリおよび分析したりできます。
PrestoDBを使用して、Tablestoreテーブルのデータを更新または削除することはできません。
データを書き込む
データの行を挿入する
次のSQLステートメントは、exampletableテーブルにデータの行を挿入する方法の例を示しています。
insert into exampletable values('101', 22.0, 'Mary', '10002');サンプルレスポンス:
INSERT: 1 row一度に複数のデータレコードをインポートする
重要一度に複数のデータレコードをインポートする前に、宛先テーブルが作成され、宛先テーブルのスキーマがソーステーブルのスキーマと同じであることを確認してください。
次のSQLステートメントは、c1列の値が50未満の行をexampletableテーブルからsampletableテーブルにコピーする方法の例を示しています。
insert into sampletable select pk, c1, c2, c3 from exampletable where c1 < 50;サンプルレスポンス:
INSERT: 3 rows
データを読み取る
テーブル内のすべてのデータをクエリする
次のSQLステートメントは、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)テーブル内の指定された条件を満たすデータをクエリする
次のSQLステートメントのサンプルは、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)
データを分析する
テーブル内の特定の列の値の平均を計算する
次のSQLステートメントは、exampletableテーブルのc1列の値の平均を計算する方法の例を示しています。
select avg(c1) as Average from exampletable;サンプルレスポンス:
Average --------- 15.0 (1 row)テーブル内の行数を計算する
次のSQLステートメントは、exampletableテーブルの行数を計算する方法の例を示しています。
select count(*) as total from exampletable;サンプルレスポンス:
total ------- 3 (1 row)