1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Alibaba Cloud の DataV のデータソースにTable Storeを指定してデータを持ってくる

Last updated at Posted at 2019-07-16

こんにちは。寺尾です。

Alibaba CloudのダッシュボードプロダクトDataVのデータソースにTable Storeを使う場合の指定方法が日本語のドキュメントになっていないので簡単に書いてみます。

データソースの追加

英語のドキュメントですがここに書いて有るとおりです。
https://www.alibabacloud.com/help/doc-detail/97683.htm

AKでアクセスをして、インスタンスのインターネットアドレスを指定します。

DataVのデータソースとして使う

値を取ってくる方法は値を一つだけとってくる方法( getRow )と、範囲でとってくる方法( getRange )があります。

Table StoreのTableを使う場合は、SQLでは無くJSONで条件を指定します。
ここが非常につかみづらい点でした。

getRow

値を一つだけ取ってくる場合は、getRowを使います。たとえばこのようなSQLを書きたい場合を考えます

select id,test from test where id=2;

JSONで書くと以下のようになります

{
  "table_name": "test",
  "rows": {
    "id": 2
  },
  "columns": [
    "id",
    "test"
  ]
}

table_name : テーブル名を指定します
rows : フィルタリング条件を指定します。指定するフィールドはインデックスが張ってある必要があります。通常はPKを使います。
columns : 応答するデータに含んで欲しいフィールド名を記述します。

getRange

複数の範囲を検索するのに使います。

また、SQLで例示してみます。

select id,test from test where  "InfMin" <= id AND id < 3  limit 4; 

このようにキーとなるidにたいして、加減と上限を指定します。また、件数の上限も指定出来ます。 InfMinについては後で説明します。

{
  "table_name": "test",
  "direction": "FORWARD",
  "columns": [
    "id",
    "test"
  ],
  "range": {
    "limit": 4,
    "start": {
      "id": "InfMin"
    },
    "end": {
      "id": 3
    }
  }
}

JSONで書くとこのような形になります。

新しく出てきたフィールドを説明します。

direction : クエリシーケンスを指定するそうです。良く分かりませんが例の通り "FORWARD"を指定しましょう
range : フィルタリング条件を指定します。指定するフィールドはインデックスが張ってある必要があります。通常はPKを使います。 startとendで範囲を指定します。

limit:表示される最大行数
start:表示結果の開始列です。関連列には索引を作成する必要があります。(この値を含みます)
end:表示結果の最後の列です。関連列には索引を作成する必要があります。(この値を含みません)

注意したいのは、startで指定する値は含んだものが返され、endで指定した値は含まない範囲を返します。SQLで指定したものを見ると分かりやすいですが、"InfMin" <= id AND id < 3 こういう感じなので注意しましょう。

また、特殊な指示詞を紹介します。InfMinInfMax は、最小値と最大値を指定できます。最新の値が分からなくても最大と最小が指定出来るので便利です。

getRange (二つのPKを指定する場合)

二つのPKがあってそれで絞り込みたい場合はどうすれば良いでしょうか。

{
  "table_name": "test",
  "columns": [
    "id",
    "id2",
    "test"
  ],
  "range": {
    "limit": 4,
    "start": {
      "id": "InfMin",
      "id2": "InfMin"
    },
    "end": {
      "id": 3,
      "id2": 8
    }
  }
}

やることは簡単で、startとendにid2の条件を付加します。

select id,id2,test from test where ("InfMin" <= id AND id < 3) AND  ("InfMin" <= id2 AND id2 < 8) limit 4;

まとめ

  • Table Storeをデータソースに指定するには、AKでアクセスをする。インターネット経由になる。
  • 値を取ってくる方法は値を一つだけとってくる方法( getRow )と、範囲でとってくる方法( getRange )がある
  • 検索方法はSQLでは無く独自のJSON形式
  • 検索はインデックスが張ってあるフィールドが必要
  • 二つのフィールドを指定して検索することも可能
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?