我正在尝试向 exasol 中的表中添加几百万行,其中一列应该具有递增的整数值(1 - xmio)。我无法让我的 python 脚本并行运行并将负载分配到集群中的不同节点。因此,该过程需要数天才能完成,这还不够。
由于 CSV-Import 在 exasol 中是并行的,我在本地创建了一个 250mio 行的 CSV,将其压缩并上传到表中,这是迄今为止最快的方法,需要 7 分钟(受我的上传速度限制)。
其他方法:
CREATE SCRIPT BIG1 (bound) AS
i = 0
while i < bound do
query([[insert into USER_XXXXX.BIG values (:n, null, null, null, null, null)]], {n=i})
i = i+1
end
/
EXECUTE SCRIPT BIG1(250000000);
非常幼稚的方法,因为插入速度很慢,需要数年才能完成
CREATE PYTHON SCALAR SCRIPT USER_XXXXX.BIG2 ("AMOUNT_TO_CREATE" DECIMAL(18,0))
EMITS (val DECIMAL(18,0), val BOOLEAN, val BOOLEAN, val BOOLEAN, val BOOLEAN, val BOOLEAN) AS
def generate_sql_for_import_spec(import_spec):
return "SELECT USER_XXXXX.BIG2("+import_spec.parameters["AMOUNT_TO_CREATE"]+")"
def run(ctx):
for i in range(1, ctx.AMOUNT_TO_CREATE + 1):
ctx.emit(i, None, None, None, None, None)
/
IMPORT INTO USER_XXXXX.BIG FROM SCRIPT USER_XXXXX.BIG2 WITH AMOUNT_TO_CREATE='250000000';
工作得更好,完全在服务器上运行。执行大约需要 33 分钟
我了解,该脚本不能按原样并行运行。很容易将其划分为 50Mio 块并在 5 个节点上运行。不幸的是,我不知道如何连接到其他节点或将脚本执行分配给集群中的特定节点。