隨着軟硬件各方面條件的成熟,數據湖(Data Lake)已經愈來愈受到各大企業的青睞, 與傳統的數倉實踐不同的是,數據湖不須要專門的「入倉」的過程,數據在哪裏,咱們就從哪裏讀取數據進行分析。這樣的好處在於:一來數據能夠保存在很便宜的存儲上面(好比阿里雲的OSS 上面), 給企業節省預算,而須要分析的時候又能夠分析;另外一方面,由於省去了入倉的流程,對於中小型企業來講人員投入更少,更容易上手。mysql
今天咱們就給你們介紹一下,如何基於阿里雲的數據湖分析引擎: DataLake Analytics(後面簡稱DLA) 對用戶保存在 OSS 裏面的數據創建數據湖,對數據進行各個維度的分析,分析完成獲得業務洞見以後再把這些產生的結果再回流到的 RDS 裏面供前臺業務決策使用。sql
在開始以前咱們要有一個 DLA 的帳號,目前 DLA 正在公測,直接申請試用就行了。試用審批成功以後,你會得到一個用戶名和密碼, 而後在控制檯登陸就可使用:數據庫
或者若是你是極客,更偏心命令行,你也可使用普通的 MySQL 客戶端就能夠鏈接 DLA 了:express
mysql -hservice.cn-shanghai.datalakeanalytics.aliyuncs.com -P10000 -u<your-user-name> -p<your-password>
在這篇文章裏面,我會使用 MySQL 命令行給你們演示 DLA 的功能。安全
另外你還須要在您的OSS上準備一些測試數據, 我這裏準備的是著名的 TPCH 測試數據集:微信
DLA 是一個以 SQL 做爲查詢語言的數據湖引擎,爲了可以讓 DLA 可以對 OSS 上的數據進行查詢,咱們須要以某種方式告訴 DLA 咱們 OSS 數據的結構。爲了讓用戶使用更方便,DLA 使用了傳統的數據庫
, 表
的概念來維護這些數據的元信息,也就說,OSS的文件結構的數據映射到 DLA 變成了一個數據庫和一堆表。機器學習
以 TPCH
數據集來舉個例子,咱們知道 TPCH 數據集裏面包含了以下幾塊信息: 用戶(customer)
, 訂單(orders)
, 訂單的詳情(lineitem)
等等,這些數據總體屬於一塊業務,咱們創建一個數據庫來對應:ide
CREATE SCHEMA oss_tpch with DBPROPERTIES( CATALOG = 'oss', LOCATION = 'oss://public-datasets-cn-hangzhou/tpch/1x/' );
這每塊數據對應到OSS上一個目錄的多個文件,拿 訂單
來講,它對應的是 orders_text
目錄下面的 1 個文件(這個例子裏面只有一個文件,實際使用中,這裏能夠有多個文件):工具
咱們把這個 orders_text
目錄映射到咱們的數據庫 oss_tpch
下面的一張表:學習
use oss_tpch; CREATE EXTERNAL TABLE IF NOT EXISTS orders ( O_ORDERKEY INT, O_CUSTKEY INT, O_ORDERSTATUS STRING, O_TOTALPRICE DOUBLE, O_ORDERDATE DATE, O_ORDERPRIORITY STRING, O_CLERK STRING, O_SHIPPRIORITY INT, O_COMMENT STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' STORED AS TEXTFILE LOCATION 'oss://public-datasets-cn-hangzhou/tpch/1x/orders_text/';
這樣咱們就能夠經過 DLA 對OSS上的進行數據分析了, 好比咱們先來查個前十條看看:
mysql> select * from orders limit 10; +------------+-----------+---------------+--------------+-------------+-----------------+-----------------+----------------+---------------------------------------------------------------------------+ | o_orderkey | o_custkey | o_orderstatus | o_totalprice | o_orderdate | o_orderpriority | o_clerk | o_shippriority | o_comment | +------------+-----------+---------------+--------------+-------------+-----------------+-----------------+----------------+---------------------------------------------------------------------------+ | 1 | 3689999 | O | 224560.83 | 1996-01-02 | 5-LOW | Clerk#000095055 | 0 | nstructions sleep furiously among | | 2 | 7800163 | O | 75388.65 | 1996-12-01 | 1-URGENT | Clerk#000087916 | 0 | foxes. pending accounts at the pending, silent asymptot | | 3 | 12331391 | F | 255287.36 | 1993-10-14 | 5-LOW | Clerk#000095426 | 0 | sly final accounts boost. carefully regular ideas cajole carefully. depos | | 4 | 13677602 | O | 43119.84 | 1995-10-11 | 5-LOW | Clerk#000012340 | 0 | sits. slyly regular warthogs cajole. regular, regular theodolites acro | | 5 | 4448479 | F | 125809.76 | 1994-07-30 | 5-LOW | Clerk#000092480 | 0 | quickly. bold deposits sleep slyly. packages use slyly | | 6 | 5562202 | F | 56408.2 | 1992-02-21 | 4-NOT SPECIFIED | Clerk#000005798 | 0 | ggle. special, final requests are against the furiously specia | | 7 | 3913430 | O | 240358.24 | 1996-01-10 | 2-HIGH | Clerk#000046961 | 0 | ly special requests | | 32 | 13005694 | O | 136666.23 | 1995-07-16 | 2-HIGH | Clerk#000061561 | 0 | ise blithely bold, regular requests. quickly unusual dep | | 33 | 6695788 | F | 183460.23 | 1993-10-27 | 3-MEDIUM | Clerk#000040860 | 0 | uriously. furiously final request | | 34 | 6100004 | O | 52842.63 | 1998-07-21 | 3-MEDIUM | Clerk#000022278 | 0 | ly final packages. fluffily final deposits wake blithely ideas. spe | +------------+-----------+---------------+--------------+-------------+-----------------+-----------------+----------------+---------------------------------------------------------------------------+ 10 rows in set (0.21 sec)
咱們再來看看用戶 36901
的前十條訂單:
mysql> select * from orders where o_custkey= '36901' limit 10; +------------+-----------+---------------+--------------+-------------+-----------------+-----------------+----------------+------------------------------------------------------------------+ | o_orderkey | o_custkey | o_orderstatus | o_totalprice | o_orderdate | o_orderpriority | o_clerk | o_shippriority | o_comment | +------------+-----------+---------------+--------------+-------------+-----------------+-----------------+----------------+------------------------------------------------------------------+ | 1243264 | 36901 | F | 103833.45 | 1992-03-23 | 2-HIGH | Clerk#000000922 | 0 | nts haggle. even, even theodolites are. blithely | | 1274530 | 36901 | O | 181977.58 | 1997-04-29 | 2-HIGH | Clerk#000000232 | 0 | bold foxes along the carefully expres | | 1599527 | 36901 | F | 322352.11 | 1993-10-16 | 2-HIGH | Clerk#000000674 | 0 | the slyly even dependencies. | | 1837477 | 36901 | F | 101653.62 | 1993-05-27 | 5-LOW | Clerk#000000891 | 0 | lyly special requests. express foxes sleep fu | | 1994082 | 36901 | O | 77952.78 | 1995-07-05 | 3-MEDIUM | Clerk#000000525 | 0 | luffily ironic courts. bold, e | | 2224802 | 36901 | F | 243852.76 | 1993-01-14 | 1-URGENT | Clerk#000000827 | 0 | sly final requests. pending, regular ideas among the furiously u | | 4957636 | 36901 | F | 5741.32 | 1992-05-20 | 5-LOW | Clerk#000000230 | 0 | ackages. fluffily even packages solve carefully dolphins. unusua | | 5078467 | 36901 | F | 119823.03 | 1994-04-29 | 4-NOT SPECIFIED | Clerk#000000402 | 0 | regular asymptotes cajo | | 5173859 | 36901 | F | 103624.02 | 1994-05-28 | 3-MEDIUM | Clerk#000000335 | 0 | regular dependencies poach quickly. unusu | | 5525574 | 36901 | O | 136098.0 | 1998-02-16 | 4-NOT SPECIFIED | Clerk#000000425 | 0 | cial pinto beans wake. slyly even warthogs use. bo | +------------+-----------+---------------+--------------+-------------+-----------------+-----------------+----------------+------------------------------------------------------------------+ 10 rows in set (1.07 sec)
再來查一查訂單量最多的前是我的:
mysql> select o_custkey, count(*) as cnt from orders group by o_custkey order by cnt desc limit 10; +-----------+------+ | o_custkey | cnt | +-----------+------+ | 3451 | 41 | | 102022 | 41 | | 102004 | 41 | | 79300 | 40 | | 117082 | 40 | | 122623 | 40 | | 69682 | 39 | | 143500 | 39 | | 142450 | 38 | | 53302 | 38 | +-----------+------+ 10 rows in set (2.69 sec)
恩,這些人就是咱們要重點服務好的客戶啊,咱們要把這些用戶的ID回寫到前臺的 RDS 數據庫裏面讓咱們的營銷同窗作一些針對性的營銷活動,沒問題,DLA支持把分析好的數據迴流到RDS
要把分析好的數據迴流到RDS咱們首先一種機制來告訴 DLA 數據迴流的目的地,得益於DLA統一的設計,咱們就像映射 OSS 的數據同樣,咱們映射一個 MySQL 數據庫進來就行了,好比咱們要把數據寫到以下的數據庫裏面:
mysql -habcde.mysql.rds.aliyuncs.com -P3306 -uhello -pworld -Dmarketing
那麼咱們在 DLA 裏面建一個映射的庫:
CREATE SCHEMA `mysql_marketing` WITH DBPROPERTIES ( CATALOG = 'mysql', LOCATION = 'jdbc:mysql://abcde.mysql.rds.aliyuncs.com:3306/marketing', USER='hello', PASSWORD='world', INSTANCE_ID = '<your-rds-instance-id>', VPC_ID = '<your-vpc-id-where-your-rds-lives>' );
這裏須要解釋一下的是
VPC_ID
和INSTANCE_ID
, 咱們知道爲了安全的緣由在阿里雲上購買的 RDS 咱們通常都會把它放在一個單獨的VPC裏面,以保證只有咱們本身能夠訪問,這裏爲了讓 DLA 可以訪問到咱們的 MySQL 數據庫以進行數據迴流,咱們須要告訴 DLA 這個 RDS的相關信息。
其中 INSTANCE_ID
和 VPC_ID
在 RDS的詳情頁面均可以找到, 好比 VPC_ID
:
INSTANCE_ID
:
因爲 RDS 的安全組會對訪問的來源IP進行控制,咱們須要把DLA相關的地址段 100.104.0.0/16
IP地址段加入到你的RDS的白名單列表,以下圖:
到這裏爲止,準備工做就完成了,咱們的 mysql 數據庫建好了。
咱們要保存的結果很簡單,就是下單量前 10
的用戶, 這個表在 MySQL 數據庫裏面的建表語句以下:
create table top10_user ( custkey int, order_cnt bigint );
而爲了把這個表映射進 DLA 咱們建一個對應的表,建表語句幾乎同樣:
use mysql_marketing; create external table top10_user ( custkey int, order_cnt bigint );
下面咱們就能夠把查出來的數據進行迴流了:
mysql> insert into mysql_marketing.top10_user -> select o_custkey, count(*) as cnt from oss_tpch.orders -> group by o_custkey order by cnt desc limit 10; +------+ | rows | +------+ | 10 | +------+ 1 row in set (4.71 sec) mysql> select * from mysql_marketing.top10_user; +---------+-----------+ | custkey | order_cnt | +---------+-----------+ | 143500 | 39 | | 102004 | 41 | | 53302 | 38 | | 3451 | 41 | | 122623 | 40 | | 129637 | 38 | | 102022 | 41 | | 117082 | 40 | | 69682 | 39 | | 79300 | 40 | +---------+-----------+ 10 rows in set (0.14 sec)
在這篇文章裏面,我帶你們一塊兒體驗了一下如何用 DLA 創建基於 OSS 的數據湖,對數據庫裏面的數據進行各個維度的分析,分析完成以後把分析獲得的關鍵數據再回寫到咱們的RDS裏面去。例子裏面不少地方寫的比較簡單,若是想進一步瞭解更多相關詳細信息能夠參考如下資料:
一站式開發者服務,海量學習資源0元起!
阿里熱門開源項目、機器學習乾貨、開發者課程/工具、小微項目、移動研發等海量資源;更有開發者福利Kindle、技術圖書幸運抽獎,100%中--》https://www.aliyun.com/acts/product-section-2019/developer?utm_content=g_1000047140
原文連接 更多技術乾貨 請關注阿里云云棲社區微信號 :yunqiinsight