Я пытаюсь вставить вычисляемый раздел.Значение раздела должно быть вычислено из ключевого столбца.Предположим, что key_2 в примере всегда имеет 10 символов.Последние 3 символа, которые я хочу использовать в разделе.Мне нужно динамическое разбиение.
Моя таблица похожа на эту:
DROP TABLE exampledb.exampletable;
CREATE TABLE exampledb.exampletable (
key_1 STRING,
key_2 STRING,
col_1 STRING,
col_2 STRING
)
PARTITIONED BY (my_part STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\u0001'
;
Я пробовал несколько вариантов HQL ниже:
INSERT OVERWRITE TABLE exampledb.exampletable
PARTITION(my_part)
SELECT
key_1,
key_2,
col_1,
col_2,
SUBSTR(key_2, -3) as my_part -- not sure how to insert partition
FROM exampledb.exampletable_temp;
Я не могне могу понять, что является правильным решением для этого.Я всегда получаю синтаксическую ошибку.
Знает ли Enyone решение для этого?Спасибо
ОБНОВЛЕНИЕ:
FAILED: SemanticException Partition spec {my_part=null} contains non-partition columns
ОБНОВЛЕНИЕ 2:
Я также пытался избежать значений NULLиспользуя это решение (как было предложено ниже, но ошибка та же):
INSERT OVERWRITE TABLE hvdb_as_aqua_guk_core.hvtb_aqua_guk_finding_mgn
PARTITION(my_part) ( key_1, key_2, col_1, col_2, my_part )
SELECT
key_1,
key_2,
col_1,
col_2,
SUBSTR(key_2, -3) as my_part -- not sure how to insert partition
FROM hvdb_as_aqua_guk_core.hvtb_aqua_guk_finding_mgn_temp2
WHERE key_2 IS NOT NULL
AND SUBSTR(key_2, -3) IS NOT NULL;