説明
このステートメントは、データベース内に外部データカタログ(External Catalog)を作成し、外部データソースに接続して外部データのメタ情報を取得するために使用されます。これにより、データのインポートや移行を行わずに直接外部データをクエリできます。
使用上の制限と注意事項
- 現在、
ODPSおよびHMSタイプの External Catalog の作成がサポートされています。 - HMS Catalog を作成する前に、HMS がアクセスする予定の基盤ストレージのファイルデータが HDFS 上にある場合は、Java SDK 環境のデプロイが完了していなければなりません。JAVA SDK 環境の設定に関する詳細は、OceanBase データベースの JAVA SDK 環境のデプロイを参照してください。
権限要件
CREATE EXTERNAL CATALOG ステートメントを実行するには、現在のユーザーが CREATE CATALOG 権限を持っている必要があります。OceanBase データベースの権限に関する詳細は、MySQLモードの権限分類を参照してください。
構文
CREATE EXTERNAL CATALOG [IF NOT EXISTS] external_catalog_name
PROPERTIES [=] (properties_type_options);
properties_type_options:
odps_type_list
| hms_type_list
odps_type_list:
TYPE = 'ODPS',
[ACCESSTYPE = 'accesstype_string',]
ACCESSID = 'string',
ACCESSKEY = 'string',
STSTOKEN = 'string',
ENDPOINT = 'string',
TUNNEL_ENDPOINT = 'string',
PROJECT_NAME = 'string',
[QUOTA_NAME = 'string',]
[COMPRESSION = 'compression_string',]
REGION = 'string'
hms_type_list:
TYPE = 'HMS',
URI = "string"
[, KRB5CONF = "string"]
[, KEYTAB = "string"]
[, PRINCIPAL = "string"]
[, MAX_CLIENT_POOL_SIZE = 20]
[, SOCKET_TIMEOUT = 10000000]
accesstype_string:
aliyun
| sts
| app
compression_string:
zlib
| zstd
| lz4
| odps_lz4
パラメータ説明
パラメータ |
説明 |
|---|---|
| IF NOT EXISTS | オプションです。この句を指定した場合、作成対象の外部データカタログが現在のテナント内に既に存在してもエラーは発生せず、システムは警告メッセージを表示します。指定しない場合はエラーが発生します。 |
| external_catalog_name | 作成する外部データカタログの名前を表します。 |
| PROPERTIES [=] (properties_type_options) | 外部データカタログタイプの関連プロパティオプションを指定するために使用されます。詳細については、以下の properties_type_options を参照してください。 |
properties_type_options
odps_type_list:ODPSタイプの外部データカタログ(ODPS Catalog)の関連プロパティリストを表します。詳細については、以下の odps_type_list を参照してください。hms_type_list:HMSタイプの外部データカタログ(HMS Catalog)の関連プロパティリストを表します。詳細については、以下の hms_type_list を参照してください。
odps_type_list
TYPE:外部データカタログのタイプを指定するために使用されます。値はODPSです。これは、MaxCompute データの外部テーブルへの読み書き時の値です。ACCESSTYPE:オプションです。MaxCompute のアカウントタイプを指定するために使用され、デフォルト値はaliyunです。アカウントタイプの値(大文字小文字を区別しません)は以下のとおりです:aliyunstsapp
ACCESSID:AccessKey ID を指定するために使用されます。ACCESSTYPEの値がaliyun/appアカウントタイプ、または空の場合、aliyun/appアカウント、または MaxCompute アクセス権限を持つ RAM ユーザーの AccessKey ID です。ACCESSKEY:AccessKey Secret を指定するために使用されます。ACCESSTYPEの値がaliyun/appアカウントタイプ、または空の場合、aliyun/appアカウント、または MaxCompute アクセス権限を持つ RAM ユーザーの AccessKey Secret です。STSTOKEN:token を指定するために使用されます。ACCESSTYPEの値がstsアカウントタイプの場合、これは MaxCompute サービスへのアクセス token です。ENDPOINT:MaxCompute の EndPoint(ドメインノード)を指定するために使用されます。TUNNEL_ENDPOINT:Tunnel Endpoint を指定するために使用されます。MaxCompute Catalog は Tunnel SDK を使用してデータを取得します。PROJECT_NAME:MaxCompute 内のプロジェクトスペース名を指定するために使用されます。プロジェクトスペース(Project)は MaxCompute の基本的な組織単位であり、従来のデータベースのデータベース(Database)またはスキーマ(Schema)の概念に相当します。QUOTA_NAME:オプションです。Quota を指定するために使用されます。Quota は MaxCompute において計算リソースプール(計算、アクセス、書き込み)を表します。ユーザーが対応する Quota を設定している場合、このパラメータで特定の Quota を指定します。COMPRESSION:オプションです。データソースの圧縮形式を指定するために使用されます。設定しない場合は圧縮が有効ではありません。値(大文字小文字を区別しません)は以下のとおりです:zlibzstdlz4odps_lz4
REGION:MaxComputeが有効なリージョンを指定するために使用します。
hms_type_list
TYPE:外部データカタログのタイプを指定するために使用します。値はHMS、つまりHiveが組織管理するデータを外部テーブルから読み取る場合に使用します。URI:アクセスするHMSサービスのthriftURIリンクを指定するために使用します。形式はthrift://$host:$portです。ここで:$host:thriftのIPアドレスを表します。$port:thriftポートを表します。HMSのデフォルトthriftポートは9083です。
KRB5CONF:オプションです。Kerberos認証を有効にしたHMSサービスにアクセスする際に必要なKerberos設定ファイルのパスを指定するために使用します。注意
KRB5CONFパラメータは、HMSでKerberos認証が有効な場合にのみ設定する必要があります。KEYTAB:オプションです。Kerberos認証を有効にしたHMSサービスにアクセスする際に必要なKEYTABキー ファイルのパスを指定するために使用します。OceanBaseクラスタが分散デプロイメントの場合、関連するOBServerが対応するマシンノードにこのファイルが存在している必要があります。注意
KEYTABパラメータは、HMSでKerberos認証が有効な場合にのみ設定する必要があります。PRINCIPAL:オプションです。Kerberos認証を有効にしたHMSサービスにアクセスする際に必要なKerberos主体(Principal)名を指定するために使用します。通常はservice/HOST@REGION.comの形式で存在し、例えばhive/hadoop@QA.COMのようになります。注意
PRINCIPALパラメータは、HMSでKerberos認証が有効な場合にのみ設定する必要があります。MAX_CLIENT_POOL_SIZE:オプションです。現在のCatalogで利用可能なクライアントキューの最大サイズを指定するために使用します。デフォルト値は20で、現在のHMS CatalogがHMSサービスに接続するクライアントを最大20個起動できることを意味します。SOCKET_TIMEOUT:オプションです。現在のCatalogで利用可能なクライアントアクセスのタイムアウト時間を指定するために使用します。デフォルトは10000000(10秒)です。
例
ODPSタイプのExternal Catalogを作成します。obclient> CREATE EXTERNAL CATALOG test_odps_catalog PROPERTIES = ( TYPE = 'ODPS', ACCESSID = '$odps_accessid', ACCESSKEY = '$odps_accesskey', ENDPOINT = '$odps_endpoint', TUNNEL_ENDPOINT = 'http://xxx.maxcompute.aliyun.com', PROJECT_NAME = 'mysqltest_regression_sqlqa', QUOTA_NAME = '', COMPRESSION_CODE = '' );HMSタイプのExternal Catalogを作成します。SIMPLE認証のHMS Catalogを作成します。通常認証モードで、Location認証の設定は不要です。
obclient> CREATE EXTERNAL CATALOG test_hms_catalog PROPERTIES = ( TYPE = 'HMS', URI = "thrift://xxx.xxx.xxx.xxx:xxxx" );Kerberos認証のHMS Catalogを作成します。
obclient> CREATE EXTERNAL CATALOG test_hms_catalog_kerberos PROPERTIES = ( TYPE = 'HMS', URI = "thrift://xxx.xxx.xxx.xxx:xxxx", PRINCIPAL = "hive/xxx@xxx.COM", KEYTAB = "/xxx/xxx/xxx/hadoop.keytab", KRB5CONF = "/etc/xxx.conf" );
Location認証
OceanBaseデータベースのHMS Catalogは、External Locationを通じてキーを管理し、外部ストレージへのセキュアなアクセスを実現します。HMS内のテーブルにアクセスする際、システムはテーブルパスに基づいて対応するExternal Locationを自動的にマッチングし、マッチした場合はそのキーを用いて認証アクセスを行います。
Location認証のシナリオ
ストレージタイプとセキュリティ要件に基づき、Location認証は以下のシナリオに分類されます:
ストレージタイプ |
認証方式 |
|---|---|
| OSS | AK/SK認証。 |
| HDFS | HDFSには以下の認証方式があります:
|
手順
Location認証のシナリオを決定します。
ストレージタイプとセキュリティ要件に基づいて、対応する認証シナリオを選択します。
Locationオブジェクトを作成します。
CREATE LOCATIONステートメントを使用して、対応するシナリオのLocationオブジェクトを作成します。Locationの作成方法の詳細については、CREATE LOCATIONを参照してください。Catalogを関連付けます。
Catalogを作成する際に追加の設定は不要で、システムは対応するテーブルのストレージパスに基づいてLocationを自動的にマッチングします。
Location認証シナリオの設定例
OSSストレージ認証
Alibaba Cloud OSSオブジェクトストレージアクセスに適用されるLocationオブジェクトを作成します。
CREATE LOCATION oss_credential
URL = 'oss://bucket-name/path'
CREDENTIAL = (
ACCESSID = 'your-access-key-id'
ACCESSKEY = 'your-access-key-secret'
HOST = 'oss-region.aliyuncs.com'
);
HDFSストレージ認証
シナリオ1:認証なしモード。
Locationを作成する必要はありません。HDFSクラスタでKerberos認証が有効化されていない(つまり
hadoop.security.authentication=simpleの場合)開発またはテスト環境に適用されます。シナリオ2:ユーザー認証モード。
Kerberosは不要ですが、特定のHDFSユーザーとしてアクセスする必要があります。
説明
Kerberos権限認証が有効になっていないクラスタに適用されますが、関連するHDFSパスに特定のユーザーでないとアクセスできないシナリオ。
Locationの作成:HDFSユーザーを指定します。
CREATE LOCATION hdfs_user URL = 'hdfs://namenode:8020/' CREDENTIAL ( USER = 'hdfs_user_name' );シナリオ3:Kerberosを有効にし、HDFSは単一NameNode(非HAモード)です。
説明
CONFIGS内のdfs.data.transfer.protectionは、HDFSクラスタの設定と一致している必要があります。Locationの作成:Kerberos認証 + 単一ポイントHDFS。
CREATE LOCATION hdfs_kerberos_single URL = 'hdfs://namenode.example.com:8020/' CREDENTIAL ( PRINCIPAL = "hdfs/xxx@xxx.COM", KEYTAB = "/data/hdfs.keytab", KRB5CONF = "/data/krb5.conf", CONFIGS = 'dfs.data.transfer.protection=integrity' );シナリオ4:Kerberosを有効にし、HDFSは高可用性(HA)モードです。
CREATE LOCATION hdfs_kerberos_ha URL = 'hdfs://${nameservice id}' CREDENTIAL ( PRINCIPAL = "hdfs/xxx@xxx.COM", KEYTAB = "/etc/ob/hdfs.keytab", KRB5CONF = "/etc/krb5.conf", CONFIGS = 'dfs.data.transfer.protection=${string}#dfs.nameservices=${nameservice id}#dfs.ha.namenodes.${nameservice id}=${namenode1}, ${namenode2}#dfs.namenode.rpc-address.${nameservice id}.${namenode1}=${namenode 1 address}#dfs.namenode.rpc-address.${nameservice id}.${namenode2}=${namenode 2 address}#dfs.ha.automatic-failover.enabled.${nameservice id}=true#dfs.client.failover.proxy.provider.${nameservice id}=org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider' );シナリオ5:Kerberosは有効化されていませんが、HDFSは高可用性(HA)モードです。
説明
Kerberosは有効化されていませんが、HDFSは高可用性(HA)モードなので、
PRINCIPAL、KEYTAB、KRB5CONFパラメータは設定不要です。CREATE LOCATION hdfs_location_ha URL = 'hdfs://${nameservice id}' CREDENTIAL ( CONFIGS = 'dfs.nameservices=${nameservice id}#dfs.ha.namenodes.${nameservice id}=${namenode1}, ${namenode2}#dfs.namenode.rpc-address.${nameservice id}.${namenode1}=${namenode 1 address}#dfs.namenode.rpc-address.${nameservice id}.${namenode2}=${namenode 2 address}#dfs.ha.automatic-failover.enabled.${nameservice id}=true#dfs.client.failover.proxy.provider.${nameservice id}=org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider' );