Redshift CREATE TABLE Ошибка - недопустимые символы - PullRequest
0 голосов
/ 12 января 2019

У меня есть два стола Redshift. Я могу сделать выбор * в JOIN между ними (соединение выполняется в столбце id):

SELECT * FROM
table1 t1
LEFT JOIN table2 t2
ON t1.id = t2.user_id

Однако, когда я оборачиваю это утверждение в предложение CREATE TABLE, я получаю следующее:

error: Invalid characters: code: 8001 context: Only ASCII characters are allowed in fixed length strings. Invalid ASCII char: c3 a1 query: 5183418 location: funcs_string.cpp:1545

c3a1, похоже, не является символом ASCII. Согласно сообщениям Redshift и на форуме , VARCHAR может работать с 4-байтовыми символами. Поэтому я подумал, что это может быть проблема с выбранным столбцом, который не был правильно приведен, поэтому я попробовал следующее:

CREATE TABLE table3 AS
SELECT CAST(t1.id AS VARCHAR(255)) 
FROM table1 t1
LEFT JOIN table2 t2
ON t1.id = t2.user_id

Но я все еще получаю ту же ошибку.

Я могу успешно СОЗДАТЬ ТАБЛИЦУ в SELECT * для t1 и t2 независимо, если я не выполняю соединение между ними.

Я в растерянности из-за того, что может здесь происходить. Стоит отметить, что в одной из таблиц (t2) имеется довольно сложный набор REGEXP_SUBSTR, извлекающий значения из JSON; Я не уверен, что это уместно, учитывая, что соединение не удается, даже если я ничего не выбираю из t2.

1 Ответ

0 голосов
/ 12 января 2019

Согласно моему комментарию, эта проблема вызвана условием JOIN запроса, а не столбцами в наборе результатов.

Похоже, что происходит, когда один из столбцов в соединении является типом данных CHAR, а другой - VARCHAR Redshift неявно приводит тип данных VARCHAR к CHAR для оценки объединения. Однако, поскольку CHAR не допускает символы, не входящие в ASCII, если они есть в столбце VARCHAR, это приведет к ошибке и приведет к отображаемой ошибке.

Обходной путь должен привести столбец CHAR к соединению VARCHAR, что должно означать, что обе стороны объединения оцениваются как VARCHAR.

См. https://docs.aws.amazon.com/redshift/latest/dg/r_Character_types.html#r_Character_types-char-or-character

Столбец CHAR может содержать только однобайтовые символы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...