Data Lake Analytics(简称DLA) 支持通过标准JDBC连接云服务器(Elastic Compute Service,简称ECS)上的自建Druid,并对其数据进行查询操作。

本文档介绍通过DLA连接并查询Druid数据。

前提条件

DLA将通过VPC连接ECS自建Druid,应确保DLA与ECS所属Region相同。

DLA通过JDBC接口访问Druid,需要在Druid的配置中将druid.sql.enabledruid.sql.avatica.enable这两个属性设为true。其他SQL相关参数参见Druid文档

本文档中的示例使用Druid的示例数据Wikipedia作为测试数据,可以在Druid的web页面上通过向导加载。

为了让DLA可以访问ECS自建Druid数据库,需要在ECS的安全组中添加安全组规则:授权100.104.0.0/16 IP地址段。

添加安全组规则时,端口选择Broker的端口(默认为8082),授权对象设置为100.104.0.0/16。

操作步骤

  1. 链接DLA
  2. 通过以下SQL在DLA中创建Druid Schema。
      CREATE DATABASE `my_druid_db`
    WITH DBPROPERTIES (
     catalog = 'druid',
     location = 'jdbc:avatica:remote:url=http://BROKER:8082/druid/v2/sql/avatica/',
     user = '******',
     password = '******',
     VPC_ID = 'vpc-*****',
     INSTANCE_ID = '********'
    )

    参数说明:

    • CATALOG:取值为druid,表示创建的是Druid Schema。
    • LOCATION: Druid的JDBC连接地址,参见Druid文档
    • USER: Druid的用户名。
    • PASSWORD: USER对应的密码。
    • VPC_ID: Broker所在的VPC ID。
    • INSTANCE_ID: Broker所在的ECS实例ID。
  3. 通过以下SQL在my_druid_db Schema中创建wikipedia表。

     CREATE EXTERNAL TABLE `wikipedia` ( 
    `__time` TIMESTAMP NULL COMMENT '', 
    `added` BIGINT NULL COMMENT '',
     `channel` string NULL COMMENT '', 
    `cityname` string NULL COMMENT '', 
    `comment` string NULL COMMENT '',
     `countryisocode` string NULL COMMENT '',
    `countryname` string NULL COMMENT '', 
    `deleted` BIGINT NULL COMMENT '', 
    `delta` BIGINT NULL COMMENT '',
     `isanonymous` string NULL COMMENT '', 
    `isminor` string NULL COMMENT '',
     `isnew` string NULL COMMENT '', 
    `isrobot` string NULL COMMENT '',
     `isunpatrolled` string NULL COMMENT '', 
    `namespace` string NULL COMMENT '',
     `page` string NULL COMMENT '', 
    `regionisocode` string NULL COMMENT '',
     `regionname` string NULL COMMENT '', 
    `user` string NULL COMMENT ''
    )
    TBLPROPERTIES (
     TABLE_MAPPING = 'druid.wikipedia',
     COLUMN_MAPPING = 'cityname,cityName; countryisocode,countryIsoCode; countryname,countryName; isanonymous,isAnonymous; isminor,isMinor; isnew,isNew; isrobot,isRobot; isunpatrolled,isUnpatrolled; regionisocode,regionIsoCode; regionname,regionName; '
    );

    也可以使用msck命令自动同步druid中的表结构:

     msck repair database my_druid_db;

    表创建成功后,您就可以通过SELECT在DLA中读取Druid中的数据。

     select * from wikipedia;