В таблице Hive должен быть хотя бы один столбец. Список столбцов может быть указан явно или предоставлен через внешнюю схему.
Для таблиц с большим количеством столбцов это может быть полезно. Указание каждого столбца вручную является утомительным и подверженным ошибкам, а их автоматическое заполнение желательно.
Этот подход иллюстрируется форматом Avro
Пример файла схемы (my_table.avsc
)
{
"type" : "record",
"name" : "dummy_record",
"namespace" : "so",
"doc" : "Test schema",
"fields" : [ {
"name" : "column1",
"type" : [ "null", "string" ],
"default" : null
},
{
"name" : "column2",
"type" : [ "null", "string" ],
"default" : null
}]
}
Загрузить файл схемы в HDFS
hadoop fs -mkdir /avsc-schemas
hadoop fs -put my_table.avsc /avsc-schemas
Создание таблицы Hive (столбцы не нужно указывать в операторе создания)
CREATE TABLE default.my_table
COMMENT 'V1.0'
ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
TBLPROPERTIES (
'avro.schema.url'='hdfs:///avsc-schemas/my_table.avsc');
Проверьте таблицу улья. У него два столбца, хотя ни один из них не был указан в операторе create.
desc default.my_table;
col_name data_type comment
column1 string
column2 string