Использование зарезервированных слов SQL в Hive при создании внешней временной таблицы - PullRequest
0 голосов
/ 16 февраля 2019

Мне нужно создать внешнюю таблицу кустов из местоположения hdfs, где один столбец в файле имеет зарезервированное имя (конец).

При запуске скрипта я получаю сообщение об ошибке: «не удается распознать ввод около 'end' 'STRUCT' '<' в спецификации столбца" </p>

Я нашел 2 решения.

Первый - установить hive.support.sql11.reserved.keywords = false, но эта опция была удалена.https://issues.apache.org/jira/browse/HIVE-14872

Второе решение заключается в использовании заключенных в кавычки идентификаторов (column).

Но в этом случае я получаю ошибку: "org.apache.hadoop.hive.serde2.SerDeException: org.codehaus.jackson.JsonParseException: непредвиденный символ ('c' (код 99)): ожидал запятую для разделения записей OBJECT "

Это мой код для создания таблицы:

CREATE TEMPORARY EXTERNAL TABLE ${tmp_db}.${tmp_table}
(
    id STRING,
    email STRUCT<string:STRING>,
    start STRUCT<long:BIGINT>,
    end STRUCT<long:BIGINT>
)
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
LOCATION '${input_dir}';

Невозможно переименовать столбец.

Кто-нибудь знает решение этой проблемы?Или, может быть, какие-нибудь идеи?Заранее большое спасибо!

1 Ответ

0 голосов
/ 16 февраля 2019

вы можете попробовать ниже.

hive> set hive.support.quoted.identifiers=column;
hive> create temporary table sp_char ( `#` int, `end` string);

OK Время выполнения: 0,123 секунды

OK
Time taken: 0.362 seconds
hive>

Когда вы устанавливаете свойство улья hive.support.quoted.identifiers=column, все значения внутри обратных тиков рассматриваются как литералы,Другое значение для указанного выше свойства: none , когда для него установлено значение none, вы можете использовать регулярное выражение для оценки значения столбца или выражения.

Надеюсь, это поможет

...