Python GridDB API(更新版)

2018年の初めに、GridDB用の最新のPythonクライアント(0.7.0)がリリースされました。本リリースでは、主にAPIが改良されています。 このブログでは、接続、クエリ、レコードの作成、その他の一般的な操作の基本について説明します。

インストール

Pythonをインストールするには こちらのブログ を参照してください。

接続

GridDBへの接続は、パラメータのリストを受け取る単一の呼び出しです。 GridDBを固定リストモードで使用している場合は、hostとportの代わりにnotification_memberを指定してください。

self.gridstore = factory.get_store(
    host="239.0.0.1",
    port="31999",
    cluster_name="defaultCluster",
    username="admin",
    password="admin"
)

クエリ

GridDBを照会するには、まず照会したいコンテナを開きます。次にクエリ操作の指定と実行を実施し、反復しながら結果を取り出します。 timestamp_output_with_floatを指定すると、GridDBはTIMESTAMPフィールドをPythonのdatetimeオブジェクトに変換しないため、パフォーマンスが大幅に向上します。

try:
    cn = gridstore.get_container("DEVICE_READS");
    query = cn.query("select *")
    rs = query.fetch(False)
    rs.timestamp_output_with_float = True
except:
    return []

retval= []

while rs.has_next():
    data = rs.next()
    retval.append(data)

書き込み

GridDBに書き込むには、フィールド名とフィールドの型を指定した配列を用意し、これをコンテナスキーマとして指定します。put_containerを使用してコンテナを開き、 putまたはmulti_put呼び出しでデータを書き込みます。

conInfo = griddb.ContainerInfo("DEVICE_READS",
    [["ts", griddb.Type.TIMESTAMP],
    ["attr", griddb.Type.STRING],
    ["value", griddb.Type.LONG]],
    griddb.ContainerType.TIME_SERIES, True)

ts = gridstore.put_container(conInfo)
ts.set_auto_commit(False)
ts.put([int(datetime.datetime.now().timestamp()*1000), "foo", 42.0])
ts.commit()

アップデート

更新はクエリと書き込みを組み合わせたものです。 ContainerInfoオブジェクトを使用してコンテナを開き、データの取得(クエリ)、データの更新とコミットを繰り返します。 GridDBへの更新を有効にするには、queryオブジェクトのfetchメソッドにTrueをセットして呼び出してください。

conInfo = griddb.ContainerInfo("DEVICE_READS",
    [["ts", griddb.Type.TIMESTAMP],
    ["attr", griddb.Type.STRING],
    ["value", griddb.Type.LONG]],
    griddb.ContainerType.TIME_SERIES, True)

ts = gridstore.put_container(conInfo)
ts.set_auto_commit(False)

query = ts.query("select * where ts < TO_TIMESTAMP_MS("+str(epochTs)+")")
rs = query.fetch(True)

if rs.has_next():
    data = idx_rs.next()
    rs.update([data[0], "old_"+data[1], data[2]])
    rs.commit()

削除

照会されたコンテナー内の行を削除は、更新プロセスと非常によく似ています。 主な違いは、代わりに行キーをパラメータとして使用してremoveを呼び出すという点です。

conInfo = griddb.ContainerInfo("DEVICE_READS",
    [["ts", griddb.Type.TIMESTAMP],
    ["attr", griddb.Type.STRING],
    ["value", griddb.Type.LONG]],
    griddb.ContainerType.TIME_SERIES, True)

ts = sgridstore.put_container(conInfo)
ts.set_auto_commit(False)

query = ts.query("select * where attr = '"+specifiedAttr+"'")
rs = query.fetch(True)

if rs.has_next():
    data = idx_rs.next()
    rs.remove(data[0])
    rs.commit()

ブログの内容について疑問や質問がある場合は Q&A サイトである Stack Overflow に質問を投稿しましょう。 GridDB 開発者やエンジニアから速やかな回答が得られるようにするためにも "griddb" タグをつけることをお忘れなく。 https://stackoverflow.com/questions/ask?tags=griddb

Leave a Reply

Your email address will not be published. Required fields are marked *