我可以从SQL终端在所有分区(使用@GetPartitionKeys)中执行分区过程吗?

时间:2019-07-16 16:35:45

标签: voltdb

我需要执行一次任务来更新大型数据库中的所有行。我想尽快这样做。每行都需要读取,并在通过算法修改的列中具有一个值,然后使用转换后的值进行更新。我已经写了一个分区存储过程来做到这一点。

我知道此页面上的示例:https://docs.voltdb.com/UsingVoltDB/sysprocgetpartitionkeys.php

我宁愿不必编写Java客户端来在每个分区中执行此过程,并且理想情况下是要调用@GetPartitionKeys,然后在sqlcmd中对每个值执行存储过程。

1 个答案:

答案 0 :(得分:0)

我找到了一种使用bash中管道的方法:

echo "exec @GetPartitionKeys INTEGER;" | sqlcmd --output-skip-metadata | awk '{print $2}' | xargs -n 1 sh -c 'echo "exec YourPartitionedProcedure $0;" | sqlcmd'

这将使用分区键列,然后对返回的每个分区键执行一次YourPartitionedProcedure。您可以根据需要在$ 0之后添加其他参数。您也可以根据需要将INTEGER切换为STRING。