---
title: "CREATE LOCATION - OceanBase 数据库 V4.5.0 | OceanBase 文档中心"
description: CREATE LOCATION 描述 该语句用于创建一个 Location 对象。Location 对象用于存储外表、临时外表所访问的路径和鉴权信息，供数据库读取或写入外部数据。 说明 对于 OceanBase 数据库 V4.4.x 版本，从 V4.4.1 版本开始支持 CREATE LOCATION 语句。 权限要…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.5.0

# CREATE LOCATION

更新时间：2026-04-24 14:12:15

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.5.0/zh-CN/700.reference/500.sql-reference/100.sql-syntax/200.common-tenant-of-mysql-mode/600.sql-statement-of-mysql-mode/2230.create-location-of-mysql-mode-in-sql.md)  

## 描述

该语句用于创建一个 Location 对象。Location 对象用于存储外表、临时外表所访问的路径和鉴权信息，供数据库读取或写入外部数据。

#### 说明

对于 OceanBase 数据库 V4.4.x 版本，从 V4.4.1 版本开始支持 `CREATE LOCATION` 语句。

## 权限要求

- 执行权限：

  执行 `CREATE LOCATION` 语句，需要当前用户拥有 `CREATE LOCATION` 权限。有关 OceanBase 数据库权限的详细介绍，参见 [MySQL 模式下的权限分类](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004479241)。
 - 认证凭据权限：

  提供的 `ACCESSID` 和 `ACCESSKEY` 需具备目标存储服务的合法访问权限。

## 语法

```sql
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 对象定义。 |
| location_name | 表示要创建的 Location 对象的名称。 |
| URL = 'file_path' | 用于指定外部存储路径。当前支持的存储类型有：本地文件、HDFS、OSS 和 S3，详细介绍可参见下文 [file_path](#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](#configs_option)。 |
| USERNAME | 可选项，目标 HDFS 集群带 Kerberos 环境时，需要指定唯一标识用户身份。 |

### file_path

外表文件存放的路径有以下格式：

- 本地路径格式为：`URL = 'file://local_file_path'`，其中 `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 保护级别。取值如下：   - `integrity`：表示提供身份验证和完整性保护。 - `authentication`：表示仅提供身份验证功能，不提供完整性或隐私保护。 - `privacy`：表示提供身份验证、完整性和隐私保护。 |
| 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` 表示指定该集群有两个 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 对象。

  ```shell
  obclient> CREATE LOCATION test_location_local
      URL = 'file://home/admin/test_csv';

  ```
 - 创建存储位置在 OSS 的 Location 对象。

  ```shell
  obclient> CREATE LOCATION test_location_oss
      URL = 'oss://dir'
      CREDENTIAL = (
          ACCESSID = '******',
          ACCESSKEY = '******',
          HOST = '****'
      );

  ```
 - 创建用户认证模式的 Location 对象。

  无需 Kerberos，但需以特定 HDFS 用户身份访问。

  #### 说明

  适用于未开启 Kerberos 权限认证的集群，但相关 HDFS 路径需要特定用户才能访问的场景。

  ```shell
  CREATE LOCATION hdfs_user
      URL = 'hdfs://namenode:8020/'
      CREDENTIAL (
          USER = 'hdfs_user_name'
      );

  ```
 - 创建启用 Kerberos，HDFS 为单 NameNode（非 HA 模式）的 Location 对象。

  #### 说明

  `CONFIGS` 中的 `dfs.data.transfer.protection` 必须与 HDFS 集群配置一致。

  ```shell
  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 对象。

  ```shell
  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` 参数。

  ```shell
  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](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004479581)。
 - 关于修改 Location 对象的介绍信息，参见 [ALTER LOCATION](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004479601)。
 - 关于删除 Location 对象下文件的介绍信息，参见 [REMOVE](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004479602)。
 - 关于删除 Location 对象的介绍信息，参见 [DROP LOCATION](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004479572)。

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
