Выполнение операторов cql с помощью сценария оболочки - PullRequest
0 голосов
/ 31 октября 2018

У меня есть сценарий оболочки ниже, который читает файл и обновляет таблицу. Но проблема с приведенным ниже кодом заключается в том, что для выполнения каждого оператора SQL установлено соединение. Я ищу рекомендации по улучшению этого кода.

#!/bin/bash
input="/Users/temp/newfile.txt"
while IFS= read -r var
do
 echo "update keyspace.tableName set randomColumn='randomText' where random_id='$var'; exit" | ./cqlsh serverName  -u username -p password
if [ $? -eq 0 ]; then
   echo SUCCESS
   echo "select random_id,randomColumn from keyspace.tableName where random_id='$var'; exit" | ./cqlsh serverName  -u username -p password
else
    echo FAIL
fi
done < "$input"

Ответы [ 3 ]

0 голосов
/ 01 ноября 2018

Я предлагаю сделать это с драйвером Python , если вы хотите повысить производительность.

Этот пример должен быть примерно эквивалентен:

#! /usr/bin/env python3

from cassandra.cluster import Cluster
from cassandra.auth import PlainTextAuthProvider

cluster = Cluster(auth_provider=PlainTextAuthProvider(username='cassandra', password='cassandra'))
session = cluster.connect()

with open("/Users/temp/newfile.txt") as f:
    for line in f:
        try:
            rows = session.execute("UPDATE keyspace.tableName SET randomColumn='randomText' WHERE random_id=%(var)s", {'var'=line})
            print("SUCCESS")
            for r in rows:
                print(r)
        except Exception:
            print("FAIL")

edit: вы даже можете пойти дальше и использовать подготовленные операторы и асинхронные запросы , которые обеспечат очень значительное повышение производительности, если вы делаете большой объем запросов.

0 голосов
/ 01 ноября 2018

Я предлагаю использовать cqlsh -e с xargs:

#!/bin/bash
input="/Users/temp/newfile.txt"
while IFS= read -r var
do
    echo "update keyspace.tableName set randomColumn='randomText' where random_id='$var';" | xargs cqlsh serverName  -u 'username' -p 'password' -e
if [ $? -eq 0 ]; then
    echo SUCCESS
    echo "select random_id,randomColumn from keyspace.tableName where random_id='$var';" | xargs cqlsh serverName  -u 'username' -p 'password' -e
else
    echo FAIL
fi
done < "$input"
0 голосов
/ 01 ноября 2018

cqlsh имеет опцию -f, которая позволяет запускать оператор cql из файла. Вы можете сгенерировать операторы cql, проанализировав ваш newfile.txt, а затем запустить cqlsh с параметром -f

На самом базовом уровне вы можете сделать что-то вроде этого:

#!/bin/bash
input="newfile.txt"
while IFS= read -r var
do
 echo "update ks.t1 set name='randomText' where id=$var;" >> result 
done < "$input"

./cqlsh serverName  -u username -p password -f result

if [ $? -eq 0 ]; then
   echo SUCCESS
   echo "select * from keyspace.tableName; exit" | ./cqlsh serverName  -u username -p password
else
    echo FAIL
fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...