説明
このステートメントは、データベース内に外部データカタログ(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 | オプションです。この句を指定すると、作成対象の外部データカタログが現在のテナント内に既に存在してもエラーは発生せず、システムからWarningメッセージが表示されます。指定しない場合はエラーが発生します。 |
| 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サービスへのアクセストークンです。ENDPOINT:MaxComputeのEndPoint(ドメインノード)を指定するために使用されます。TUNNEL_ENDPOINT:Tunnel Endpointを指定するために使用されます。MaxCompute CatalogはTunnel SDKを使用してデータを取得します。PROJECT_NAME:MaxCompute内のプロジェクトスペース名を指定するために使用されます。プロジェクトスペース(Project)はMaxComputeの基本的な組織単位であり、従来のデータベースのデータベースまたはスキーマの概念に相当します。QUOTA_NAME:オプションです。Quotaを指定するために使用されます。MaxComputeにおいて、Quotaは計算リソースプール(計算、アクセス、書き込み)を表します。ユーザーが対応する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' );