阿里云数据源连接(ODPS、DRDS)

阿里云数据源连接(ODPS、DRDS)

一、ODPS

1.准备工作

1)阿里云账号的accessId和accessKey(几乎等同于账号)

2)ODPS连接所需API地址,公网ODPS统一为 http://service.odps.aliyun.com/api

专有云ODPS联系相关负责人员获取API地址。

3)ODPS中project名称(工作空间名称或称为库名)

4)官方提供ODPS的SDK开发包,maven依赖如下:

        <dependency>

            <groupId>com.aliyun.odps</groupId>

            <artifactId>odps-jdbc</artifactId>

            <version>3.0.1</version>

        </dependency>

 

2.获取连接

根据官方SDK提供的API获取ODPS连接对象。

    public static Odps getConn(String endPoint, String accessId, String accessKey, String project) {

        Account account = new AliyunAccount(accessId, accessKey);

        Odps odps = new Odps(account);

        odps.setEndpoint(endPoint);

        odps.setDefaultProject(project);

        return odps;

    }

 

3.获取表信息

根据官方SDK提供的API获取ODPS表中英文名称。

    public ArrayList<Map<String, String>> showTables(Odps stmt) {

        ArrayList<Map<String, String>> tablelist = new ArrayList<>();

        Tables tables = stmt.tables();

        for (Table table : tables) {

            Map<String, String> tableInfo = new HashMap<>();

            tableInfo.put("tableName", table.getName());

            tableInfo.put("remarks", table.getComment());

            tablelist.add(tableInfo);

        }

        return tablelist;

    }

 

3.获取字段信息

根据官方SDK提供的API获取ODPS表字段中英文名称。

    public ArrayList<Map<String, String>> showTableFields(Odps stmt, String tablename) throws OdpsException {

        ArrayList<Map<String, String>> tableFieldlist = new ArrayList<>();

        Table t = stmt.tables().get(tablename);

        t.reload();

        TableSchema schema = t.getSchema();

        List<Column> columns = schema.getColumns();

        for (Column column : columns) {

            Map<String, String> fieldInfo = new HashMap<>();

            fieldInfo.put("columnName", column.getName());

            fieldInfo.put("remarks", column.getComment());

            tableFieldlist.add(fieldInfo);

        }

        return tableFieldlist;

    }

 

4.获取表数据

ODPS支持类SQL,通过查询语句获取表数据(类似于JDBC方式)。

    public void getTableData(Odps stmt, String tablename) throws OdpsException {

        String sql = "select * from " + tablename + " limit 5;";

        Instance i = SQLTask.run(stmt, sql);

        i.waitForSuccess();

        List<Record> records = SQLTask.getResult(i);

        for (Record r : records) {

            String fielddata1 = r.getString(1);

            String fielddata = r.getString("name");

        }

    }

二、DRDS分布式数据库服务(中间件)

1.简介

基于MYSQL协议进行通信,连接方式同理于连接MYSQL,操作方式本质同MYSQL。

 

2.准备工作

1)MYSQL驱动,若版本不适更换驱动版本即可,maven依赖如下:

        <dependency>

            <groupId>mysql</groupId>

            <artifactId>mysql-connector-java</artifactId>

            <version>5.1.25</version>

        </dependency>

2)DRDS连接IP、端口、账号、密码

 

3.获取连接

参考MYSQL获取数据库连接方式。

JDBC获取数据库连接如下:

    public static Connection getConns(String driver, String url, String username, String password) throws SQLException, ClassNotFoundException {

        Connection conn = null;

        Class.forName(driver);

        conn = DriverManager.getConnection(url, username, password);

        return conn;

    }

 

3.获取表信息

参考MYSQL获取表方式。

JDBC获取表中英文名名称如下:

    public ArrayList<Map<String, String>> getTablesLists(Connection conn) throws SQLException {

        ArrayList<Map<String, String>> tablelist = new ArrayList<>();

        ResultSet rs = null;

        Statement stmt = conn.createStatement();

        DatabaseMetaData dbmd = conn.getMetaData();

        String[] types = { "TABLE" };

        rs = dbmd.getTables(null, null, "%", types);

        while (rs.next()) {

            Map<String, String> tableInfo = new HashMap<String, String>();

            String tableName = rs.getString("TABLE_NAME");

            tableInfo.put("tableName", tableName);// 表名

            ResultSet rstemp = stmt.executeQuery("SHOW CREATE TABLE `" + tableName + "`");

            if (rstemp != null && rstemp.next()) {

                String create = rstemp.getString(2);

                tableInfo.put("remarks", parse(create));// 注释

            }

            tablelist.add(tableInfo);

        }

        return tablelist;

    }

 

    public String parse(String all) {

        String comment = null;

        int index = all.indexOf("COMMENT='");

        if (index < 0) {

            return null;

        }

        comment = all.substring(index + 9);

        if (comment.contains("' dbpartition by")) {

            comment = comment.substring(0, comment.indexOf("' dbpartition by"));

        } else {

            comment = comment.substring(0, comment.indexOf("'"));

        }

        try {

            comment = new String(comment.getBytes("utf-8"));

        } catch (UnsupportedEncodingException e) {

            e.printStackTrace();

        }

        return comment;

    }

 

4.获取字段信息

参考MYSQL获取字段方式。

JDBC获取字段中英文名称如下:

    public ArrayList<Map<String, String>> getColumnsInfos(String tablename, Connection conn) throws SQLException {

        ArrayList<Map<String, String>> fieldList = new ArrayList<>();

        ResultSet rs = null;

        DatabaseMetaData dbmd = conn.getMetaData();

        rs = dbmd.getColumns(null, null, tablename, null);

        while (rs.next()) {

            Map<String, String> fieldInfo = new HashMap<String, String>();

            fieldInfo.put("columnName", rs.getString("COLUMN_NAME"));// 列名

            fieldInfo.put("remarks", rs.getString("REMARKS"));// 注释

            fieldList.add(fieldInfo);

        }

        return fieldList;

    }

5.获取表数据

参考MYSQL获取表数据方式。

JDBC获取表数据如下:

    private void getFieldData(String tablename, Connection conn) throws SQLException {

        String sql = "select * from `" + tablename + "` limit 5";

        Statement stmt = conn.createStatement();

        ResultSet rs = stmt.executeQuery(sql);

        while (rs.next()) {

            String fielddata1 = rs.getString(1);

            String fielddata = rs.getString("name");

        }

    }

 

 

### 导出数据的具体方法 在阿里云DataWorks中导出数据主要依靠其内置的数据集成模块完成。该平台支持从多个不同的数据源导入和导出数据,涵盖了常见的数据库以及文件存储系统等[^2]。 对于想要将工作空间内的数据向外导出的情况,用户可以采取如下方式实现: #### 创建数据同步任务 为了实现出口操作,最常用的方式就是建立一个新的数据同步节点。这涉及到选择目标端作为外部存储位置,比如RDS、MySQL、SQL Server、PostgreSQL、MaxCompute、OCS、DRDS、OSS、Oracle、FTP、DM、HDFS或MongoDB等,并指定要从中抽取出来的表或者自定义查询语句的结果集作为源头。 ```sql -- 这是一个简单的ODPS SQL例子用于展示如何构建一个可被用来提取特定记录的SELECT语句 SELECT * FROM your_table WHERE condition; ``` #### 配置出口设置 当选择了合适的目标之后,则需进一步设定具体的映射规则和其他必要的参数选项。这些可能包括字段匹配、过滤条件以及其他转换逻辑等等。确保所有的配置都满足实际业务的需求是非常重要的一步[^5]。 #### 执行与监控 最后,在一切准备就绪后就可以启动这个新创建的任务了。一旦执行完毕,应该能够看到预期中的数据已经被成功转移到所选的目的地中去了。同时也可以借助于DataWorks提供的日志查看器等功能密切跟踪整个过程的状态变化情况,及时发现并解决问题[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值