Simple Log Serviceでは、JOIN構文を使用してLogstoreおよびMySQLデータベースからデータを照会できます。 クエリ結果はデータベースに保存されます。
前提条件
外部ストアが作成されます。 詳細については、「Simple Log ServiceとMySQLデータベースの関連付け」をご参照ください。
手順
[プロジェクト] セクションで、管理するプロジェクトをクリックします。
左側のナビゲーションウィンドウで、[ログストレージ] をクリックします。 Logstoreリストで、管理するLogstoreをクリックします。
クエリ文を実行します。
Simple Log Serviceは、次のJOIN構文をサポートしています。
[ INNER ] JOIN LEFT [ OUTER ] JOIN RIGHT [ OUTER ] JOIN FULL [ OUTER ] JOIN
次のサンプルコードは、JOINクエリ操作の例を示しています。 詳細については、「LogstoreをMySQLデータベースに関連付けてクエリと分析を実行する」をご参照ください。
method:postlogstorelogs | select count(1) , histogram(logstore) from log l join join_meta m on l.projectid = cast( m.ikey as varchar)
重要JOIN構文は、LogstoreとMySQLデータベースの小さなテーブルでのみ使用できます。 小さなテーブルには、20 MB未満のデータを保存できます。
クエリステートメントでは、Logstoreの名前がjoinキーワードの前にあり、外部ストアの名前がjoinキーワードの後にある必要があります。
クエリ文で外部ストアの名前を指定する必要があります。 システムがステートメントを実行すると、名前がデータベース名とテーブル名の組み合わせに置き換えられます。 テーブル名のみを入力しないでください。
クエリ結果をMySQLデータベースに保存します。
説明MySQLデータベーステーブルのフィールドがvarchar型の場合、Logstoreのフィールドをvarchar型のフィールドに変換する必要があります。 たとえば、テーブルには、型が
varchar(60)
として定義されているdetail
フィールドが含まれ、Logstoreにはインデックス付きのcontent
フィールドが含まれます。 この場合、cast(content as varchar(60))
関数を使用して、コンテンツフィールドのタイプをvarchar(60) に変換する必要があります。 キャスト関数の詳細については、「キャスト関数」をご参照ください。Simple Log Serviceでは、insertステートメントを使用してクエリ結果をデータベースに挿入できます。 次のサンプルコードは、INSERTステートメントの例を示しています。
method:postlogstorelogs | insert into method_output select cast(method as varchar(65535)),count(1) from log group by method
サンプルPythonスクリプト
# encoding: utf-8
from __future__ import print_function
from aliyun.log import *
from aliyun.log.util import base64_encodestring
from random import randint
import time
import os
from datetime import datetime
endpoint = os.environ.get('ALIYUN_LOG_SAMPLE_ENDPOINT', 'cn-chengdu.log.aliyuncs.com')
accessKeyId = os.environ.get('ALIYUN_LOG_SAMPLE_ACCESSID', '')
accessKey = os.environ.get('ALIYUN_LOG_SAMPLE_ACCESSKEY', '')
logstore = os.environ.get('ALIYUN_LOG_SAMPLE_LOGSTORE', '')
project = "ali-yunlei-chengdu"
client = LogClient(endpoint, accessKeyId, accessKey, '')
# Create an external store.
res = client.create_external_store(project,
ExternalStoreConfig(externalStoreName="rds_store", region="cn-chengdu",
storeType="rds-vpc",
vpcId="vpc-2vctx8reuqswmk********",
instanceId="",
host='rm-2vc6x67972iv********.mysql.cn-chengdu.rds.aliyuncs.com',
port="3306", username="root", password="Gs516945070",
database="gstest", table="test"))
res.log_print()
# Retrieve the details of the external store.
res = client.get_external_store(project,"rds_store")
res.log_print()
res = client.list_external_store(project,"")
res.log_print()
# Use the JOIN syntax to query data.
req = GetLogsRequest(project,logstore,From,To,"","* | select count(1) from "+ logstore +" s join meta m on s.projectid = cast(m.ikey as varchar)")
res = client.get_logs(req)
res.log_print()
# Save the query results to the MySQL database.
req = GetLogsRequest(project,logstore,From,To,"","* | insert into rds_store select count(1) from "+ logstore )
res = client.get_logs(req)
res.log_print()
次の表に、ExternalStoreConfigメソッドのパラメーターを示します。
パラメーター | 説明 |
externalStoreName | 外部ストアの名前。 名前は小文字である必要があります。 |
storeType | データソースのタイプ。 値をrds-vpcに設定します。 |
region | 地域
重要 RDSインスタンスまたはECSインスタンスは、Simple Log Serviceプロジェクトと同じリージョンに存在する必要があります。 |
vpc-id | 仮想プライベートクラウド (VPC) のID。
|
ホスト | MySQLデータベースのアドレス。
|
instanceId | データベースが属するインスタンスのID。 値を |
ポート | ポート番号
|
ユーザー名 | MySQLデータベースへのログインに使用するアカウントのユーザー名。 |
パスワード | MySQLデータベースへのログインに使用するアカウントのパスワード。 |
データベース | MySQLデータベースの名前。 |
テーブル | MySQLデータベースで使用するテーブルの名前。 |