使用Python将迭代数据插入Cassandra的正确方法

时间:2017-03-07 17:28:41

标签: python python-3.x cassandra datastax

让我们说我的cassandra表定义如下:

CREATE TABLE IF NOT EXISTS {} (
            user_id bigint ,
            username text,
            age int,
            PRIMARY KEY (user_id)
        );

我在每个列表中有3个相同大小的列表,包含1 000 000个记录。使用像这样的for循环插入数据是一个好习惯:

for index, user_id in enumerate(user_ids):
    query = "INSERT INTO TABLE (user_id, username, age) VALUES ({0}, '{1}', {1});".format(user_id, username[index] ,age[index])
    session.execute(query)

2 个答案:

答案 0 :(得分:1)

从查看获取started guide的python驱动程序开始,这可能是一个好主意。如果你已经看到那么道歉,但我认为值得一提。

一般来说,你创建你的会话对象,然后在你的循环中进行插入,可能使用类似预备语句的东西(在入门页面的下方进行了讨论),还有here和{{3} }

上面的例子将此作为一个很好的起点

user_lookup_stmt = session.prepare("SELECT * FROM users WHERE user_id=?")

users = []
for user_id in user_ids_to_query:
    user = session.execute(user_lookup_stmt, [user_id])
    users.append(user)

在讨论使用python驱动程序提高吞吐量时,您可能会发现here有帮助

您可能会发现this blog是一个有用的资源,特别是我发现这个示例使用的预备语句python driver github page也可能对您有帮助。

答案 1 :(得分:1)

同时执行的准备语句将是您最好的选择。驱动程序提供实用程序函数,用于同时执行带有参数序列的语句,就像使用列表一样:execute_concurrent_with_args

Zipping你的列表将产生一系列适合输入该函数的参数元组。

这样的事情:

prepared = session.prepare("INSERT INTO table (user_id, username, age) VALUES (?, ?, ?)")
execute_concurrent_with_args(session, prepared, zip(user_ids, username, age))