Вставить в таблицу Hive специальный символ в разделе - PullRequest
0 голосов
/ 14 октября 2019

У меня есть следующая таблица, созданная таким образом:

CREATE EXTERNAL TABLE `my_table`(
  `user_id` string COMMENT '', 
  `this_date` string COMMENT '')
  partitioned by (
    `version` string COMMENT '')
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION
  's3://bucket/sub_bucket/sub_sub_bucket/table_folder'
TBLPROPERTIES (
  'parquet.compression'='SNAPPY')

И я хотел бы сделать вставку в запрос:

insert into my_talbe values ('1', '2018-12-01', "2019-01-01 12:33:47.456890")

Но она не удалась.

Я выполняю этот запрос для Афины, поэтому ошибка не говорит о многом, но я уверен, что проблема заключается в следующем. Я попробовал следующее

insert into my_talbe values ('1', '2018-12-01', "2019-01-01 12 33 47.456890")

И это работает.

Есть ли у меня может быть: в папке раздела ?? Мне нужно, чтобы он был совместимым, созданным без использования Athena (Hive).

1 Ответ

0 голосов
/ 16 октября 2019

Кажется, что в обоих операторах вставки отсутствует разделительная часть.

Для многораздельной таблицы tab1 со столбцом раздела и двумя другими столбцами данные должны быть вставлены, как показано ниже,

INSERT INTO tab1 partition ("abcdef") values (1, 2)

Таким образом, предоставленный оператор INSERT должен выдавать ошибку, подобную этой

Error while compiling statement: FAILED: SemanticException 1:12 Need to specify partition columns because the destination table is partitioned. Error encountered near token 'my_table'

Кроме того, отвечая на ваш оригинальный вопрос - в Hadoop вы не можете создавать файлы или каталоги,иметь символы / или : как часть своего имени.

Таким образом, лучший способ создания раздела - исключить эти символы из имени.

...