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

AnalyticDB:CREATE EXTERNAL TABLE

最終更新日:Sep 06, 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クラスターについては、「クラスターのマイナーバージョンを表示する方法」をご参照ください。 クラスターのマイナーバージョンを更新するには、テクニカルサポートにお問い合わせください。

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

使用上の注意

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

OSS外部テーブル

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

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

    AnalyticDB For MySQLクラスターのマイナーバージョンを表示する方法については、クラスターのマイナーバージョンを表示するにはどうすればよいですか。 クラスターのマイナーバージョンを更新するには、テクニカルサポートにお問い合わせください。

  • 作成したパーティション化された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エンドポイントを取得する方法については、「インスタンスエンドポイントとポートの表示と管理」をご参照ください。

tablename

課金されます

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

課金されます

データベースアカウントのパスワードを設定します。

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クラスターと同じリージョンに存在する必要があります。

構文

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クラスターのマイナーバージョンを表示する方法については、クラスターのマイナーバージョンを表示するにはどうすればよいですか。 クラスターのマイナーバージョンを更新するには、テクニカルサポートにお問い合わせください。

エンジン='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"
}';

関連ドキュメント