マップの使用

すべてのマップ・エントリは同じ型である必要があります。マップの値の型にかかわらず、キーは常に文字列です。

文字列「[]」は予約されていて、キー名に使用することはできません。

表のフィールドをマップとして宣言する場合、MAP()文を使用します。マップ要素データ型も宣言する必要があります。

主キーがUIDで2番目のフィールドに整数のマップを持つシンプルな2つのフィールドの表を定義するには、次のDDL文を使用します。

CREATE TABLE myTable (
    uid INTEGER,
    myMap MAP(INTEGER),
    PRIMARY KEY (uid)
) 

マップ・フィールドでは、DEFAULTおよびNOT NULL制約はサポートされていません。

マップに書き込むには、次のようにします。

    mmap = {"field1" : 1, 
            "field2" : 2, 
            "field3" : 3}
     
    row_d = {'uid' : 0,
             'myMap' : mmap
            }
    try:
        store.put("myTable", row_d)
        logging.debug("Store write succeeded.")
    except IllegalArgumentException, iae:
        logging.error("Could not write table.")
        logging.error(iae.message)
        sys.exit(-1) 

マップのfield2を読み取るには、次のようにします。

    try:
        primary_key_d = {"uid" : 0}
        row = store.get("myTable", primary_key_d)
        if not row:
            logging.debug("Row retrieval failed")
        else:
            logging.debug("Row retrieval succeeded.")
            ## prints '2'
            print row['myMap']['field2']
    except IllegalArgumentException, iae:
        logging.error("Row retrieval failed.")
        logging.error(iae.message)
        return
    except KeyError, ke:
        logging.error("Row display failed. Bad key: %s" % ke.message)