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

AnalyticDB:外部テーブルの作成

最終更新日:Oct 14, 2024

AnalyticDB for MySQLを使用すると、CREATE EXTERNAL TABLEステートメントを実行して、Object Storage Service (OSS) 、ApsaraDB RDS for MySQL、ApsaraDB for MongoDB、Tablestore、MaxComputeなどのさまざまなサービスに基づいて外部テーブルを作成できます。

前提条件

  • AnalyticDB for MySQL Data Lakehouse Editionクラスターが作成されます。

  • AnalyticDB for MySQLクラスターのマイナーバージョンは3.1.8.0以降です。

    説明

    AnalyticDB for MySQLのマイナーバージョンを照会するには Data Lakehouse Editionクラスターで、SELECT adb_version(); 文を実行します。 クラスターのマイナーバージョンを更新するには、テクニカルサポートにお問い合わせください。

  • 外部データベースが作成されます。 詳細については、「外部データベースの作成」をご参照ください。

使用上の注意

Alibaba Cloudアカウント全体で外部テーブルを作成することはできません。

OSS外部テーブル

重要
  • OSS外部テーブルが作成されるOSSバケットは、AnalyticDB for MySQLクラスターと同じリージョンに存在する必要があります。

  • Hudi外部テーブルは、V3.1.9.2以降のAnalyticDB for MySQLクラスターに対してのみ作成できます。

    AnalyticDB for MySQLのマイナーバージョンを照会するには Data Lakehouse Editionクラスターで、SELECT adb_version(); 文を実行します。 クラスターのマイナーバージョンを更新するには、テクニカルサポートにお問い合わせください。

  • 作成したパーティション化されたOSS外部テーブルのデータをクエリするには、MSCK REPAIR table文を実行して外部テーブルのパーティションを同期する必要があります。

構文

CREATE EXTERNAL TABLE [IF NOT EXISTS] table_name
(column_name column_type[, ...])
[PARTITIONED BY (column_name column_type[, ...])]
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS {TEXTFILE|ORC|PARQUET|JSON|RCFIL|HUDI}
LOCATION 'OSS_LOCATION';
[TBLPROPERTIES (
 'type' = 'cow|mor'
 'auto.create.location' = 'true|false')]

パラメーター

パラメーター

必須

説明

table_name (column_name column_type[, ...])

必須

外部テーブルの名前とスキーマ。

テーブル名と列名は、命名規則に準拠している必要があります。 詳細については、「制限」トピックの「命名制限」セクションをご参照ください。

PARTITIONED BY (column_name column_type[, ...])

選択可能

パーティションキー列。 外部テーブルがパーティションテーブルの場合、このパラメーターを指定する必要があります。 マルチレベルパーティションテーブルを作成するには、複数のパーティションキー列を指定できます。

ROW FORMAT DELIMITED FIELDS TERMINATED BY ','

必須

列の区切り文字。 ファイル内の区切り文字と同じ文字を指定できます。 この例では、コンマ (,) が使用されます。

重要

このパラメーターは、STORED AS TEXTFILEおよびSTORED AS JSONに対してのみ設定できます。

STORED AS {TEXTFILE | ORC | PARQUET | JSON | RCFILE | HUDI}

必須

ファイルの保存形式。

TXTおよびCSVファイルの場合、このパラメーターをSTORED AS TEXTFILEに設定します。 PARQUETファイルは、STRUCTデータ型とネストされたデータ型をサポートします。

重要

V3.1.8.0以降のAnalyticDB for MySQLクラスターのみが、STRUCTデータ型のPARQUETファイルをサポートしています。

ロケーション

必須

OSSオブジェクトのパスまたはディレクトリ。

OSSディレクトリを指定する場合は、次のルールに従うことを推奨します。 そうしないと、クエリエラーまたはデータ例外が発生する可能性があります。

  • OSSディレクトリはスラッシュ (/) で終わる必要があります。

  • ディレクトリ内のすべてのオブジェクトは同じ形式で保存する必要があります。

  • ディレクトリ内のすべてのオブジェクトは、同じ数量、順序、およびデータ型のフィールドを使用する必要があります。

パーティション化された外部テーブルを作成するときは、LOCATIONパラメーターをパーティションの上位ディレクトリに設定する必要があります。 たとえば、OSSオブジェクトのパスはoss:// testBucketname/testfolder/p1=2023-06-13/data.csvです。 この場合、LOCATION 'oss:// testBucketname/testfolder/' を指定して、p1パーティションキー列を持つパーティション外部テーブルを作成する必要があります。

重要
  • Hudi外部テーブルを作成するときは、という名前のHudiメタデータファイルが. パーカーOSSパスに存在します。

  • auto.create.locationパラメーターをtrueに設定したとします。 パーティション化された外部テーブルを作成するときに、LOCATIONパラメーターで指定されたOSSパスまたはディレクトリが存在しない場合、OSSパスまたはディレクトリが自動的に作成されます。

タイプ

選択可能

Hudi外部テーブルのタイプ。 有効な値:

  • COW (デフォルト): 読み取り効率に高い要件があるシナリオに適しています。

  • MOR: 書き込み効率に高い要件があるシナリオに適しています。

重要

このパラメーターは、STORED AS HUDIにのみ指定する必要があります。

auto.create.location

選択可能

OSSパスまたはディレクトリを自動的に作成するかどうかを指定します。 有効な値:

  • true

  • false (デフォルト)

重要

このパラメーターは、パーティション化された外部テーブルを作成した場合にのみ有効です。

例1: パーティション分割されていない外部テーブルの作成

  • ファイルストレージ形式をTEXTFILEに設定して、パーティション分割されていない外部テーブルを作成します。

    存在しない場合は

    CREATE EXTERNAL TABLE IF NOT EXISTS adb_external_demo.osstest1
    (id int,
    name string,
    age int,
    city string)
    ROW FORMAT DELIMITED FIELDS TERMINATED BY  ','
    STORED AS TEXTFILE
    LOCATION  'oss://testBucketName/osstest/p1=hangzhou/p2=2023-06-13/data.csv';
  • ファイルストレージ形式をHUDIに設定して、パーティション分割されていない外部テーブルを作成します。

    存在しない場合は

    CREATE EXTERNAL TABLE IF NOT EXISTS adb_external_demo.osstest2
    (id int,
    name string,
    age int,
    city string)
    STORED AS HUDI
    LOCATION  'oss://testBucketName/osstest/test'
    TBLPROPERTIES ('type' = 'cow');
    重要

    Hudi外部テーブルを作成すると、_hoodie_commit_time_hoodie_commit_seqno_hoodie_record_key_hoodie_partition_path、および _hoodie_file_name列が自動的に作成されます。

  • ファイルストレージ形式をPARQUETに設定して、パーティション分割されていない外部テーブルを作成します。

    存在しない場合は

    CREATE EXTERNAL TABLE IF NOT EXISTS adb_external_demo.osstest3
    (
    A STRUCT < var1:string, var2:int >
    ) 
    STORED AS PARQUET 
    LOCATION 'oss://testBucketName/osstest/Parquet';

例2: パーティション化外部テーブルの作成

存在しない場合は

CREATE EXTERNAL TABLE IF NOT EXISTS adb_external_demo.osstest4
(id int,
name string,
age int,
city string)
PARTITIONED BY (p2 string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY  ','
STORED AS TEXTFILE
LOCATION  'oss://testBucketName/osstest/p1=hangzhou/';

例3: マルチレベルパーティション外部テーブルの作成

存在しない場合は

CREATE EXTERNAL TABLE IF NOT EXISTS adb_external_demo.osstest5
(id int,
name string,
age int,
city string)
PARTITIONED BY (p1 string,p2 string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY  ','
STORED AS TEXTFILE
LOCATION  'oss://testBucketName/osstest/';

ApsaraDB RDS for MySQL外部テーブル

重要
  • ApsaraDB RDS for MySQL外部テーブルを作成する場合、AnalyticDB for MySQLコンソールクラスター情報 ページでElastic Network Interface (ENI) を有効にする必要があります。

  • ApsaraDB RDS for MySQLインスタンスは、AnalyticDB for MySQLクラスターと同じ仮想プライベートクラウド (VPC) に存在する必要があります。

構文

CREATE EXTERNAL TABLE [IF NOT EXISTS] table_name
(column_name column_type[, ...])
ENGINE='MYSQL'
TABLE_PROPERTIES='{  
	"url":"mysql_vpc_address",  
	"tablename":"mysql_table_name",  
	"username":"mysql_user_name",  
	"password":"mysql_user_password"
	[,"charset":"{gbk|utf8|utf8mb4}"]
  }';

パラメーター

パラメーター

必須

説明

table_name (column_name column_type[, ...])

必須

外部テーブルの名前とスキーマ。

テーブル名と列名は、命名規則に準拠している必要があります。 詳細については、「制限」トピックの「命名制限」セクションをご参照ください。

エンジン='MYSQL'

必須

外部テーブルのストレージエンジン。 ApsaraDB RDS for MySQLデータを読み書きするには、ストレージエンジンをMYSQLに設定します。

テーブル_プロパティ

必須

外部テーブルのプロパティ。

url

必須

ApsaraDB RDS for MySQLインスタンスのVPCエンドポイントとポート番号、およびインスタンス内のデータベースの名前。 ApsaraDB RDS For MySQLインスタンスのVPCエンドポイントを取得する方法については、「ApsaraDB RDS for MySQLインスタンスの内部およびパブリックエンドポイントとポート番号の表示と変更」をご参照ください。

tablename

必須

ApsaraDB RDS for MySQL外部テーブルの名前。

ユーザー名

必須

ApsaraDB RDS for MySQLインスタンスのデータベースアカウントの名前。

パスワード

必須

ApsaraDB RDS for MySQLインスタンスのデータベースアカウントのパスワード。

charset

選択可能

ApsaraDB RDS for MySQLインスタンスのデータベースで使用される文字セット。 有効な値:

  • gbk

  • utf8 (デフォルト)

  • utf8mb4

adb_external_demo.mysqltestが存在しない場合は

CREATE EXTERNAL TABLE IF NOT EXISTS adb_external_demo.mysqltest (
	id int,
	name varchar(1023),
	age int
 ) ENGINE = 'MYSQL'
 TABLE_PROPERTIES = '{
   "url":"jdbc:mysql://rm-bp1gx6h1tyd04****.mysql.rds.aliyuncs.com:3306/test_adb",
   "tablename":"person",
   "username":"testUserName",
   "password":"testUserPassword",
   "charset":"utf8"
}';

ApsaraDB for MongoDB外部テーブル

重要
  • ApsaraDB for MongoDB外部テーブルを作成する場合、AnalyticDB for MySQLコンソールクラスター情報 ページでENIを有効にする必要があります。

  • ApsaraDB for MongoDBインスタンスは、AnalyticDB for MySQLクラスターと同じVPCに存在する必要があります。

構文

CREATE EXTERNAL TABLE [IF NOT EXISTS] table_name
(column_name column_type[, ...])
ENGINE='MONGODB'
TABLE_PROPERTIES = '{
	"mapped_name":"table",
  "location":"location",
  "username":"user",
  "password":"password",
}';

Parameters

パラメーター

必須

説明

table_name (column_name column_type[, ...])

必須

外部テーブルの名前とスキーマ。

テーブル名と列名は、命名規則に準拠している必要があります。 詳細については、「制限」トピックの「命名制限」セクションをご参照ください。

エンジン='MYSQL'

必須

外部テーブルのストレージエンジン。 ApsaraDB for MongoDBデータを読み書きするには、ストレージエンジンをMONGODBに設定します。

テーブル_プロパティ

必須

外部テーブルのプロパティ。

mapped_name

必須

ApsaraDB for MongoDBコレクションの名前。

場所

必須

ApsaraDB for MongoDBインスタンスのVPCエンドポイント。 VPCエンドポイントの取得方法については、「」をご参照ください。インスタンス接続の概要

username

必須

ApsaraDB for MongoDBインスタンスのデータベースアカウントの名前。 データベースアカウントの作成方法については、「MongoDBデータベースユーザーの権限の管理」をご参照ください。

説明

ApsaraDB for MongoDBは、指定されたデータベースアカウント名とパスワードを検証します。 ApsaraDB for MongoDBインスタンスのVPCエンドポイントに含まれるデータベースアカウント名を使用する必要があります。 ご不明な点がございましたら、テクニカルサポートにお問い合わせください。

password

必須

ApsaraDB for MongoDBインスタンスのデータベースアカウントのパスワード。

CREATE EXTERNAL TABLE adb_external_demo.person (
  id int,
  name string,
  age int
) ENGINE = 'MONGODB' TABLE_PROPERTIES ='{
"mapped_name":"person",
"location":"mongodb://testuser:****@dds-bp113d414bca8****.mongodb.rds.aliyuncs.com:3717,dds-bp113d414bca8****.mongodb.rds.aliyuncs.com:3717/test_mongodb",
"username":"testuser",
"password":"password",
}';

Tablestore外部テーブル

重要

TablestoreインスタンスがバインドされているVPCは、AnalyticDB for MySQLクラスターが存在するVPCと同じである必要があります。

構文

CREATE EXTERNAL TABLE [IF NOT EXISTS] table_name
(column_name column_type[, ...])
ENGINE='OTS'
TABLE_PROPERTIES = '{
	"mapped_name":"table_name",
	"location":"tablestore_vpc_address"
}';

パラメーター

パラメーター

必須

説明

table_name (column_name column_type[, ...])

必須

外部テーブルの名前とスキーマ。 テーブル名と列名は、命名規則に準拠している必要があります。 詳細については、「制限」トピックの「命名制限」セクションをご参照ください。

エンジン='OTS'

必須

外部テーブルのストレージエンジン。 Tablestoreデータを読み書きするには、ストレージエンジンをOTSに設定します。

mapped_name

必須

Tablestoreインスタンスのテーブルの名前。 テーブルの名前を表示するには、Tablestoreコンソールにログインし、[インスタンス管理] ページに移動します。

場所

必須

TablestoreインスタンスのVPCエンドポイント。 インスタンスのVPCエンドポイントを表示するには、Tablestoreコンソールにログインし、[インスタンス管理] ページに移動します。

adb_external_demo.otstestが存在しない場合は

CREATE EXTERNAL TABLE IF NOT EXISTS adb_external_demo.otstest (
	id int,
	name string,
	age int
) ENGINE = 'OTS' 
TABLE_PROPERTIES = '{
	"mapped_name":"person",
	"location":"https://w0****la.cn-hangzhou.vpc.tablestore.aliyuncs.com"
}';

MaxCompute外部テーブル

重要
  • MaxComputeプロジェクトは、AnalyticDB for MySQLクラスターと同じリージョンに存在する必要があります。

  • MaxCompute外部テーブルをバッチ作成する方法については、「IMPORT FOREIGN SCHEMA」をご参照ください。

構文

CREATE EXTERNAL TABLE [IF NOT EXISTS] table_name
(column_name column_type[, ...])
ENGINE='ODPS'
TABLE_PROPERTIES='{
	"endpoint":"endpoint",
	"accessid":"accesskey_id",
	"accesskey":"accesskey_secret",
	["partition_column":"partition_column"],
	"project_name":"project_name",
	"table_name":"table_name"
}'; 

パラメーター

パラメーター

必須

説明

table_name (column_name column_type[, ...])

必須

外部テーブルの名前とスキーマ。 テーブルスキーマには、パーティションキー列が含まれている必要があります。

table_nameはテーブルの名前を指定し、column_nameは列の名前を指定します。 テーブル名と列名は、命名規則に準拠している必要があります。 詳細については、「制限」トピックの「命名制限」セクションをご参照ください。

column_typeは、列のデータ型を指定します。 MaxComputeの基本データ型と複合データ型 (ARRAY、MAP、STRUCTなど) がサポートされています。

説明

V3.2.1.0以降のAnalyticDB for MySQLクラスターのみが、MaxComputeの複雑なデータタイプをサポートしています。 詳細については、「複雑なデータ型」をご参照ください。

AnalyticDB for MySQLのマイナーバージョンを照会するには Data Lakehouse Editionクラスターで、SELECT adb_version(); 文を実行します。 クラスターのマイナーバージョンを更新するには、テクニカルサポートにお問い合わせください。

エンジン='ODPS'

必須

外部テーブルのストレージエンジン。 MaxComputeデータを読み書きするには、ストレージエンジンをODPSに設定します。

エンドポイント

必須

MaxComputeプロジェクトのエンドポイント。

説明

MaxComputeには、VPCエンドポイントを使用してのみアクセスできます。 詳細については、「エンドポイント」をご参照ください。

accessid

必須

MaxComputeへのアクセスに使用されるAlibaba CloudアカウントまたはRAM (Resource Access Management) ユーザーのAccessKey ID。

AccessKey IDとAccessKeyシークレットの取得方法については、「アカウントと権限」をご参照ください。

accesskey

必須

MaxComputeへのアクセスに使用されるAlibaba CloudアカウントまたはRAMユーザーのAccessKeyシークレット。

AccessKey IDとAccessKeyシークレットの取得方法については、「アカウントと権限」をご参照ください。

partition_column

選択可能

パーティションキー列。 外部テーブルがパーティションテーブルの場合、このパラメーターを指定する必要があります。

project_name

必須

MaxCompute プロジェクトの名前を設定します。

table_name

必須

MaxComputeテーブルの名前。

adb_external_demo.mctestが存在しない場合は

CREATE EXTERNAL TABLE IF NOT EXISTS adb_external_demo.mctest (
	id int,
	name varchar(1023),
	age int,
	dt string
) ENGINE='ODPS'
TABLE_PROPERTIES='{
	"accessid":"LTAILd4****",
	"endpoint":"http://service.cn-hangzhou.maxcompute.aliyun.com/api",
	"accesskey":"4A5Q7ZVzcYnWMQPysX****",
	"partition_column":"dt",
	"project_name":"test_adb",
	"table_name":"person"
}';

関連ドキュメント