このトピックでは、外部テーブルを作成して Simple Log Service (SLS) と Object Storage Service (OSS) を関連付ける方法について説明します。
前提条件
-
ログが収集済みであること。詳細については、「データ収集」をご参照ください。
-
インデックスが有効化され、設定済みであること。詳細については、「インデックスの作成」をご参照ください。
-
OSS バケットが作成済みであること。詳細については、「バケットの作成」をご参照ください。
-
CSV ファイルが OSS バケットにアップロード済みであること。詳細については、「ファイルのアップロード」をご参照ください。
重要複数の OSS ファイルを関連付けることができます。単一ファイルの最大サイズは 50 MB です。圧縮はサポートされていません。パラメーターに正規表現はサポートされていません。
メリット
Object Storage Service (OSS) のデータに対するフェデレーテッドクエリには、次のメリットがあります。
-
コスト削減:更新頻度の低いデータを OSS に保存することで、ストレージコストを最小限に抑えることができます。また、内部ネットワーク経由でデータを読み取ることで、データ転送料金を回避できます。
-
運用ワークロードの削減:データを単一のストレージシステムに移行することなく、軽量なフェデレーテッド分析プラットフォームを使用できます。
-
時間の節約:SQL を使用してデータを分析し、数秒で結果を取得できます。頻繁に使用するクエリをレポートとして保存し、結果に直接アクセスすることも可能です。
操作手順
Simple Log Service コンソールにログインします。
[プロジェクト] セクションで、目的のプロジェクトをクリックします。

タブで、目的の Logstore をクリックします。

-
クエリ文を入力し、[検索と分析] をクリックします。
SQL ステートメントを使用して、OSS ファイルにマッピングする仮想外部テーブルを定義します。
* | create table <foreign table> (<Schema>) with (endpoint='oss-cn-${your_region_name}-internal.aliyuncs.com',accessid='yourAccessKeyID',accesskey ='yourAccessKeySecret',bucket='<your bucket name>',objects=ARRAY['my.csv'],type='oss')クエリ文で、外部テーブル名、テーブルスキーマ、およびその他のパラメーターを定義します。WITH 句を使用して、OSS のアクセス情報とファイル情報を指定します。次の表にパラメーターを示します。
パラメーター
説明
例
外部テーブル名
仮想外部テーブルの名前。
user_meta1
テーブルスキーマ
テーブルの列名とデータ型。
(userid bigint, nick varchar, gender varchar, province varchar, age bigint)
エンドポイント
OSS にアクセスするためのエンドポイント。詳細については、「リージョンとエンドポイント」をご参照ください。
重要内部ネットワークのエンドポイントを使用する必要があります。パブリックエンドポイントはサポートされていません。
oss-cn-hangzhou-internal.aliyuncs.com
Accessid
Alibaba Cloud アカウントの AccessKey ID と AccessKey Secret。OSS データソースへのアクセス権限を持つ RAM ユーザーの AccessKey ペアを使用することを推奨します。RAM ユーザーに権限を付与する方法の詳細については、「RAM ユーザーへの権限付与」をご参照ください。AccessKey ペアの取得方法の詳細については、「AccessKey ペア」をご参照ください。
LTAI****************
Accesskey
yourAccessKeySecret
Bucket
CSV ファイルが保存されている OSS バケットの名前。
examplebucket
Objects
クエリ対象の CSV ファイルまたは OSS ディレクトリ。objects パラメーターは、複数のファイルまたはディレクトリを含むことができる配列です。次の点にご注意ください。
-
ディレクトリを指定する場合、名前の末尾にスラッシュ (
/) を付ける必要があります。たとえば、test_dir/と指定すると、外部テーブルは指定されたバケットの test_dir/ ディレクトリ内のすべての CSV ファイルに関連付けられます。 -
制限事項:ファイルの総数は 100 を超えることはできません。
-
'user.csv'
-
'test_dir/'
-
'user.csv','test_dir/','my_dir/'
Type
外部データソースのタイプ。値は oss である必要があります。
oss
コマンドの例:
* | create table user_meta1 ( userid bigint, nick varchar, gender varchar, province varchar, age bigint) with ( endpoint='oss-cn-hangzhou-internal.aliyuncs.com',accessid='yourAccessKeyID',accesskey='yourAccessKeySecret',bucket='examplebucket',objects=ARRAY['my.csv'],type='oss')出力の result フィールドの値が true の場合、ステートメントは正常に実行されたことを示します。
-
-
外部テーブルが作成されたことを確認します。
次のステートメントを実行します。ここで、<外部テーブル> は、手順 4 で定義した外部テーブル名です。以前に定義したテーブルの内容がコマンドから返された場合、外部テーブルは正常に定義されています。
* | select * from <foreign table> -
JOIN 句を使用して、SLS と OSS のデータに対してフェデレーテッドクエリを実行します。
たとえば、次のクエリを実行して、ログの userid と OSS ファイルの userid を結合し、ログデータをエンリッチします。
説明収集されたログには userid フィールドが含まれている必要があります。
* | select * from <logstore> l join <foreign table> u on l.userid = u.useridパラメーター
説明
例
Logstore
クエリ対象の Logstore の名前。
test_logstore
外部テーブル名
手順 4 で定義した外部テーブルの名前。
user_meta1
フェデレーテッドクエリを実行すると、結果にはログフィールド (
action、blood、magic、money、network、payment、status、useragentなど) と外部テーブルのユーザー属性フィールド (nick、gender、province、ageなど) の両方が含まれます。これは、useridで結合することによってログデータが正常にエンリッチされたことを示します。
ベストプラクティスの例については、「Logstore と OSS 外部テーブルを関連付けてデータをクエリおよび分析する」をご参照ください。