Ошибка копирования данных из S3 в AWS Redshift с помощью Psycopg2 - PullRequest
0 голосов
/ 04 сентября 2018

При выполнении команды COPY с использованием psycopg2 я получаю сообщение об ошибке:

psycopg2.ProgrammingError: unterminated quoted string at or near "'"
LINE 12:    NULL as '

Вот мой оригинальный запрос:

"""copy dcm_floodlight_raw_abg_stg (COLUMN_NAMES)
from 'S3_BUCKET_PATH'
CREDENTIALS 'aws_access_key_id=KEY;aws_secret_access_key=SECRET'
gzip
DELIMITER '\t'
DATEFORMAT as 'yyyy-mm-dd'
BLANKSASNULL 
TRUNCATECOLUMNS 
FILLRECORD
MAXERROR 100
ACCEPTINVCHARS as '?'
NULL as '\0';"""

Не совсем уверен, почему я получаю эту ошибку, поскольку она не выдает эту ошибку для любых других одинарных кавычек.

1 Ответ

0 голосов
/ 05 сентября 2018

При возникновении проблем с запросом вы можете использовать функцию mocoprify psycopg2 , чтобы увидеть, есть ли проблема с вашей строкой. Он также попытается интерполировать любые параметры, что может быть хорошей проверкой. Поскольку у меня не было объекта курсора, чтобы вызвать его, я сделал это вместо:

print psycopg2.extensions.adapt(YOUR_QUERY).getquoted()

В вашем случае это дает:

>>> import psycopg2
>>> print psycopg2.extensions.adapt(YOUR_QUERY).getquoted()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: A string literal cannot contain NUL (0x00) characters.

>>> print psycopg2.extensions.adapt('\\0').getquoted()
'\\0'
>>>

Так что вы можете видеть, что ему не нравится '\0'. Если вы избежите обратной косой черты, как предполагает Джон Ротенштейн, psycopg2 примет запрос, но он может не дать вам того, что вы хотите, для вашего нулевого значения. Документация предполагает, что она должна работать, если вы можете разобраться с интерполяцией.

...