2016-04-05 4 views
1

Я использую cqlsh для добавления данных в Cassandra с помощью запроса BATCH, и я могу загрузить данные с помощью флага «-e», но а не из файла с использованием флага «-f». Я думаю, это потому, что файл локальный, а Cassandra удален. Подробности ниже:Проблемы с использованием флага «-f» в CQLSH для запуска файла query.cql

Это образец моего запроса (есть несколько строк для вставки, очевидно):

BEGIN BATCH; 
INSERT INTO keyspace.table (id, field1) VALUES ('1','value1'); 
INSERT INTO keyspace.table (id, field1) VALUES ('2','value2'); 
APPLY BATCH; 

Если я ввожу запрос через флаг «-e», то он не работает без проблем:

>cqlsh -e "BEGIN BATCH; INSERT INTO keyspace.table (id, field1) VALUES ('1','value1'); INSERT INTO keyspace.table (id, field1) VALUES ('2','value2'); APPLY BATCH;" -u username -p password -k keyspace 99.99.99.99 

Но если я сохранить запрос в текстовый файл (query.cql) и позвонить, как показано ниже, я получаю следующий результат:

>cqlsh -f query.cql -u username -p password -k keyspace 99.99.99.99 

Using 3 child processes 

Starting copy of keyspace.table with columns ['id', 'field1']. 
Processed: 0 rows; Rate:  0 rows/s; Avg. rate:  0 rows/s 
0 rows imported from 0 files in 0.076 seconds (0 skipped). 

Кассандра, очевидно, принимает команду, но не читает файл, я предполагаю, что это потому, что Cassandra находится на удаленном сервере, и файл находится локально. Экземпляр Cassandra, который я использую, - это управляемая служба с другими пользователями, поэтому у меня нет доступа к ней для копирования файлов в папки.

Как выполнить этот запрос на удаленном экземпляре Cassandra, где у меня есть только доступ к CLI?

Я хочу, чтобы иметь возможность использовать другой инструмент для создания файла query.cql и иметь пакетное задание, запускающее команду с флагом -f, но я не могу понять, как я ошибаюсь.

ответ

1

Выполняется local клиент cqlsh, поэтому он должен иметь доступ к вашему локальному файлу query.cql.

Попробуйте удалить BEGIN BATCH и APPLY BATCH и просто дайте 2 INSERT заявления в query.cql и повторите снова.

Еще одно решение для вставки данных быстро является обеспечение CSV файл и использовать COPY команду внутри cqlsh. Читать этот блог: http://www.datastax.com/dev/blog/new-features-in-cqlsh-copy

Scripting вставки генерируя один cqlsh -e '...' на линию осуществима, но это будет ужасно медленно

+0

Благодаря doanduyhai. Исправлена ​​проблема с удалением операторов BEGIN BATCH и 'APPLY BATCH'. Я посмотрю на команду ** COPY **, вы знаете, есть ли какой-то конкретный формат, необходимый для ** csv ** файла? –

+0

Команда cqlsh COPY очень гибкая в отношении форматирования CSV. Просто введите 'help COPY' внутри ** cqlsh **, чтобы перечислить все доступные параметры – doanduyhai