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.enable
和druid.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。
操作步骤
- 链接DLA
- 通过以下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。
-
通过以下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;