我正在尝试使用AWS胶上的python脚本并发地将插入/更新处理到redshift数据库中。我正在使用pg8000库执行所有数据库操作。并发插入/更新失败,错误为Traceback (most recent call last):
File "/home/<me>/anaconda3/bin/dewave-infer", line 11, in <module>
sys.exit(infer())
File "/home/<me>/anaconda3/lib/python3.6/site-packages/DeWave/cmdinfer.py", line 12, in infer
blind_source_separation(args.input_file, args.model_dir)
File "/home/<me>/anaconda3/lib/python3.6/site-packages/DeWave/infer.py", line 207, in blind_source_separation
librosa.output.write_wav(input_file[0:-4]+"_source1.wav", source1, SAMPLING_RATE)
File "<decorator-gen-6>", line 2, in write_wav
File "/home/<me>/anaconda3/lib/python3.6/site-packages/librosa/util/decorators.py", line 58, in __wrapper
return func(*args, **kwargs)
File "/home/<me>/anaconda3/lib/python3.6/site-packages/librosa/output.py", line 239, in write_wav
util.valid_audio(y, mono=False)
File "/home/<me>/anaconda3/lib/python3.6/site-packages/librosa/util/utils.py", line 171, in valid_audio
raise ParameterError('Audio buffer is not finite everywhere')
librosa.util.exceptions.ParameterError: Audio buffer is not finite everywhere
。在研究错误时,我发现该错误与Serializable Isolation有关。
任何人都可以看一下代码并确保插入/更新发生时不会发生冲突吗?
我尝试在调用类中使用随机的睡眠时间。它适用于一些情况,但后来随着工人人数的增加而增加。插入/更新失败。
Error Name:1023 ,Error State:XX000)
我希望插入/更新操作不会在日志表中发生锁定/错误提示
答案 0 :(得分:0)
Amazon Redshift不能与许多小的INSERT
小语句配合使用。
来自Use a Multi-Row Insert - Amazon Redshift:
如果不是COPY命令,并且您需要SQL插入,请尽可能使用多行插入。一次仅添加一行或几行数据时,数据压缩效率很低。
多排刀片通过分批一系列刀片来提高性能。下面的示例使用单个INSERT语句将三行插入到四列表中。这仍然是一个很小的插入,只是为了说明多行插入的语法而显示。
insert into category_stage values
(default, default, default, default),
(20, default, 'Country', default),
(21, 'Concerts', 'Rock', default);
或者,将数据输出到Amazon S3,然后使用COPY
命令执行批量加载。这将更加有效,因为它可以跨所有节点并行执行负载。