Как выполнить чистый запрос AQL?

Я использую официальный пакет Aerospike для golang.

Есть ли способ получить список всех существующих индексов?

aql> показать индексы

Также я не нашел способа выполнить чистый запрос AQL.

Как я могу это сделать?

Обновление: я ищу что-то похожее на это, но для aerospike (пример из Rails) custom_query = "select * from users" result = ActiveRecord::Base.connection.execute(custom_query)


person Mike Bohoslavskyi    schedule 08.06.2017    source источник


Ответы (2)


AQL — это инструмент для администрирования и просмотра данных. На самом деле это не SQL Aerospike, поскольку Aerospike изначально не реализует язык запросов. Вместо этого все клиенты Aerospike предоставляют вам API для прямых вызовов get, put, scan, query, и они являются процедурными, а не декларативными, как SQL (где вы указываете, как вы хотите получить результат, а сервер определяет план запроса). Пиюш упомянул фантастический API фильтрации предикатов, который позволяет создавать сложные запросы поверх сканирования и запросов вторичного индекса.

В частности, к вашему вопросу о получении всех индексов, это то, для чего вы должны использовать команду info. Aerospike позволяет через него получать и задавать параметры конфига, получать широкий спектр метрик, запускать микробенчмарк и т.д. Все что нужно для администрирования и мониторинга.

Вы можете запустить sindex через автономный asinfo, или вы можете вызвать его с помощью информационная команда, которую предоставляет любой клиент.

asinfo -v "sindex"
person Ronen Botzer    schedule 09.06.2017
comment
Спасибо! Это именно то, что я ищу! - person Mike Bohoslavskyi; 11.06.2017

aql>show indexes — допустимая команда aql, которая должна показать вам все вторичные индексы, которые в настоящее время есть на сервере.

aql запускает API C ниже. Вы можете делать почти все с помощью AQL на элементарном уровне. Введите: aql>help, он выдаст вам все команды aql, вырежьте и вставьте! aql также хранит историю команд в текстовом файле, поэтому сохраняется в течение сеансов. aql>run 'filepath/filename' — это удобный способ сохранить все команды aql в текстовом файле и запустить их.

Re: запрос aql -- посмотрите: выберите * из ns. где ... вы можете выполнять запросы на равенство и диапазон, если у вас есть предварительно созданные вторичные индексы.

В Aerospike версии 3.12+ появилась фильтрация предикатов, т. е. ~ сложные запросы. Я не думаю, что aql был обновлен для их запуска.

ХТН.

person pgupta    schedule 08.06.2017
comment
Спасибо за ваш ответ! Похоже, мой вопрос был недостаточно конкретным. Основная проблема заключается в библиотеке aerospike для golang. Я не могу найти в библиотеке метод, который будет принимать строку запроса и аргумент, выполнять его и возвращать результат. Я ищу что-то похожее на это (пример из Rails) ActiveRecord::Base.connection.execute( "select * from users") - person Mike Bohoslavskyi; 08.06.2017
comment
Сомневаюсь, что ты сможешь это сделать. Aerospike не «понимает» SQL или SQL-подобные команды. AQL размечает и анализирует ваши строки, а затем преобразует их в вызовы функций Aerospike C с аргументами. Следовательно, возможности AQL ограничены по сравнению с клиентскими API. Насколько я знаю, ни один клиент Aerospike не будет анализировать строку запроса, подобную SQL, а затем отправлять переформулированный запрос на сервер Aerospike, используя формат API. - person pgupta; 08.06.2017
comment
Да, я понимаю, я привел SQL в качестве примера. Конечно, я не ожидаю от базы данных NoSQL понимания и обработки SQL: D - person Mike Bohoslavskyi; 08.06.2017
comment
Посмотрите на NewExecuteTask и структуру оператора. godoc.org/github.com/aerospike/aerospike-client-go# Утверждение Также обратите внимание на NewPredExp... Фильтрация предикатов может выполняться по результатам запроса вторичного индекса или сканирования. - person pgupta; 08.06.2017