Simple Log Serviceのデータ変換機能を使用すると、ApsaraDB RDS for MySQLデータベースからデータを取得し、データ変換ルールに基づいてデータを強化できます。
背景情報
データを分析するときは、さまざまなストレージソースからデータを取得する必要があります。 たとえば、ユーザー操作とユーザー行動のデータはSimple Log Serviceに保存され、ユーザープロパティと登録のデータはApsaraDB RDS For MySQLデータベースに保存されます。 この場合、データ変換機能を使用してデータベースからデータを取得し、そのデータをLogstoreに保存できます。
res_rds_mysql関数を使用してApsaraDB RDS for MySQLデータベースからデータを取得し、e_table_mapまたはe_search_table_map関数を使用してデータをエンリッチします。
ApsaraDB RDS for MySQLデータベースが作成されるインスタンスは、Simple Log Serviceプロジェクトと同じリージョンに存在する必要があります。 そうしないと、データベースからデータを取得できません。
データベースが作成されたインスタンスの内部エンドポイントを使用して、ApsaraDB RDS for MySQLデータベースにアクセスし、そこからデータを取得できます。 詳細については、「内部ネットワーク経由のApsaraDB RDS For MySQLデータベースからのデータの取得」をご参照ください。
e_table_map関数を使用してデータをエンリッチする
この例では、e_table_map関数とres_rds_mysql関数を使用してデータをエンリッチします。
生データ
ApsaraDB RDS for MySQLデータベースのテーブル内のサンプルデータレコード
県
市
人口
cid
eid
上海
上海
2000
1
00001
天津
天津
800
1
00002
北京
北京
4000
1
00003
河南省
鄭州
3000
2
00004
江蘇
南京
1500
2
00005
Simple Log Service Logstoreのサンプルログ
time:"1566379109" data:"test-one" cid:"1" eid:"00001" time:"1566379111" data:"test_second" cid:"1" eid:"12345" time:"1566379111" data:"test_three" cid:"2" eid:"12345" time:"1566379113" data:"test_four" cid:"2" eid:"12345"
変換ルール
変換ルールを設定して、Logstoreのcidフィールドをテーブルのcidフィールドと一致させることができます。 cidフィールドの値がLogstoreとテーブルで同じ場合、ログはデータレコードと一致します。 次に、テーブル内の一致したデータレコードのprovince、city、populationフィールドとフィールド値を返し、返されたデータをLogstore内の一致したログと連結して新しいログを生成します。
説明フィールドの複数の値がテーブルで一致する場合、e_table_map関数は最初のデータレコードのみを取得します。 この例では、テーブルのcidフィールドに1の複数の値があります。
e_table_map関数は、単一行一致のみをサポートします。 複数行の一致を実装し、一致したデータを新しいログに結合する場合は、e_search_table_map関数を使用できます。 詳細については、「e_search_map_table関数を使用したデータのエンリッチ」をご参照ください。
e_table_map(res_rds_mysql(address="rds-host", username="mysql-username",password="xxx",database="xxx",table="xx",refresh_interval=60),"cid",["province","city","population"])
res_rds_mysql関数でApsaraDB RDS For MySQLデータベースを設定する方法の詳細については、「res_rds_mysql」をご参照ください。
変換結果
time:"1566379109" data:"test-one" cid:"1" eid:"00001" province:"Shanghai" city:"Shanghai" population:"2000" time:"1566379111" data:"test_second" cid:"1" eid:"12345" province:"Shanghai" city:"Shanghai" population:"2000" time:"1566379111" data:"test_three" cid:"2" eid:"12345" province:"Henan" city:"Zhengzhou" population:"3000" time:"1566379113" data:"test_four" cid:"2" eid:"12345" province:"Henan" city:"Zhengzhou" population:"3000"
e_search_map_table関数を使用してデータをエンリッチする
この例では、e_search_map_table関数とres_rds_mysql関数を使用してデータをエンリッチします。
生データ
ApsaraDB RDS for MySQLデータベースのテーブル内のサンプルデータレコード
コンテンツ
name
年齢
city~=n*
aliyun
10
province~=su$
Maki
18
city:nanjing
vicky
20
Simple log Service Logstoreのサンプルログ
time:1563436326 data:123 city:nanjing province:jiangsu
変換ルール
変換ルールを設定して、テーブルのcontentフィールドの値をLogstoreのログと一致させることができます。 値はキーと値のペアです。 キーは、ログ内のフィールド名に対応する。 値はログ内のフィールド値に対応し、正規表現です。 システムは、ログとの一致結果に基づいて、テーブル内の関連フィールドとフィールド値を連結して、新しいログを生成します。
説明res_rds_mysql関数でApsaraDB RDS For MySQLデータベースを設定する方法の詳細については、「res_rds_mysql」をご参照ください。
contentフィールドはテーブルに含まれています。 システムがフィールドの値をログと照合すると、正規表現一致、完全一致、ファジー一致などのさまざまな照合モードがサポートされます。 一致ルールの詳細については、「e_search」をご参照ください。
単一行マッチング
テーブル内の1つのデータレコードがログと一致すると、システムは変換結果を返します。
e_search_table_map(res_rds_mysql(address="rds-host", username="mysql-username",password="xxx",database="xxx",table="xx",refresh_interval=60),"content","name")
複数行マッチング
システムはテーブル内のすべてのデータレコードをトラバースし、一致したすべてのデータを指定されたフィールドに追加します。
説明次のパラメーター設定が必要です。
multi_match=True
: 複数行のマッチングを有効にします。multi_join=,"
: 複数の一致した値をコンマ (,) で連結します。
e_search_table_map(res_rds_mysql(address="rds-host", username="mysql-username",password="xxx",database="xxx",table="xx",refresh_interval=60),"content","name",multi_match=True,multi_join=",")
変換結果
単一行マッチング
この例では、ログのcityフィールドの値がn * 式と一致するかどうかを確認します。 一致が成功した場合、システムはテーブル内の一致したデータレコードの名前フィールドとフィールド値を返し、新しいログを生成します。
time:1563436326 data:123 city:nanjing province:jiangsu name:aliyun
複数行マッチング
この例では、ログのcityフィールドの値がn * 式と一致するかどうか、ログのprovinceフィールドの値がsu$ 式と一致するかどうか、ログのcityフィールドの値にnanjingが含まれているかどうかを確認します。 この例では、正規表現の前に ~=が付いています。 コロン (:) は、続く文字列が含まれるかどうかを示します。 一致が成功した場合、システムはnameフィールドとテーブル内のフィールドの3つの値を返し、返されたデータをログと連結して新しいログを生成します。 値はコンマ (,) で区切ります。
time:1563436326 data:123 city:nanjing province:jiangsu name:aliyun,Maki,vicky