华为云数据仓库服务DWS对接使用完全指南:从集群创建到应用集成
前言:为什么需要了解DWS的对接使用
华为云数据仓库服务GaussDB(DWS)是一种基于华为云基础设施和平台的在线数据分析处理数据库,提供即开即用、可扩展且完全托管的分析型数据库服务。它兼容PostgreSQL/Oracle/Teradata/MySQL等数据库生态,为各行业PB级海量大数据分析提供有竞争力的解决方案。在实际生产环境中,DWS很少作为一个孤岛存在,它需要与各类业务应用、数据源、数据分析工具进行对接。无论是将业务数据导入DWS进行分析,还是将DWS中的分析结果提供给BI工具展示,都涉及DWS的对接使用问题。本文将从集群创建、连接配置、数据迁移、工具集成、API开发等多个维度,系统性地介绍DWS的对接使用方法。
需要先登录华为云控制台,点击:华为云控制台,还没有账号,点击:注册并关联,已有账号点击:登录后关联
一、DWS集群创建与基础配置
在使用DWS服务之前,首先需要创建一个DWS集群。一个DWS集群由多个在相同子网中的节点组成,共同提供服务。集群创建是后续所有对接操作的基础,因此在创建时需要合理规划网络、规格和存储等配置。
1.1 创建集群前的准备工作
在创建DWS集群之前,需要完成以下准备工作:已注册华为云账号并完成实名认证,账号不能处于欠费或冻结状态;获取账号的AK/SK访问密钥;已创建虚拟私有云VPC和子网。DWS集群不支持跨区域访问OBS桶数据,因此创建DWS集群前需要规划好DWS集群与OBS桶在同一个区域内。
1.2 集群创建步骤
登录DWS管理控制台,在购买页面进行基础配置。基础配置包括区域选择、计费模式、可用分区等。区域应就近选择靠近您业务的区域,可以降低网络时延、提高访问速度,DWS创建后无法更换区域。计费模式支持包年/包月和按需计费两种方式,如长期使用建议选择包年/包月以享受更大折扣。可用分区可选择单AZ或多AZ,对高可用要求更高的业务建议使用多AZ部署。完成基础配置后,还需要进行数据仓库配置,包括集群版本、节点规格、节点数量、存储容量等参数。
1.3 集群网络规划要点
网络规划直接关系到后续能否顺利连接DWS集群。业务应用与DWS进行通信的基本原则是确保业务应用所在网络与DWS的网络能连通。最理想的场景是业务应用与DWS在同一个区域内同一个VPC下,此时应用可以通过内网IP直接与DWS通信。例如,ECS部署在某个区域,则DWS选择在同一区域下,并保持与ECS在同一个VPC内,ECS的内网IP与DWS的内网IP即可直接通信。如果业务应用与DWS在同一个区域内但不同VPC下,则需要将两个VPC建立对等连接后,ECS才可通过DWS的内网IP进行访问。对于云下与云上的通信场景,可以使用DWS的公网IP或公网域名进行通信,也可以使用云专线进行通信。
二、DWS集群连接方式详解
DWS集群创建完成后,就可以使用SQL客户端工具或者JDBC/ODBC等第三方驱动程序连接集群中的数据库。DWS提供了多种连接方式,以适应不同的使用场景和开发需求。
2.1 使用gsql命令行客户端连接
gsql是DWS提供的与集群版本配套的Linux命令行客户端工具,可以通过集群的公网地址或者内网地址访问集群。gsql连接的基本命令格式为:
gsql -d <数据库名> -h <主机IP> -p <端口号> -U <用户名> -W <密码> -r其中-d指定要连接的数据库名称,-h指定DWS集群的主机IP地址(内网IP或公网IP),-p指定端口号(默认为8000),-U指定数据库用户名,-W指定密码,-r参数启用命令行编辑功能。以内网IP访问为例:
gsql -d gaussdb -h 192.168.120.2 -p 8000 -U dbadmin -W password -rgsql工具可以在DWS控制台的"连接客户端"页面下载,根据集群版本和操作系统选择对应的版本。
2.2 使用SQL编辑器连接
DWS控制台提供了内置的SQL编辑器,无需安装任何客户端工具即可在浏览器中连接DWS数据库并执行SQL查询。SQL编辑器适合快速验证和简单的数据操作场景,登录DWS管理控制台后,在集群列表页面点击指定集群的"SQL编辑器"即可进入。使用SQL编辑器连接DWS数据库后,可以创建OBS外表,通过OBS外表将OBS桶数据导入DWS集群。
2.3 使用JDBC驱动连接
JDBC是Java应用程序连接DWS最常用的方式。DWS支持两种JDBC驱动包:gsjdbc4.jar和gsjdbc200.jar。gsjdbc4.jar对应的驱动类为"org.postgresql.Driver",连接URL前缀为"jdbc:postgresql";gsjdbc200.jar对应的驱动类为"com.huawei.gauss200.jdbc.Driver",连接URL前缀为"jdbc:gaussdb"。JDBC驱动可以从DWS控制台的"连接客户端"页面下载。
以下是使用JDBC连接DWS的完整示例代码:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class DWSJDBCExample {
public static void main(String[] args) {
// 使用gsjdbc4.jar时的驱动类和连接URL
String driver = "org.postgresql.Driver";
String url = "jdbc:postgresql://192.168.0.77:8000/postgres";
// 如果使用gsjdbc200.jar,驱动类改为"com.huawei.gauss200.jdbc.Driver",
// URL前缀改为"jdbc:gaussdb"
String username = "dbadmin";
String password = "your_password";
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 1. 加载JDBC驱动
Class.forName(driver);
// 2. 建立数据库连接
conn = DriverManager.getConnection(url, username, password);
System.out.println("成功连接到DWS集群");
// 3. 创建Statement对象执行查询
stmt = conn.createStatement();
String sql = "SELECT * FROM your_table LIMIT 10";
rs = stmt.executeQuery(sql);
// 4. 处理查询结果
while (rs.next()) {
System.out.println("列1: " + rs.getString(1) + ", 列2: " + rs.getString(2));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 5. 关闭资源
try {
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (conn != null) conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}DWS还支持通过JDBC直接调用事先创建的存储过程,调用Connection的prepareCall方法创建调用语句对象:
CallableStatement cstmt = myConn.prepareCall("{? = CALL TESTPROC(?)}");另外,DWS JDBC驱动中的CopyManager类提供了批量导入数据的能力,适用于大批量数据写入场景。
2.4 使用ODBC驱动连接
对于C/C++等非Java应用程序,可以使用ODBC驱动连接DWS。DWS支持开源PostgreSQL客户端和ODBC驱动程序。在Linux系统下,常用的驱动管理器有unixODBC和iODBC。ODBC连接的基本流程包括:配置数据源名称(DSN)、调用SQLConnect建立连接、执行SQL语句等。
以下是ODBC连接的C语言示例代码框架:
#include <stdlib.h>
#include <sql.h>
#include <sqlext.h>
// 分配环境句柄、连接句柄
SQLHENV henv;
SQLHDBC hdbc;
SQLHSTMT hstmt;
// 初始化环境
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0);
SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
// 连接DWS数据源
retcode = SQLConnect(hdbc, (SQLCHAR*)dsn, SQL_NTS,
(SQLCHAR*)NULL, 0, NULL, 0);2.5 网络连通性检查
无论使用哪种连接方式,确保网络连通都是前提条件。检查通信的基本要点是ECS出方向规则和DWS入方向规则。ECS的安全组出方向规则需要放通,DWS创建时如果没有专门设置安全组,系统默认的安全组入规则已放通所有IPv4地址、端口为8000的TCP类型访问。为确保安全,也支持只开放某个对应的IP。登录ECS后能ping通DWS的内网IP,即表示网络连通。
三、数据导入与导出方案
数据仓库的核心价值在于对数据的分析处理,而数据导入是将业务数据送入DWS的第一步。DWS提供了多种数据导入导出方案,以适应不同的数据源类型、数据量和实时性要求。
3.1 通过OBS外表导入数据
OBS(对象存储服务)是华为云提供的海量、安全、高可靠的云存储服务。DWS支持通过OBS外表访问OBS桶中的数据,或将DWS表数据导出到OBS桶。这种方式适合将存储在OBS中的CSV、TXT等格式的批量数据导入DWS。
操作流程如下:首先创建OBS桶并将本地数据文件上传到OBS桶;然后在DWS中使用SQL编辑器或gsql客户端创建OBS外表;最后通过外表将数据导入到DWS的目标表中。DWS集群不支持跨区域访问OBS桶数据,创建DWS集群前需要规划好DWS集群与OBS桶在同一个区域内。
3.2 使用GDS并行导入
GDS(General Data Service)是一款运行在Linux操作系统的命令行工具,通过和外表机制的配合,实现数据的高速导入导出。GDS工具包需要安装在数据源文件所在的服务器上。这种方式适用于从远端服务器导入大量数据到DWS的场景,DWS支持通过GDS外表将TXT、CSV和FIXED格式的数据导入到集群进行查询。
使用GDS导入数据的基本步骤包括:在数据服务器上安装GDS工具包;准备数据源文件;创建外表用于对接GDS和DWS;启动DWS并创建数据库表后将数据导入。GDS服务器与DWS集群应处于同一区域、同一VPC和子网。生产环境下GDS服务器的推荐配置为:网络不低于10GE,CPU 16U,内存64G,存储不低于500GB。
3.3 使用CDM进行批量数据迁移
CDM(云数据迁移服务)是一种高效、易用的批量数据迁移服务,提供同构/异构数据源之间批量数据迁移的功能。CDM可以将其他数据源(例如MySQL、Oracle)的数据迁移到DWS集群的数据库中。CDM在迁移数据到DWS时,采用的是COPY方式和GDS并行导入方式。使用CDM迁移数据到DWS的典型场景包括:从本地MySQL数据库迁移到DWS、从Oracle迁移到DWS、从Hologres迁移到DWS等。CDM集群所在VPC、子网、安全组需要与DWS集群所在的网络一致。
3.4 使用DLI Flink实现实时数据同步
对于需要实时数据同步的场景,可以使用DLI(数据湖探索)服务的Flink作业将数据实时同步到DWS。例如,可以将MySQL数据实时同步到DWS。该实践的基本流程包括:准备MySQL数据源;创建DWS集群和目标表;创建DLI弹性资源池及队列;创建增强型跨源连接用于连接RDS和DWS;准备DWS对接Flink工具dws-connector-flink插件;创建DLI Flink SQL作业并配置SQL代码。在Flink跨源开发场景下,建议使用DLI提供的跨源认证功能,不要在作业脚本中直接指定MySQL和DWS的用户名和密码,以避免密码泄露风险。
3.5 使用DSC工具迁移SQL脚本
DSC(Database Schema Convertor)是一款运行在Linux或Windows操作系统上的命令行工具,通过内置的语法迁移逻辑解析源数据库应用程序SQL脚本,并迁移为适用于DWS数据库的应用程序SQL脚本。DSC不需要连接数据库,可在离线模式下实现零停机迁移。DSC支持迁移Teradata、Oracle、Netezza、MySQL和DB2数据库的SQL脚本。在DWS控制台的"连接客户端"页面可以下载DSC迁移工具。
四、第三方BI工具与数据治理平台对接
DWS兼容PostgreSQL/Oracle/Teradata/MySQL数据库生态,与主流第三方数据库ETL、BI工具厂商对接认证。这使得DWS可以无缝集成到企业现有的数据分析生态中。
4.1 Power BI对接
Power BI是微软推出的可视化数据探索和交互式报告工具。DWS对接Power BI的操作步骤包括:安装.NET Framework、Npgsql驱动和Power BI;在DWS中创建好对应的数据库、Schema、表、用户,并授权该用户访问表的权限;在Power BI中添加DWS数据源,配置连接信息后进行数据分析和可视化展示。
4.2 FineBI与FineReport对接
帆软软件的FineBI和FineReport是广泛使用的企业级报表和BI工具。华为云与帆软达成了生态、解决方案、产品等的全面合作,帆软产品与华为云DWS数据仓库无缝对接。FineBI支持华为云DWS数据源。在FineBI中对接DWS的操作步骤为:以管理员身份登录FineBI,点击"管理系统>数据连接>数据连接管理>新建",找到华为云DWS的图标;驱动切换为"自定义"并选择上传的DWS JDBC驱动,然后输入连接信息。
4.3 Tableau对接
DWS支持标准的JDBC接口,支持PG生态,可以与Tableau等第三方工具进行对接。通过JDBC驱动,Tableau可以连接到DWS并进行数据分析和可视化。
4.4 DataArts Studio数据治理集成
DataArts Studio是华为云提供的一站式数据治理平台。通过配置数据源信息,可以建立DataArts Studio与DWS的数据连接。DataArts Studio基于管理中心的数据连接对数据湖底座进行数据开发、治理、服务和运营。在创建DWS类型的数据连接前,需要先在DWS服务中创建集群,并且具有KMS密钥的查看权限。DataArts Studio提供可视化的ETL开发环境,可以无缝管理整个ETL流程。为了优化数据迁移和ETL流程,建议将CDM和DataArts Studio组合使用。
4.5 ROMA Connect集成
ROMA Connect是华为云的应用与数据集成平台,提供了DWS连接器用于连接DWS数据库,负责建立和维护应用程序与DWS数据库之间的连接,并管理数据的传输。在ROMA Connect中配置DWS连接器:登录ROMA Connect控制台,在左侧导航栏选择"连接器",单击"新建连接",选择"DWS"连接器。配置连接器信息包括连接名称、区域、项目、实例、主机IP地址、端口、数据库名、用户名和密码等。DWS连接器支持获取记录、添加记录、更新记录、删除记录等操作。
五、REST API与SDK开发调用
除了数据库连接方式外,DWS还提供了REST API接口和多种编程语言的SDK,用于实现集群管理、资源监控等运维操作。
5.1 REST API调用
DWS提供了丰富的OpenAPI接口,用于管理集群、查询规格信息、绑定ELB等操作。API的调用方法包括构造请求、认证授权、处理返回结果等步骤。以创建集群为例,该接口为异步接口,创建集群需要10到15分钟。调用API前需要先获取用户Token,并将其放入请求头中进行认证。使用Postman可以方便地调用DWS API进行集群创建等操作。
5.2 SDK开发
登录华为云API Explorer,选择"大数据>数据仓库服务"进入DWS OpenAPI页面,根据需求选择具体OpenAPI接口,切换至"代码示例"页签,选择指定编程语言,单击"华为云SDK"即可查看对应编程语言类型的SDK代码。DWS支持的SDK包括Java、Python、Go等多种语言。以下是通过SDK调用DWS API的Java代码示例框架:
import com.huaweicloud.sdk.core.auth.ICredential;
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.dws.v1.DwsClient;
import com.huaweicloud.sdk.dws.v1.model.*;
// 配置认证信息
ICredential credential = new BasicCredentials()
.withAk(ak)
.withSk(sk);
// 创建DWS客户端
DwsClient client = DwsClient.newBuilder()
.withCredential(credential)
.withRegion(region)
.build();
// 调用API查询集群列表
ListClustersRequest request = new ListClustersRequest();
ListClustersResponse response = client.listClusters(request);
System.out.println(response.toString());六、安全与权限管理
在生产环境中使用DWS,安全与权限管理是不可忽视的重要环节。
6.1 安全组与白名单配置
DWS集群的安全组控制着入方向和出方向的网络流量。默认情况下,DWS安全组的入规则已放通所有IPv4地址、端口为8000的TCP类型访问。在实际生产环境中,建议只开放业务应用对应的IP地址,而不是开放所有IP。通过配置安全组规则,可以精确控制哪些IP地址可以访问DWS集群。
6.2 数据库用户与权限管理
DWS支持细粒度的数据库用户和权限管理。在创建DWS集群时,系统会默认创建一个管理员用户(默认为dbadmin)。在实际使用中,应根据最小权限原则创建不同的数据库用户并分配不同的权限。例如,为数据迁移任务创建专用的迁移用户,为BI报表创建只读用户,为ETL作业创建读写用户等。
6.3 数据加密与传输安全
对于敏感数据,DWS支持数据加密存储。在创建DWS集群时可以选择启用磁盘加密,使用KMS(密钥管理服务)管理的密钥对数据进行加密。在数据传输方面,建议使用内网IP进行通信以保证数据传输的安全性和低延迟。如果必须通过公网访问,建议使用SSL加密连接。
七、常见问题与排障
7.1 连接失败排查思路
当无法连接到DWS集群时,可以按照以下思路排查:首先检查ECS出方向规则是否放通;然后检查DWS入方向规则是否正确配置;登录ECS尝试ping DWS的内网IP确认网络连通性;确认使用的JDBC/ODBC驱动版本与DWS集群版本兼容;确认连接URL中的IP地址、端口号、数据库名、用户名和密码正确无误。
7.2 性能优化建议
DWS的性能优化可以从多个维度入手:合理规划集群规格和节点数量,根据数据量和查询负载选择合适的资源配置;使用GDS等并行导入工具替代单条INSERT语句;合理设计表结构,选择合适的分区键和分布键;使用资源管理功能为不同作业绑定不同资源池,避免多用户查询作业相互影响。
7.3 数据迁移注意事项
在进行数据迁移时,需要注意以下几点:DWS集群与数据源应在同一区域以降低网络延迟;使用CDM迁移时,CDM集群的网络配置需与DWS集群一致;大批量数据迁移建议使用GDS或CDM的GDS并行导入模式;迁移前应在DWS中创建好目标表结构,确保字段类型匹配。
总结
华为云数据仓库服务DWS提供了丰富灵活的对接方式,从基础的JDBC/ODBC数据库连接,到高效的GDS并行导入、CDM批量迁移,再到与Power BI、FineBI等第三方BI工具的无缝集成,以及REST API和SDK的开发支持,几乎覆盖了企业数据仓库建设中的所有对接场景。在实际使用中,应根据具体的业务需求、数据量大小、实时性要求和现有技术栈,选择最合适的对接方案。合理的网络规划、安全配置和性能优化是确保DWS稳定高效运行的关键。
常见问题解答
问1:DWS支持哪些连接方式?
答:DWS支持多种连接方式,包括gsql命令行客户端、内置SQL编辑器、JDBC驱动、ODBC驱动等。JDBC驱动支持gsjdbc4.jar和gsjdbc200.jar两种包。此外还支持通过REST API和SDK进行集群管理操作。
问2:ECS无法连接到DWS集群怎么办?
答:首先检查ECS安全组的出方向规则是否放通;其次检查DWS安全组的入方向规则是否正确,默认端口为8000;确认ECS和DWS是否在同一个VPC内,如果不在需要配置VPC对等连接;登录ECS尝试ping DWS的内网IP确认网络连通性。
问3:如何将大量数据快速导入DWS?
答:DWS提供了多种高效数据导入方式。对于OBS上的数据,可以通过创建OBS外表进行导入。对于远端服务器上的数据,可以使用GDS工具进行并行导入。对于异构数据源迁移,可以使用CDM服务进行批量迁移。对于实时数据同步,可以使用DLI Flink作业。
问4:DWS可以与哪些第三方BI工具对接?
答:DWS兼容PostgreSQL生态,可以与主流BI工具对接。包括微软Power BI、帆软FineBI和FineReport、Tableau、永洪BI、Quick BI等。
问5:DWS的JDBC连接URL格式是什么?
答:使用gsjdbc4.jar时,URL格式为"jdbc:postgresql://IP地址:端口号/数据库名";使用gsjdbc200.jar时,URL格式为"jdbc:gaussdb://IP地址:端口号/数据库名"。驱动类分别为"org.postgresql.Driver"和"com.huawei.gauss200.jdbc.Driver"。
问6:DWS集群创建后可以更改区域吗?
答:不可以。DWS集群创建后无法更换区域,因此在创建前需要谨慎选择区域。建议就近选择靠近您业务的区域,可以降低网络时延、提高访问速度。


