2017-10-12 17 views
3

私は私たちのプロジェクトの1つにエアロスパイクを検討しています。だから私は現在、3ノードのクラスタを作成し、いくつかのデータをそこにロードしました。Aerospikeのセカンダリインデックスからの照会

サンプル・データ

NS:IMEI

セット:imei_data

+-------------------+-----------------------+-----------------------+----------------------------+--------------+--------------+ 
| imsi    | fcheck    | lcheck    | msc      | fcheck_epoch | lcheck_epoch | 
+-------------------+-----------------------+-----------------------+----------------------------+--------------+--------------+ 
| "413010324064956" | "2017-03-01 14:30:26" | "2017-03-01 14:35:30" | "13d20b080011044917004100" | 1488358826 | 1488359130 | 
| "413012628090023" | "2016-09-21 10:06:49" | "2017-09-16 13:54:40" | "13dc0b080011044917006100" | 1474432609 | 1505550280 | 
| "413010130130320" | "2016-12-29 22:05:07" | "2017-10-09 16:17:10" | "13d20b080011044917003100" | 1483029307 | 1507546030 | 
| "413011330114274" | "2016-09-06 01:48:06" | "2017-10-09 11:53:41" | "13d20b080011044917003100" | 1473106686 | 1507530221 | 
| "413012629781993" | "2017-08-16 16:03:01" | "2017-09-13 18:10:48" | "13dc0b080011044917004100" | 1502879581 | 1505306448 | 

は、その後、私は私が日付に基づいて照会するため、AQLを使用してlcheck_epochの2次索引を作成しました。

create index idx_lcheck on imei.imei_data (lcheck_epoch) NUMERIC

+--------+----------------+-----------+-------------+-------+--------------+----------------+-----------+ 
| ns  | bin   | indextype | set   | state | indexname | path   | type  | 
+--------+----------------+-----------+-------------+-------+--------------+----------------+-----------+ 
| "imei" | "lcheck_epoch" | "NONE" | "imei_data" | "RW" | "idx_lcheck" | "lcheck_epoch" | "NUMERIC" | 
+--------+----------------+-----------+-------------+-------+--------------+----------------+-----------+ 

私は

select imsi from imei.imei_data where idx_lcheck=1476165806

を実行すると、私は説明してください

Error: (204) AEROSPIKE_ERR_INDEX

を取得しています。

答えて

4

クエリでは、ビン名ではなくインデックス名を使用しています。このお試しください:ちょうどノート

SELECT imsi FROM imei.imei_data WHERE lcheck_epoch=1476165806 

それとも

SELECT imsi FROM imei.imei_data WHERE lcheck_epoch BETWEEN 1490000000 AND 1510000000 

を、あなたは言語のクライアント(Javaの、C、C#、ゴー)のいくつかによってpredicate filteringを使用してはるかに複雑なクエリを行うことができます。たとえば、JavaクライアントのPredExpクラス(examplesを参照)

+1

ありがとうございました。最初に私がSELECTを実行したときimsi FROM imei.imei_dataどこlcheck_epoch = '1476165806';それは私にエラーを与えました:(201)AEROSPIKE_ERR_INDEX_NOT_FOUND。私は引用符を使用している必要があります。 – ivcode

+1

ちょうど2つの側面の質問。 1)aerospikeはmysqlと同等の機能を持っています:毎日更新されたレコードのcsvダンプを別のシステムに送る必要があるので、lcheck_epoch> 1476165806というimeiのファイル '/ tmp/file'にfield1、field2を選択します。上記の質問でlcheck_epoch> 1476165806が有効なフィルタですか? – ivcode

+2

はい、引用符で文字列に変換され、STRINGデータのそのビンにセカンダリインデックスがありません。あなたの数値はNUMERICです。自動型キャストはありません。 –

関連する問題