Data Lake Analytics(簡稱DLA) 支持通過標(biāo)準(zhǔn)JDBC連接云服務(wù)器(Elastic Compute Service,簡稱ECS)上的自建Druid,并對其數(shù)據(jù)進(jìn)行查詢操作。

本文檔介紹通過DLA連接并查詢Druid數(shù)據(jù)。

前提條件

DLA將通過VPC連接ECS自建Druid,應(yīng)確保DLA與ECS所屬Region相同。

DLA通過JDBC接口訪問Druid,需要在Druid的配置中將druid.sql.enabledruid.sql.avatica.enable這兩個屬性設(shè)為true。其他SQL相關(guān)參數(shù)參見Druid文檔

本文檔中的示例使用Druid的示例數(shù)據(jù)Wikipedia作為測試數(shù)據(jù),可以在Druid的Web頁面上通過向?qū)Ъ虞d。

為了讓DLA可以訪問ECS自建Druid數(shù)據(jù)庫,需要在ECS的安全組中添加安全組規(guī)則:授權(quán)100.104.0.0/16 IP地址段。

添加安全組規(guī)則時,端口選擇Broker的端口(默認(rèn)為8082),授權(quán)對象設(shè)置為100.104.0.0/16。

操作步驟

  1. 鏈接DLA
  2. 通過以下SQL在DLA中創(chuàng)建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 = '********'
    )

    參數(shù)說明:

    • CATALOG:取值為druid,表示創(chuàng)建的是Druid Schema。
    • LOCATION: Druid的JDBC連接地址,參見Druid文檔
    • USER: Druid的用戶名。
    • PASSWORD: USER對應(yīng)的密碼。
    • VPC_ID: Broker所在的VPC ID。
    • INSTANCE_ID: Broker所在的ECS實(shí)例ID。
  3. 通過以下SQL在my_druid_db Schema中創(chuàng)建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中的表結(jié)構(gòu):

     msck repair database my_druid_db;

    表創(chuàng)建成功后,您就可以通過SELECT在DLA中讀取Druid中的數(shù)據(jù)。

     select * from wikipedia;