埋込みレコードの使用

レコード・エントリは様々な型のフィールドを持つことができます。ただし、埋込みレコードはデータが相対的に静的の場合のみ使用してください。一般的に、特に子データセットが大きいかサイズが変更する場合に、埋込みレコードよりも子表が優れた解決策を提供します。

RECORD()文を使用して表フィールドをレコードとして宣言します。

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

CREATE TABLE myTable (
    uid INTEGER,
    myRecord RECORD(firstField STRING, secondField INTEGER),
    PRIMARY KEY (uid)
) 

埋込みレコード・フィールドで、DEFAULTおよびNOT NULL制約はサポートされていません。ただし、これらの制約は埋込みレコードの個々のフィールドには適用できます。詳細は、「フィールド制約」を参照してください。

埋込みレコードを記述するには、Pythonマップとして定義します。

    mrec = {"firstField" : "An embedded record",
            "secondField" : 3388}

    row_d = {'uid' : 0,
             'myRecord' : mrec
            }
    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) 

次に、通常の方法でそのフィールドを読み取ることができます。

    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.")
            print "firstField: %s" % row['myRecord']['firstField']
            print "secondField: %s" % row['myRecord']['secondField']
    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)