Data Lake Analytics:SQLでRedisデータを問合せ

4139 ワード

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-xxxx.redis.rds.aliyuncs.com:6379はredisサーバのドメイン名とポートで、最後のhello_接頭辞です.具体的な用途は後で詳しく説明します.redisサービスのドメイン名とポートはアリクラウド制御から直接検索できます.
通常のライブラリ構文とは異なり、VPC_という2つの属性が追加されました.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,10set hello_world_2 2,bond,20set hello_world_3 3,lily,30set 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}'私たちは2つのフォーマットのデータを挿入しました.1つはCSVフォーマットで、1つはJSONフォーマットで、これは私たちが現在サポートしている2つのフォーマットで、後でそれぞれ実証します.
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のセットにマッピングすることができます.私たちが前にライブラリを構築したときに接頭辞helloを指したことを思い出してください.ここのworldと結合して、表現する意味は:
表dla_Personの中のデータはRedisデータベースの中のすべてのkeyの接頭辞にマッピングされますhello_world_ と入力します.
ここで、この設定を省略することもできます.デフォルトの接頭辞は表名と一致し、上記の例ではTABLE_を省略します.MAPPING、最終クエリのkeyの接頭辞はhello_dla_person.
次はパラメータformatに注目します.ここではRedisのデータのフォーマットを指定します.現在はcsv、jsonの2つのフォーマットがサポートされています.
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、ストリーミングを組み合わせることができます.
著者:xumingmingv
原文を読む
本文は雲栖コミュニティのオリジナル内容で、許可を得ずに転載してはならない.