配列の索引付け

配列にスカラー・データが含まれている、またはスカラー・フィールド付きのレコードが含まれている場合には、配列フィールドに索引を作成できます。

注意:

別のマップまたは配列の下にネストされたマップまたは配列には索引付けできません。これができないのは、索引エントリの数が極端に多くなる可能性があるからです。

配列を索引付けすると、場合によっては各行に複数の索引エントリになり、かなり大きな索引になる可能性があります。

索引を作成するには、まず表を作成します。

CREATE TABLE myArrayTable (
    uid INTEGER,
    testArray ARRAY(STRING),
    PRIMARY KEY(uid)
) 

表がストアに追加された後、索引を作成します。[]をフィールド名とともに使用して、配列であることを示します。

CREATE INDEX arrayFieldIndex on myArrayTable (testArray[]) 

配列の場合、別の索引付けが可能な型の1つである型の値を配列に含む場合のみ、フィールドに索引付けが可能です。たとえば、整数の配列には索引を作成できます。レコードの配列にある特定のレコードにも索引を作成できます。各配列エントリに索引エントリがあると、索引のサイズが急激に増加してしまうため、索引には1つの配列のみを加えます。

配列の索引を使用してデータを取得するには、取得する配列フィールドと値を識別するキーを作成します。

索引参照を実行するとき、戻されるレコードはキー・オブジェクトに設定される値と一致する項目が少なくとも1つはある配列を含むレコードのみです。たとえば、次のような配列を持つ個々のレコードを持っている場合、

Record 1: ["One," "Two", "Three"]
Record 2: ["Two", "Three", "One"]
Record 3: ["One", "Three", "One"]
Record 4: ["Two", "Three", "Four"] 

配列値「One」で配列参照を実行すると、1から3のレコードは戻されますが、4は戻されません。

次に例を示します。

    try:
        key_d = {"testArray" : ["One"]}
        row_list = store.index_iterator("myArrayTable", 
                                        "arrayFieldIndex", 
                                        key_d, 
                                        False)
        if not row_list:
            logging.debug("Table retrieval failed")
        else:
            logging.debug("Table retrieval succeeded.")
            for r in row_list:
                print r
    except IllegalArgumentException, iae:
        logging.error("Table retrieval failed.")
        logging.error(iae.message)