跳到主要内容

创建数据源

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

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

请求方法:POST

请求参数

参数类型是否必选说明示例
datasourceTypeString数据源类型。必须传入下表中的枚举值;具体值是否可用取决于目标 NineData 环境当前启用的类型。mysql
nameString指定数据源名称。示例 MongoDB
usernameString条件必填使用数据库账号认证时必填;具体要求取决于数据源类型和认证方式。<username>
passwordString条件必填使用数据库账号认证时必填;具体要求与 username 相同。<password>
hostString条件必填使用连接地址接入时必填;云数据源通过实例 ID 接入时使用 instanceId,不传 host<DB_HOST>
portInteger条件必填使用 host 接入且目标类型需要端口时必填;实例 ID、URL 或多节点 hostAndPorts 模式按对应字段传入。27017
envIdString所属环境。可通过查询环境信息获取。<envId>
regionIdString为该数据源指定所属地域。您需要调用查询地区信息接口获取 regionId<regionId>
networkTypeString条件必填连接方式。取值:publicgatewaysshprivate;与 gatewayIdtunnelIdsshConfig 联动。public
masterNameString主节点名称,适用于包含主节点的数据源。master-1
hostAndPortsString逗号分隔的多节点 host:port 组合,例如 Redis Sentinel 或 Cluster。host1:port1,host2:port2
instanceIdString条件必填选择云数据源实例 ID 接入时必填;该模式下使用实例 ID,不传 hostport<instanceId>
instanceTypeString条件必填使用云数据源实例接入时必填,用于指定云实例类型。RDS
cloudInstanceTypeString条件必填使用云数据源时必填,用于指定实例 ID 或连接地址等接入模式。instance
vendorRegionIdString条件必填使用云数据源时必填,用于指定云厂商地域。cn-hangzhou
serverVersionString数据库服务版本。8.0
gatewayIdString条件必填networkTypegateway 时必填。<gatewayId>
tunnelIdString条件必填networkTypeprivate 时必填,用于指定私网连接。<tunnelId>
accessIdString条件必填使用云数据源时必填,用于指定云厂商访问凭证。<accessId>
envString环境标识,由请求参数决定。<environment>
sshConfigObject条件必填networkTypessh 时必填,用于指定 SSH 连接配置。字段结构见 SSHConfig 结构{}
sslConfigObjectSSL 加密传输配置。支持的字段和数据源类型见 SSLConfig 结构{"securityConfig":"REQUIRED"}
extraConfigObject数据源专属配置。不同类型数据源的专有参数放在该对象中,详见下文。{"authDB":"admin"}

参数必填规则

是否必选列说明通用请求要求;实际请求还要根据 datasourceTypenetworkType 和接入模式组合字段。请仅传入当前场景需要的字段:

场景必填字段或传参规则
所有创建请求datasourceTypenamedatasourceType 还必须是目标 NineData 环境当前启用的枚举值。
使用连接地址接入host 必填;目标数据源需要端口时,port 必填。使用 URL 或多节点地址时,按数据源类型传入 hosthostAndPorts 等对应字段。
使用云数据源实例 ID 接入accessIdvendorRegionIdinstanceTypecloudInstanceTypeinstanceId 必填;该模式不传 hostport
使用数据库账号认证usernamepassword 同时必填。若目标数据源的认证方式不需要数据库账号密码,则按该数据源类型的要求省略。
networkType=gatewaygatewayId 必填。
networkType=privatetunnelId 必填。
networkType=sshsshConfig 必填。
需要指定环境或接入地域传入 envIdregionId。当前控制台创建数据源表单会要求选择环境和接入地域;使用 API 时请按目标环境的接口校验结果传入。

未触发条件的字段不要使用空字符串代替,也不要同时传入互斥的接入字段。例如,使用 instanceId 接入时不要再传 hostport;使用 gatewayprivatessh 时,分别只传对应的连接配置。

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节点账号。

SSLConfig 结构

sslConfig 用于配置 SSL 加密传输。当前附录确认 MySQL、SQLServer、PostgreSQL 支持该对象;不同数据源类型支持的字段不同。证书和私钥字段应传入文件内容及对应文件名,示例中的证书内容均为占位符。

参数类型是否必选适用数据源说明
securityConfigStringMySQL、PostgreSQLSSL 安全模式。MySQL 取值:REQUIREDPREFERRED;PostgreSQL 取值:PreferRequireVerify-CAVerify-Full
sslCipherStringMySQL加密套件。
sslCAStringMySQL、SQLServer、PostgreSQLCA 证书内容。
sslCAFileNameStringMySQL、SQLServer、PostgreSQLCA 证书文件名。
sslClientCertStringMySQL、PostgreSQL客户端证书内容。
sslClientCertFileNameStringMySQL、PostgreSQL客户端证书文件名。
sslClientKeyStringMySQL、PostgreSQL客户端私钥内容。
sslClientKeyFileNameStringMySQL、PostgreSQL客户端私钥文件名。
sslIndentifyBooleanMySQL是否校验服务器身份。字段名必须使用接口定义的 sslIndentify
hostNameInCertificateStringSQLServer服务器证书中的主机名。
trustServerCertificateBooleanSQLServer是否信任服务器证书。

MySQL SSL 配置示例:

{
"sslConfig": {
"securityConfig": "REQUIRED",
"sslIndentify": true,
"sslCA": "-----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----",
"sslCAFileName": "ca.pem",
"sslClientCert": "-----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----",
"sslClientCertFileName": "client-cert.pem",
"sslClientKey": "-----BEGIN PRIVATE KEY----- ... -----END PRIVATE KEY-----",
"sslClientKeyFileName": "client-key.pem"
}
}

SQLServer SSL 配置示例:

{
"sslConfig": {
"hostNameInCertificate": "db.example.com",
"trustServerCertificate": false,
"sslCA": "-----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----",
"sslCAFileName": "ca.pem"
}
}

PostgreSQL SSL 配置示例:

{
"sslConfig": {
"securityConfig": "Verify-Full",
"sslCA": "-----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----",
"sslCAFileName": "root.crt",
"sslClientCert": "-----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----",
"sslClientCertFileName": "client.crt",
"sslClientKey": "-----BEGIN PRIVATE KEY----- ... -----END PRIVATE KEY-----",
"sslClientKeyFileName": "client.key"
}
}

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>"
}
}