AQL - Как показать PK в SELECT

Как включить ПК при выборе AQL?

Пример:

ВЫБЕРИТЕ * из test.users

Возвращает:

Имя, Фамилия и т.д.

Что я действительно хочу знать, так это ПК или ключ, чтобы я мог удалить строку. Как я могу включить PK в инструкцию SELECT AQL.


person Simon C    schedule 07.07.2014    source источник


Ответы (3)


По умолчанию Aerospike не хранит фактический первичный ключ в базе данных. По умолчанию он хранит 20-байтовый дайджест (хэш ключа). Это будет огромная экономия для больших ключей. Однако в последней версии это можно изменить с помощью операции put() для сохранения ключа. Но клиент AQL еще не улучшен, чтобы использовать этот факт. Я зарегистрирую внутренний билет для этого улучшения.

В это время...

  1. вариант-1: вы можете сделать резервную копию ваших данных, которая также выдаст дайджесты (хэш ключа) в формате кодировки base64. Вы можете использовать эти дайджесты для удаления записей.
  2. вариант-2: если вы пишете код сканирования с использованием C/Java или любого API, вы также получите список дайджестов. Вы можете использовать их для удаления записей.
person sunil    schedule 07.07.2014
comment
Как написать ПК с помощью Java API? В настоящее время я звоню client.put(null, key, binsArray); (клиент имеет тип com.aerospike.client.AerospikeClient, ключ — тип com.aerospike.client.Key, binsArray — com.aerospike.client.Bin[]). Мне просто добавить еще один бин в binsArray для ключа? Если да, то что мне использовать для имени корзины? ПК? - person Brent212; 20.08.2016
comment
Я понял. Вроде, как бы, что-то вроде. Я установил для атрибута sendKey политики записи значение true, и теперь я вижу столбец PK в оболочке AQL. Но я все еще не могу сделать select * from ‹set›, где PK = '‹value›' . Всегда получайте результат «запись не найдена». - person Brent212; 23.08.2016
comment
Да, правильно установить атрибут sendKey в политике записи. Похоже, вы используете неправильный запрос. Это должно быть select * from ‹namespace›.‹set›, где PK='‹value›' . Вы, возможно, уже поняли это - person sunil; 01.11.2016
comment
Нет, это все еще не работает. Когда я написал ‹set›, я подразумевал, что он также содержит пространство имен (согласен, это было неясно). Запрос работает, если PK имеет тип STRING, но не в том случае, если я использую массив байтов в качестве своего ключа, и в этом случае я определил с помощью команды объяснения select..., что тип PK — BASE64_DIGEST. У меня есть тема, которая никуда не денется -- discuss.aerospike .com/t/aql-select-with-pk/3314 - person Brent212; 15.12.2016

Чтобы УДАЛИТЬ данные из наборов. Чтобы удалить запись из набора, вы можете использовать API scanAll, который выполняет итерацию по всем записям и удаляет их. Во время вызова scanCallback он получает дайджест-ключ для каждой записи и удаляет. Вот реферальная ссылка

http://www.aerospike.com/community/labs/deleting_sets_and_data.html

После того, как мы расширили функциональность получения первичного индекса через AQL, вы можете получить ключ первичного индекса, который вы создали, но убедитесь, что вы сохранили ключ, вызвав атрибут sendKey класса WritePolicy. . SendKey отправляет определяемый пользователем ключ в дополнение к хеш-дайджесту при установке записи. По умолчанию не отправляется.

person Anand Prakash    schedule 27.10.2014

Альтернативное решение

создайте дополнительную корзину, чтобы сохранить первичный ключ и проиндексировать его. Затем вы можете получить этот первичный ключ с помощью инструкции AQL.

person Damith Ganegoda    schedule 02.10.2014
comment
Как создать бин с помощью aql? - person Suresh Parmar; 09.04.2016
comment
@SureshParmar Когда вы сохраняете данные с дополнительной корзиной и связанными данными, они автоматически создаются. - person Damith Ganegoda; 09.04.2016
comment
спасибо за информацию ... мне нужна дополнительная помощь. Я хочу использовать aerospike, но я не уверен в какой-то определенный момент. У меня есть несколько столбцов с типами данных карты и списка. мое требование - хранить данные на карте и извлекать данные с карты. и добавление также происходит на карте. Во-вторых, при извлечении данных мне нужно проверить несколько ячеек в предложении where. так как мне будет удобно? Пожалуйста, ответьте как можно скорее. и спасибо дружище. :) - person Suresh Parmar; 10.04.2016
comment
Вы можете использовать «где» только первичный ключ. Если вы хотите использовать предложение «где» для других бинов, вам нужно создать вторичный индекс для этого бина. - person Damith Ganegoda; 10.04.2016
comment
хорошо, но рекомендуется создать вторичный индекс для часто меняющихся записей. Для экс. у меня есть карта типа app_day_count({ fb : 5 , wh : 6}) так что в этом счете увеличивается. И еще одна вещь, которую я пытаюсь понять, заключается в этом запросе «ВСТАВИТЬ В user_profile.west (PK, location, last_activity) VALUES («cookie_100», «MA», 342)». как я могу получить значения ПК? - person Suresh Parmar; 10.04.2016