Cloudera - Hive / Impala Показать Создать таблицу - Ошибка с синтаксисом - PullRequest
1 голос
/ 26 февраля 2020

Я делаю несколько автоматических c процессов для создания таблиц в Cloudera Hive.

Для этого я использую оператор show create table, который мне дает (например) следующий ddl:

CREATE TABLE clsd_core.factual_player (   player_name STRING,   number_goals INT ) PARTITIONED BY (   player_name STRING ) WITH SERDEPROPERTIES ('serialization.format'='1') STORED AS PARQUET LOCATION 'hdfs://nameservice1/factual_player'

Мне нужно запустить ddl в другом месте, чтобы создать таблица с тем же именем.

Однако, когда я запускаю этот код, я возвращаю следующую ошибку:

Error while compiling statement: FAILED: ParseException line 1:123 missing EOF at 'WITH' near ')'

И вручную удаляю эту часть "WITH SERDEPROPERTIES ('serialization.format'" = '1') "удалось создать таблицу с успехом.

Есть ли лучшая функция для извлечения таблиц ddls без информации SERDE?

1 Ответ

0 голосов
/ 26 февраля 2020

Первая проблема в вашем DDL состоит в том, что разделенный столбец не должен быть указан в столбцах spe c, только в partitioned by. Раздел - это папка с именем partition_column=value, и этот столбец хранится не в файлах таблиц, а только в каталоге разделов. Если вы хотите, чтобы столбец раздела находился в файлах данных, он должен иметь другое имя.

Вторая проблема заключается в том, что SERDEPROPERTIES является частью спецификации SERDE. Если вы не укажете SERDE, он не должно быть никаких сердечников. См. Это руководство: StorageFormat andSerDe

Фиксированный DDL:

 CREATE TABLE factual_player (number_goals INT) 
 PARTITIONED BY (player_name STRING) 
 STORED AS PARQUET
 LOCATION 'hdfs://nameservice1/factual_player';

STORED AS PARQUET уже подразумевает SERDE, INPUTFORMAT и OUPPUTFORMAT.

Если вы хотите указать SERDE с его свойствами, используйте этот синтаксис:

CREATE TABLE factual_player(number_goals int)
PARTITIONED BY (player_name string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
WITH SERDEPROPERTIES ('serialization.format'='1') --I believe you really do not need this
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION 'hdfs://nameservice1/factual_player'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...