Улей / Билайн: создание таблицы с подмассивом
Я пытаюсь создать таблицу в Hive с помощью Beeline. Данные хранятся в HDFS в виде файлов паркета и имеют следующую схему:
{
"object_type":"test",
"heartbeat":1496755564224,
"events":[
{
"timestamp":1496755582985,
"hostname":"hostname1",
"instance":"instance1",
"metrics_array":[
{
"metric_name":"metric1_1",
"metric_value":"value1_1"
}
]
},
{
"timestamp":1496756626551,
"hostname":"hostname2",
"instance":"instance1",
"metrics_array":[
{
"metric_name":"metric2_1",
"metric_value":"value2_1"
}
]
}
]
}
Мой скрипт hql, использованный для создания таблицы, выглядит следующим образом:
set hive.support.sql11.reserved.keywords=false;
CREATE DATABASE IF NOT EXISTS datalake;
DROP TABLE IF EXISTS datalake.test;
CREATE EXTERNAL TABLE IF NOT EXISTS datalake.test
(
object_type STRING,
heartbeat BIGINT,
events STRUCT <
metrics_array: STRUCT <
metric_name: STRING,
metric_value: STRING
>,
timestamp: BIGINT,
hostname: STRING,
instance: STRING
>
)
STORED AS PARQUET
LOCATION '/tmp/test/';
Вот ошибка, которую я имею, когда я делаю SELECT * FROM datalake.test:
Ошибка: java.io.IOException: org.apache.parquet.io.ParquetDecodingException: не может прочитать значение в 0 в блоке -1 в файле hdfs://tmp/test/part-r-00000-7e58b193-a08f-44b1-87fa-bb12b4053bdf.gz.parquet (состояние =, код =0)
Есть идеи?
Спасибо!