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