すべてのプロダクト
Search
ドキュメントセンター

Tablestore:Prestoサーバーを構成してSQLステートメントのサンプルを実行する

最終更新日:Dec 28, 2024

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

はい

スキーマ構成モード。有効な値:

  • meta-table:メタデータテーブルに基づいてスキーマを動的に構成します。このモードを使用する場合は、スキーマ情報を格納するために使用するメタストアを構成する必要があります。

  • file:ローカルの静的ファイルに基づいてスキーマを構成します。このモードを使用する場合は、ローカルの静的ファイルのフルパスとローカルの静的ファイルを構成する必要があります。

tablestore.schema-file

/users/test/tablestore/presto/tablestore.schema

条件付き

このパラメータは、tablestore.schema-modeパラメータがfileに設定されている場合にのみ必須です。

ローカルの静的ファイルのフルパス。ローカルの静的ファイルの構成方法の詳細については、このトピックの「スキーマ構成」セクションを参照してください。

tablestore.meta-instance

metastoreinstance

条件付き

このパラメータは、tablestore.schema-modeパラメータがmeta-tableに設定されている場合にのみ必須です。

メタデータを格納するために使用されるTablestoreインスタンス。ビジネス要件に基づいて、このパラメータの値を変更します。詳細については、インスタンスを参照してください。

重要

構成するTablestoreインスタンスがAlibaba Cloudアカウントに存在することを確認してください。

tablestore.endpoint

http://metastoreinstance.cn-hangzhou,ots.aliyuncs.com/

条件付き

このパラメータは、tablestore.schema-modeパラメータがmeta-tableに設定されている場合にのみ必須です。

メタデータを格納するために使用されるTablestoreインスタンスのエンドポイント。ビジネス要件に基づいて、このパラメータの値を変更します。詳細については、エンドポイントを参照してください。

tablestore.accessid

****************

条件付き

このパラメータは、tablestore.schema-modeパラメータがmeta-tableに設定されている場合にのみ必須です。

メタデータを格納するために使用されるTablestoreインスタンスにアクセスする権限を持つResource Access Management(RAM)ユーザーのAccessKey IDとAccessKeyシークレット。

tablestore.accesskey

**************************

条件付き

tablestore.meta-table

meta_table

条件付き

このパラメータは、tablestore.schema-modeパラメータがmeta-tableに設定されている場合にのみ必須です。

メタデータを格納するために使用されるTablestoreテーブルの名前。ビジネス要件に基づいて、このパラメータの値を変更します。

tablestore.auto-create-meta-table

true

条件付き

このパラメータは、tablestore.schema-modeパラメータがmeta-tableに設定されている場合にのみ必須です。

メタデータテーブルを自動的に作成するかどうかを指定します。デフォルト値: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_name>パラメータの値は、PrestoDBでは大文字と小文字が区別されません。

<table_info>

originName

いいえ

PrestoDBのテーブルにマップされているTablestoreテーブルの名前。

  • このパラメータを指定しない場合、コネクタは、PrestoDBのテーブルにマップされているTablestoreテーブルの実際の名前を自動的に使用します。

  • このパラメータを指定する場合、コネクタは指定したテーブル名を使用します。

コネクタがPrstoDBのテーブルにマップされているTablestoreテーブルの名前を見つけられない場合、テーブルからデータを読み取ったり、テーブルにデータを書き込んだりすることはできません。

columns(list([<column_info>]))

はい

テーブルのメタデータ。メタデータには、定義されているすべての列が含まれている必要があります。

重要
  • 列のメタデータには、Tablestoreテーブルのすべてのプライマリキー列が含まれている必要があります。メタデータのプライマリキー列の名前と順序は、Tablestoreテーブルの名前と順序と同じである必要があります。

  • メタデータが無効な場合、テーブルからデータを読み取ったり、テーブルにデータを書き込んだりするときにエラーが報告されます。

<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)