Redshift表上并发插入的问题

时间:2019-07-18 15:19:31

标签: python amazon-web-services amazon-redshift aws-glue pg8000

我正在尝试使用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)

我希望插入/更新操作不会在日志表中发生锁定/错误提示

1 个答案:

答案 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命令执行批量加载。这将更加有效,因为它可以跨所有节点并行执行负载。