跳到主要内容

创建数据源

在 NineData 中创建一个新的数据源连接配置。

请求地址:/openapi/v1/datasource/create

请求方法:POST

请求参数

参数类型是否必选说明示例
datasourceTypeString数据源类型。必须传入下表中的枚举值;具体值是否可用取决于目标 NineData 环境当前启用的类型。mysql
nameString指定数据源名称。示例 MongoDB
usernameString条件必填数据库账号;具体必填条件取决于数据源类型和认证方式,详见账号和密码必填条件<username>
passwordString条件必填数据库密码;必填条件与 username 相同,详见账号和密码必填条件<password>
hostString单机模式传 IP 或域名;副本集或分片集群传 host1:port1,host2:port2<DB_HOST>
portInteger单机模式必填;副本集或分片集群模式不传,端口信息写入 host27017
envIdString所属环境。可通过查询环境信息获取。<envId>
regionIdString为该数据源指定所属地域。您需要调用查询地区信息接口获取 regionId<regionId>
networkTypeString连接方式。不传时默认为 public;可选值:publicgatewayprivatesshpublic
masterNameString主节点名称,适用于包含主节点的数据源。master-1
hostAndPortsString逗号分隔的多节点 host:port 组合,例如 Redis Sentinel 或 Cluster。host1:port1,host2:port2
instanceIdStringcloudInstanceType=instance 时必填。<instanceId>
instanceTypeString云实例类型。可选值:ECSEC2RDSExpressPolardbPolardbXDRDSTDSQLGaussDBDDSAuroraRedisKafkaElasticsearchADBDorisSCSMongoDBDocumentDBRedshiftclickhouseGaiaDBGaiaDBXOceanBaseVectorDBVastBaseGoldenDBCloudSQLAlloyDBGoogleCloudRDS
cloudInstanceTypeString云实例接入方式。可选值:instanceurlinstance
vendorRegionIdString云厂商地域 ID。cn-hangzhou
serverVersionString数据源服务版本。8.0
gatewayIdStringnetworkType=gateway 时传入。<gatewayId>
tunnelIdStringnetworkType=private 时通常传入;当前接口未强制校验。<tunnelId>
accessIdString云厂商访问凭证 ID;云环境 API 调用时使用。<accessId>
envString环境标识,由请求参数决定。<environment>
sshConfigObjectnetworkType=ssh 时必填,用于指定 SSH 连接配置。字段结构见 SSHConfig 结构{}
extraConfigObject数据源专属配置。不同类型数据源的专有参数放在该对象中,详见下文。{"authDB":"admin"}

参数必填规则

是否必选列说明接口的通用请求要求;数据源类型和连接方式会进一步决定条件字段。请仅传入当前场景需要的字段:

场景必填字段或传参规则
所有创建请求datasourceTypenamedatasourceType 还必须是目标 NineData 环境当前启用的枚举值。
使用单机模式连接hostport 必填。
使用副本集或分片集群模式连接host 必填,并在其中按 host1:port1,host2:port2 传入节点和端口;不传 port
networkType 未传public 处理。
networkType=gateway传入 gatewayId
networkType=private通常传入 tunnelId;当前接口未强制校验,缺省时可能按直连处理。
networkType=sshsshConfig 必填。
cloudInstanceType=instanceinstanceId 必填。
使用云环境 API按目标云环境传入 accessId;DataHub 类型会使用该凭证的 AccessKey 和 AccessKeySecret 作为账号密码。
需要指定环境或地域传入 envIdregionId;不传 envId 时默认使用 env-dev,该环境不存在时校验失败。

未触发条件的字段不要使用空字符串代替。账号密码、SSH 凭证和云厂商凭证分别放入对应字段,不要混用。

datasourceType 支持的枚举值如下:

数据源datasourceType
MySQLmysql
SQL Serversqlserver
Oracleoracle
PostgreSQLpostgresql
ClickHouseclickhouse
Elasticsearchelasticsearch
OpenSearchopensearch
Trinotrino
ShardingJDBCsharding_jdbc
ShardingProxysharding_proxy
Kafkakafka
Redisredis
MongoDBmongodb
Dorisdoris
SelectDBselectdb
StarRocksstarrocks
OceanBase Oracleoceanbaseoracle
OceanBase MySQLoceanbasemysql
Amazon Redshiftredshift
Greenplumgreenplum
YMatrixymatrix
DB2db2
SingleStoresinglestore
Klustronklustron
Kingbasekingbase
Kingbase Oraclekingbaseoracle
Dameng(达梦)dameng
DWSdws
Hivehive
ADB PostgreSQLadbpostgresql
openGaussopengauss
GaussDBgaussdb
PanWeiDBpanweidb
GBasegbase
GBase 8agbase8a
TiDBtidb
Sybasesybase
GreatSQLgreatsql
TDSQL MySQLtdsqlmysql
TDSQL Oracletdsqloracle
DataHubdatahub
ElastiCacheelasticache
VectorDBvectordb
VastBasevastbase
Lindorm MySQLlindormmysql
GoldenDBgoldendb
PegaDBpega
Milvusmilvus
Chromachroma
Qdrantqdrant
Pineconepinecone
Weaviateweaviate
MariaDBmariadb
PolarDB Oraclepolardboracle
PolarDB-Xpolardbx
PolarDB-X Centralizedpolardbxcentralized
DRDSdrds
SQL Databasesqldatabase
Memorystorememorystore
HANAhana
YashanDByashandb
YashanDB MySQLyashandbmysql
MaxComputemaxcompute
HaishanDBhaishandb

可用的数据源类型随版本和部署环境而异。传入目标环境未启用的值时,接口返回 INVALID_PARAMETER

数据源类型与 extraConfig 明细

datasourceType 决定 extraConfig 中可使用的专有字段。下表列出参考附录中已确认的映射; 表示该类型没有专有 extraConfig 字段。具体类型是否可用,以目标 NineData 环境当前启用的类型为准。

数据源类型(datasourceTypeextraConfig 专有字段
MySQL(mysqlmysqlConnectionType
Oracle(oracleserviceNamesidrole
PostgreSQL(postgresqlauthDBclientTimezone
Kafka(kafkakafkaAuthorization
Redis(redisredisDeploymentType;哨兵模式的 masterName 是顶层字段,不属于 extraConfig
MongoDB(mongodbmongoDBDeploymentTypeauthDBreadPreferenceserverSelectionTimeoutMScluster
Doris(doris)、SelectDB(selectdb)、StarRocks(starrocksdorisUserBeHostPorts
OceanBase Oracle(oceanbaseoracleserviceNamesidsysTenantUsernamesysTenantPassword
OceanBase MySQL(oceanbasemysqlmysqlConnectionTypesysTenantUsernamesysTenantPassword
Amazon Redshift(redshiftauthDB
Greenplum(greenplumauthDB
DB2(db2dbName
GaussDB(gaussdbgaussDBInstanceTypegaussDBBigVersion
GBase(gbaseserverName
GBase 8a(gbase8aconnectionTypehost
MariaDB(mariadbmysqlConnectionType
PolarDB Oracle(polardboracleclientTimezone
PolarDB-X(polardbxmysqlConnectionTypeclientTimezone
PolarDB-X Centralized(polardbxcentralizedmysqlConnectionType
DRDS(drdsmysqlConnectionType
Memorystore(memorystoreredisDeploymentType
HANA(hanadatabaseName
YashanDB(yashandbserviceNamesid
Hive(hivehadoopAuthConfig
其他当前支持类型;按顶层字段和目标环境接口校验结果传参

补充说明:当前环境的 GET /openapi/v1/datasource/list 只读响应中,部分类型还会返回版本或类型专属字段,例如 useCompressionbeHostsEnabledorisMapping;SSL 响应中还可能出现 tlsAllowInvalidCertificatestlsAllowInvalidHostnamestlsInsecure。这些字段属于响应扩展,不纳入本文通用创建请求字段清单;如需传入创建接口,请先以目标环境的接口定义为准。

extraConfig 对象结构

extraConfig 是 JSON Object,键名区分大小写。创建数据源时按 datasourceType 传入对应的专有字段。

参数类型是否必选说明
clientTimezoneString客户端时区,例如 +08:00-05:00
mysqlConnectionTypeStringMySQL 连接方式。可选值:
  • single:单机直连,写法为 <DB_HOST> + port
  • failover:MySQL 容灾连接,自动切换可用节点,写法为 <HOST_1>:<PORT_1>,<HOST_2>:<PORT_2>
  • replication:MySQL 读写分离连接,写法为 <HOST_1>:<PORT_1>,<HOST_2>:<PORT_2>
mongoDBDeploymentTypeStringMongoDB 部署方式。取值:standalonereplicaSetshardedCluster,默认 standalone
authDBString条件必填MongoDB 的认证库;PostgreSQL、Greenplum、Amazon Redshift 的默认数据库。MongoDB 创建时必填。
readPreferenceStringMongoDB 读偏好。取值:primaryprimaryPreferredsecondarysecondaryPreferrednearestdefault
serverSelectionTimeoutMSIntegerMongoDB 服务选择超时时间,默认 10000
redisDeploymentTypeStringRedis 部署方式。取值:singlesentinelcluster
kafkaAuthorizationStringKafka 认证方式。取值:PLAINTEXTSASL/PLAINSASL/SCRAM-SHA-256SASL/SCRAM-SHA-512
serviceNameString条件必填Oracle 服务名。与 sid 二选一。
sidString条件必填Oracle SID。与 serviceName 二选一。
roleStringOracle 权限角色。取值:SYSDBASYSOPERdefault
dbNameStringDB2 数据库名。
databaseNameString数据库名,适用于需要在 extraConfig 中指定数据库名的数据源。
gaussDBInstanceTypeStringGaussDB 实例类型。取值:centralizeddistributed
gaussDBBigVersionStringGaussDB 大版本。取值:GaussDB 8.xGaussDB 3.x
serverNameStringGBase 服务名,默认 gbaseserver
clientCharsetString客户端字符集。
connectionTypeStringGBase 8a 连接方式。取值:standalonemulti,兼容旧值 single;主从模式必填。
hostStringGBase 8a connectionType=multi 时的备节点地址,多个地址使用分号(;)分隔。
sysTenantUsernameString条件必填OceanBase 系统租户账号。
sysTenantPasswordString条件必填OceanBase 系统租户密码。
dorisUserBeHostPortsArrayDoris、SelectDB 或 StarRocks 的 BE 节点列表。元素结构为 {"host":"<BE_HOST>","port":"8040"}
hadoopAuthConfigObject条件必填Hive 认证配置。authMethod=KERBEROS 时,在该对象中传入 Kerberos 认证信息,顶层 usernamepassword 可不传。
clusterObjectMongoDB 集群拓扑。包含 clusterId 和必填的 nodeList,结构见下文。

Redis 和 Kafka 的特殊规则:

  • redisDeploymentType=sentinel 时,顶层 masterName 必填,host 传哨兵节点地址列表。
  • redisDeploymentType=cluster 时,host 传集群节点地址列表,port 可以不传。
  • kafkaAuthorizationSASL/PLAINSASL/SCRAM-SHA-256SASL/SCRAM-SHA-512 时,顶层 usernamepassword 用作 Kafka 认证账号密码;取值为 PLAINTEXT 或不传时,可以不传顶层账号密码。

extraConfig.cluster 结构

参数类型是否必选说明
clusterIdString集群 ID。
nodeListArray集群节点列表。

nodeList 元素结构如下:

参数类型是否必选说明
nodeIdString节点 ID。
nodeHostString节点地址。
nodePortInteger节点端口。
connectHostString可连接地址,缺省使用 nodeHost
connectPortInteger可连接端口,缺省使用 nodePort
usernameString节点账号。

SSHConfig 结构

networkType=ssh 时,在顶层 sshConfig 中传入 SSH 隧道配置。sshAuthTypepassword 时,sshPassword 必填;取 privateKey 时,sshPrivateKey 必填。

参数类型是否必选说明
sshHostStringSSH 主机。
sshPortIntegerSSH 端口,默认 22
sshUsernameStringSSH 用户名。
sshAuthTypeStringSSH 认证方式。取值:passwordprivateKey
sshPasswordString条件必填sshAuthType=password 时必填,表示 SSH 密码。
sshPrivateKeyString条件必填sshAuthType=privateKey 时必填,表示 SSH 私钥内容。
sshPrivateKeyFileNameStringSSH 私钥文件名。
sshPassphraseStringSSH 私钥口令。未设置口令时留空。
jumpServerListArray跳板机列表,元素结构与本对象相同。

SSH 私钥认证示例:

{
"networkType": "ssh",
"sshConfig": {
"sshHost": "<SSH_HOST>",
"sshPort": 22,
"sshUsername": "<SSH_USERNAME>",
"sshAuthType": "privateKey",
"sshPrivateKey": "<SSH_PRIVATE_KEY>",
"sshPrivateKeyFileName": "id_rsa",
"sshPassphrase": "<SSH_PASSPHRASE>"
}
}

账号和密码必填条件

usernamepassword 是数据库或数据源认证账号密码;SSH 账号密码应放在 sshConfig 中。创建请求需要根据数据源类型和认证方式传入:

场景username/password 必填条件
MySQL、MariaDB、TiDB、OceanBase MySQL、TDSQL MySQL、PolarDB-X、PolarDB-X Centralized、DRDS、SingleStore、GBase 8a、GreatSQL、GoldenDB、Lindorm MySQL、PostgreSQL、Greenplum、Amazon Redshift、SQL Server、Oracle、OceanBase Oracle、Dameng、YashanDB、DB2、HANA、GaussDB、DWS、GBase、Sybase、Doris、SelectDB、StarRocks、Kingbase、Kingbase Oracle创建时必填。
MongoDB创建时必填;认证库通过 extraConfig.authDB 指定。
Redis、ElastiCache、Memorystore、PegaDB使用账号认证时必填;无认证时可不传。
KafkakafkaAuthorizationSASL/PLAINSASL/SCRAM-SHA-256SASL/SCRAM-SHA-512 时必填;为 PLAINTEXT 时可不传。
HivehadoopAuthConfig.authMethod=KERBEROS 时,顶层 usernamepassword 可不传;其他认证方式按目标认证配置填写。
Elasticsearch、ClickHouse、Trino、ShardingJDBC 等按目标数据源认证方式填写;不启用认证时可不传。

不满足当前数据源类型认证条件时,接口可能返回参数校验错误。不要使用空字符串代替未使用的账号密码,也不要将 SSH 密码放入顶层 password

MongoDB 单机版 extraConfig 参数

创建 MongoDB 单机数据源时,在 extraConfig 中传入以下字段。

参数类型是否必选说明示例
mongoDBDeploymentTypeStringMongoDB 部署类型,单机模式传入 standalonestandalone
authDBString认证数据库。admin

请求示例

以下示例按通过网关访问非公网数据库编写。若目标数据库可从 NineData 公网直接访问,将 networkType 改为 public 并移除 gatewayId;网络类型必须与实际地址和网络配置匹配。

MongoDB 单机版:

{
"name": "示例 MongoDB",
"username": "<username>",
"password": "<password>",
"host": "<DB_HOST>",
"port": 27017,
"datasourceType": "mongodb",
"regionId": "<regionId>",
"envId": "<envId>",
"networkType": "gateway",
"gatewayId": "<gatewayId>",
"extraConfig": {
"mongoDBDeploymentType": "standalone",
"authDB": "admin"
}
}

MySQL:

{
"name": "示例 MySQL",
"username": "<username>",
"password": "<password>",
"host": "<DB_HOST>",
"port": 3306,
"datasourceType": "mysql",
"regionId": "<regionId>",
"envId": "<envId>",
"networkType": "gateway",
"gatewayId": "<gatewayId>"
}

PostgreSQL:

{
"name": "示例 PostgreSQL",
"username": "<username>",
"password": "<password>",
"host": "<DB_HOST>",
"port": 5432,
"datasourceType": "postgresql",
"regionId": "<regionId>",
"envId": "<envId>",
"networkType": "gateway",
"gatewayId": "<gatewayId>",
"extraConfig": {
"authDB": "<DATABASE_NAME>",
"clientTimezone": "+08:00"
}
}

Oracle(SERVICE_NAME):

{
"name": "示例 Oracle",
"username": "<username>",
"password": "<password>",
"host": "<DB_HOST>",
"port": 1521,
"datasourceType": "oracle",
"regionId": "<regionId>",
"envId": "<envId>",
"networkType": "gateway",
"gatewayId": "<gatewayId>",
"extraConfig": {
"serviceName": "<SERVICE_NAME>"
}
}

返回参数

参数类型说明示例
successBool接口调用是否成功。返回值:truefalsetrue
requestIdString请求 ID。<requestId>
dataObject创建的数据源详情,包含数据源 ID(datasourceId)信息。{"datasourceId":"<datasourceId>"}

调用成功示例

{
"success": true,
"requestId": "<requestId>",
"data": {
"datasourceId": "<datasourceId>"
}
}