説明
このステートメントは、Locationオブジェクトを作成するために使用されます。Locationオブジェクトは、外部テーブルや一時外部テーブルがアクセスするパスと認証情報を格納し、データベースが外部データの読み書きを行う際に利用されます。
説明
OceanBaseデータベースV4.4.x系では、V4.4.1バージョンから CREATE LOCATION ステートメントがサポートされています。
権限要件
実行権限:
CREATE LOCATIONステートメントを実行するには、現在のユーザーがCREATE LOCATION権限を持っている必要があります。OceanBaseデータベースの権限の詳細については、Oracleモードの権限分類を参照してください。認証資格情報権限:
提供された
ACCESSIDとACCESSKEYは、対象ストレージサービスへの合法的なアクセス権限を持っている必要があります。
構文
CREATE [OR REPLACE] LOCATION location_name
URL = 'file_path'
[CREDENTIAL = (
ACCESSID = 'string'
ACCESSKEY = 'string'
HOST = 'string'
[S3_REGION = 'string',]
[PRINCIPAL = 'string',]
[KEYTAB = 'string',]
[KRB5CONF = 'string',]
[CONFIGS = 'string',]
[USERNAME = 'string']
)
];
パラメータ説明
パラメータ |
説明 |
|---|---|
| OR REPLACE | オプションです。OR REPLACE を指定すると、対応するLocationオブジェクトが既に存在する場合、新しいLocationオブジェクトの定義で既存のものを置き換えます。 |
| location_name | 作成するLocationオブジェクトの名前を表します。 |
| URL = 'file_path' | 外部ストレージパスを指定するために使用されます。現在サポートされているストレージタイプは、ローカルファイル、HDFS、OSS、およびS3です。詳細については、以下の file_path を参照してください。 |
| CREDENTIAL | オプションです。パスへのアクセスに必要な情報を指定するために使用されます。ローカルパスの場合はこのパラメータは不要です。 |
| ACCESSID | オブジェクトストレージにアクセスするユーザーのAccessKey IDを指定するために使用されます。 |
| ACCESSKEY | オブジェクトストレージにアクセスするユーザーのAccessKey Secretを指定するために使用されます。 |
| HOST | オブジェクトストレージサービスのホストアドレスを指定するために使用されます。 |
| S3_REGION | オプションです。S3オブジェクトストレージのサービスリージョンを指定するために使用されます。 |
| PRINCIPAL | オプションです。ターゲットHDFSクラスタがKerberos環境を備えている場合、ログイン認証ユーザーを設定する必要があります。 |
| KEYTAB | オプションです。ターゲットHDFSクラスタがKerberos環境を備えている場合、認証キーファイルを設定する必要があります。 |
| KRB5CONF | オプションです。ターゲットHDFSクラスタがKerberos環境を備えている場合、ユーザーがKerberos環境を使用することを指定するために使用されます。 |
| CONFIGS | オプションです。ターゲットHDFSクラスタがKerberos環境を備えている場合、追加のHadoopクライアント構成パラメータを指定するために使用されます。key=value の形式で連結し、# で区切ります。詳細については、以下の configs_option を参照してください。 |
| USERNAME | オプションです。ターゲットHDFSクラスタがKerberos環境を備えている場合、ユーザーの身元を一意に識別するために指定する必要があります。 |
file_path
外部テーブルファイルの保存パスには、以下の形式があります:
ローカルパスの形式:
URL = '[file:// | sfile://] local_file_path'file://:このプロトコルヘッダーは、複数のOBServerノードで同じ論理パスのファイルに遭遇した場合、それぞれ異なるファイルとして扱われ、個別に処理されることを示します。各ノードは、ローカルパス下のファイルを独立して読み取ります。sfile://:このプロトコルヘッダーは、複数のOBServerノードで同じ論理パスのファイルに遭遇した場合、システムが論理パスに基づいて重複処理を行い、データを1部だけ読み取ることを保証します(マルチサーバーロードバランシングをサポート)。注意
sfile://を使用する場合、システムはファイルサイズの整合性検証を実行します。同一の論理パス下にあるファイルが異なるOBServerノード上でサイズが一致しない場合、システムはデータの不整合による結果の誤りを防ぐために、OB_INVALID_EXTERNAL_FILEエラーを返します。- V4.4.2バージョンでは、V4.4.2 BP2バージョンから
CREATE LOCATION構文のローカルURLパス形式にsfile://プロトコルヘッダーのサポートが追加されました。
local_file_path:相対パスまたは絶対パスを指定できます。
HDFSパス形式は次のとおりです:
URL = 'hdfs://localhost:port/PATH'。ここで、localhostはHDFSのアドレス、portはHDFSのポート番号、PATHはHDFS内のディレクトリパスを指します。オブジェクトストレージ(OSS/S3)パス形式は次のとおりです:
URL = '{oss | s3}://bucket/remote_file_path'。
注意
Locationオブジェクトを作成するパスには、パラメータを含めないでください。
configs_option
パラメータ |
機能 |
|---|---|
| dfs.data.transfer.protection=${string} | データブロックの読み書き時に使用するセキュア接続のSASL保護レベルを指定します。値は以下のとおりです:
|
| dfs.nameservices=${nameservice id} | 現在のHAクラスタの namesevice(エイリアス)を指定します。例えば、dfs.nameservices=mycluster は論理クラスタ名を mycluster と定義します。 |
| dfs.ha.namenodes.${nameservice id}=${namenode1}, ${namenode2} | HAクラスタのnamenodeスタンバイIDリストを指定します。例えば、dfs.ha.namenodes.mycluster=nn1,nn2 は、そのクラスタに2つのNameNode (nn1,nn2) があることを指定します。 |
| dfs.namenode.rpc-address.${nameservice id}.${namenode1}=${namenode 1 address} | namenode1 が具体的なnamenodeであることを設定し、クライアントのルーティングを容易にします。例えば、dfs.namenode.rpc-address.mycluster.nn1=test1:18020 は nn1 のRPCアドレスを表します。 |
| dfs.namenode.rpc-address.${nameservice id}.${namenode2}=${namenode 2 address} | namenode2 が具体的なnamenodeであることを設定し、クライアントのルーティングを容易にします。例えば、dfs.namenode.rpc-address.mycluster.nn2=test2:18020 は nn2 のRPCアドレスを表します。 |
| dfs.ha.automatic-failover.enabled=${nameservice id}=true | 自動フェイルオーバーを有効にすることを表します。つまり、HAクラスタが関連するリクエストを取得した後、利用可能なnamenodeを自動的に取得してサービス応答を行います。 |
| dfs.client.failover.proxy.provider=${nameservice id}=org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider | HAクラスタのプライマリ/スタンバイ切り替えを行うロジックツールクラスを指示します。また、HAクラスタが必要とするロジックなどをカスタマイズしてパッケージ化してアップロードすることもできます。 |
例
ローカルに保存場所を持つLocationオブジェクトを作成します。
obclient> CREATE LOCATION test_location_local URL = 'file://home/admin/test_csv';OSSに保存場所を持つLocationオブジェクトを作成します。
obclient> CREATE LOCATION test_location_oss URL = 'oss://dir' CREDENTIAL = ( ACCESSID = '******', ACCESSKEY = '******', HOST = '****' );ユーザー認証モードのLocationオブジェクトを作成します。
Kerberosは不要ですが、特定のHDFSユーザーとしてアクセスする必要があります。
説明
Kerberos権限認証が有効になっていないクラスタで、関連するHDFSパスが特定のユーザーでなければアクセスできないシナリオに適用されます。
CREATE LOCATION hdfs_user URL = 'hdfs://namenode:8020/' CREDENTIAL ( USER = 'hdfs_user_name' );Kerberosを有効にし、HDFSが単一NameNode(非HAモード)のLocationオブジェクトを作成します。
説明
CONFIGSのdfs.data.transfer.protectionは、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' );Kerberosを有効にし、HDFSを高可用性(HA)モードで作成するLocationオブジェクト。
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' );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' );
関連ドキュメント
- Locationオブジェクト配下のファイルの情報を確認する方法については、SHOWを参照してください。
- Locationオブジェクトを変更する方法については、ALTER LOCATIONを参照してください。
- Locationオブジェクト配下のファイルを削除する方法については、REMOVEを参照してください。
- Locationオブジェクトを削除する方法については、DROP LOCATIONを参照してください。