#amazon-web-services #amazon-redshift #psycopg2
Вопрос:
Я настроил таблицу в красном смещении и теперь хочу заполнить ее данными из корзины s3 в другом регионе. Я использую команду КОПИРОВАНИЯ, но получаю сообщение об ошибке:
"psycopg2.errors.InternalError_: Cannot COPY into nonexistent table customcontent_table"
Я не могу понять, как это исправить, так как таблица явно уже существует. Есть ли ошибка в моем синтаксисе? Мой код:
sql = "copy customcontent_table from 'test/2021/03/29/20/20/CustomContent.snappy.parquet' credentials 'aws_access_key_id=AA;aws_secret_access_key=zz' format parquet region 'us-west-2';"
cur = con.cursor()
cur.execute("begin;")
cur.execute(sql)
cur.execute("commit;")
con.close()
Ответ №1:
Таким образом, ваша ссылка на объект S3 выглядит неправильной. Должно быть что-то вроде (согласно документам AWS):
copy listing
from 's3://mybucket/data/listings_pipe.txt'
access_key_id '<access-key-id>'
secret_access_key '<secret-access-key'
...;
Похоже, у вас есть только ключ объекта, но нет префикса s3:// и имени корзины. Я не думаю, что это причина этой ошибки, но вы захотите ее исправить.
Моя первоначальная мысль о том, почему вы получаете это сообщение об ошибке, заключается в том, что таблица не найдена в этом сеансе. Сеансы красного смещения имеют концепцию «пути поиска», которая указывает текущему сеансу, где искать таблицы (какие схемы). Если это так, то самое простое решение (или, по крайней мере, самое простое для объяснения) — просто добавить схему таблицы в команду КОПИРОВАНИЯ:
copy schema_name.customcontent_table from ...
Это подскажет Redshift, где именно найти таблицу. Если вы хотите задать путь поиска, вы можете прочитать об этом здесь — https://docs.aws.amazon.com/redshift/latest/dg/r_search_path.html
Если это не проблема, то нам нужно копнуть глубже.