日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Data Lake Analytics: 以SQL方式查询Redis数据

發布時間:2024/8/23 数据库 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Data Lake Analytics: 以SQL方式查询Redis数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Data Lake Analytics?作為云上數據處理的樞紐,最近加入了對于Redis?的支持, 這篇教程帶你玩轉 DLA 的 Redis 支持。

創建數據庫

在 DLA 里面創建一個底層映射到?Redis?的數據庫的語法如下:

CREATE DATABASE `redis_test` WITH DBPROPERTIES (catalog = 'redis',location = 'r-xxxxx.redis.rds.aliyuncs.com:6379/hello_',password = 'xxxxx',vpc_id = 'vpc-xxxxx',instance_id = 'r-xxxxxx' )

這里要特別說明一下這個?location?屬性,前面?r-xxxxx.redis.rds.aliyuncs.com:6379?是redis服務器的域名和端口,最后的?hello_?是一個前綴,具體的用途后面再細說,redis服務的域名和端口你可以從阿里云控制直接查詢到:

跟普通的建庫語法不同的是這里多了兩個屬性:?VPC_ID?和?INSTANCE_ID?, 這是因為現在用戶的 Redis 數據庫都是處于用戶自己的VPC內部,默認情況下 DLA 是訪問不了用戶 VPC 里面的資源的,為了讓DLA能夠訪問到用戶RDS里面的數據,我們需要利用阿里云的VPC反向訪問技術。

權限聲明: 當您通過上述方式建庫,就視為您同意我們利用VPC反向訪問的技術去讀寫您的 Redis 。

另外您還需要把?100.104.0.0/16?加入你的 Redis 的白名單列表,這是我們VPC反向訪問的IP地段,如下圖:

創建表

數據庫建完之后,我們可以建表了,我們先在你的?Redis?里初始化一些數據用來測試, 因為Redis是沒有schema信息的,我們必須往里面插入數據才能生效,所以我們插入一些測試數據:

# CSV格式的數據 set hello_world_1 1,james,10 set hello_world_2 2,bond,20 set hello_world_3 3,lily,30 set hello_world_4 4,lucy,20# JSON格式的數據 set hello_foo_1 '{"id":1,"name":"james","age":110}' set hello_foo_2 '{"id": 2, "name": "bond", "age": 210}' set hello_foo_3 '{"id": 3, "name": "lily", "age": 310}' set hello_foo_4 '{"id": 3, "name": "lucy", "age": 210}'

我們插入了兩種格式的數據,一種是CSV格式的,一種是JSON格式的,這是我們目前支持的兩種格式,后面會分別演示。

然后就可以在 DLA 的數據庫里面建立相應的映射表了:

CREATE EXTERNAL TABLE dla_person (id int,name varchar,age int ) TBLPROPERTIES (COLUMN_MAPPING = 'id,2;name,1;age,0',TABLE_MAPPING = 'world_',format = 'csv' );

這里幾個字段詳細說明一下:

TABLE_MAPPING?讓我們可以讓DLA層面的表名映射到底層Redis里面指定模式的的一組key?;貞浺幌挛覀兦懊嬖诮◣斓臅r候指過前綴?hello_?, 再與這里的?world_?相結合,表達的意思就是:

表?dla_person?里面的數據映射到Redis數據庫里面所有key的前綴為?hello_world_?的數據。

這里,你也可以省略這個設置,默認的前綴跟表名一致,在上面的例子里面省略?TABLE_MAPPING, 那么最終查詢的key的前綴為?hello_dla_person。

下一個我們關注一下參數?format, 這里指定Redis里面數據的格式,目前支持:?csv,?json?兩種格式。

COLUMN_MAPPING?的作用是把DLA層面的列映射到底層的數據上,由于Redis底層沒有column的概念,因此具體映射的方法根據?format?的不同而不同, 比如這里的?CSV, 我們知道CSV的數據被解析之后會形成一個string數組,對應的column_mapping就映射到底層這個數組的index(下標)。比如這里把?id?映射到下標?2, 把?name?映射到下標?1?等等。

column_mapping 也可以不設置,對于CSV格式來說會按照column聲明的順序依次映射到0, 1, 2等等。

這樣我們就可以通過MySQL客戶端連接到 DLA 數據庫上面,就可以對?Redis?數據庫里面的數據進行查詢了:

mysql> select * from dla_person; +-------+------+------+ | name | id | age | +-------+------+------+ | bond | 20 | 2 | | lily | 30 | 3 | | lucy | 20 | 4 | | james | 10 | 1 | +-------+------+------+ 4 rows in set (0.18 sec)

熟悉SQL的同學一定覺得很爽吧,可以去熟悉的SQL語法去操作 Redis 數據庫了。

JSON

上面演示的是CSV格式的數據,下面我們再來試試JSON格式的數據,我們再來創建一個新表:

CREATE EXTERNAL TABLE dla_person_json (id int,name varchar,age int ) TBLPROPERTIES (COLUMN_MAPPING = 'id,age;name,name;age,id',TABLE_MAPPING = 'foo_',format = 'json' );

注意這里我們指定了?TABLE_MAPPING?為?foo_,結合數據庫的前綴?hello_, 因此它最終查詢的是Redis里面所有前綴為?hello_foo_?的數據; 另外這里還指定了?COLUMN_MAPPING, 因為JSON數據里面是有字段名字的,因此DLA的層面的column的名字是映射到JSON數據里面字段的名字的,這里為了演示的需要故意把DLA的?id?column映射到了 Redis的?age, 我們來查詢看看結果:

mysql> select * from dla_person_json; +-------+------+------+ | name | id | age | +-------+------+------+ | lucy | 210 | 3 | | james | 110 | 1 | | bond | 210 | 2 | | lily | 310 | 3 | +-------+------+------+ 4 rows in set (0.12 sec)

如我們所愿,id?column顯示的是Redis里面對應的?age?字段的值。

總結

我們今天介紹了DLA對于Redis的支持,目前DLA支持的數據源已經包括: OSS, OTS, RDS(MySQL, SQLServer, Postgres), MongoDB, Redis等等 數據可以在這些數據源之間進行聯合JOIN、流轉。

?


原文鏈接
本文為云棲社區原創內容,未經允許不得轉載。

總結

以上是生活随笔為你收集整理的Data Lake Analytics: 以SQL方式查询Redis数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。