Проглатывание десятичной дроби в таблице ульев Авро Серде - PullRequest
0 голосов
/ 05 апреля 2019

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

create database test_avro;
use test_avro_table;
create external table test_table(
  name string,
  salary decimal(17,2),
  country string
)
row format delimited
fields terminated by ","
STORED AS textfile;


LOAD DATA LOCAL INPATH '/home/appsdesdssu/data/CACS_POC/data/' INTO TABLE 
test_table;

create external table test_table_avro
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.literal'='{
"name": "my_record",
"type": "record",
"fields": [
 {"name":"name", "type":"string"},
 {"name":"salary","type": "bytes","logicalType": "decimal","precision": 
 17,"scale": 2},
 {"name":"country", "type":"string"}
 ]}');

 insert overwrite table test_table_avro  select * from test_table;

Здесь я получаю сообщение об ошибке

FAILED: UDFArgumentException Only string, char, varchar or binary data can be cast into binary data types.

Файл данных:

steve,976475632987465.257,USA
rogers,349643905318384.137,mexico
groot,534563663653653.896,titan

Если я что-то здесь упустил, пожалуйста, дайте мне знать.

1 Ответ

0 голосов
/ 05 апреля 2019

Hive до сих пор не поддерживал десятичную версию в двоичной. Таким образом, мы должны обойти это, сначала преобразовав его в строку, а затем в двоичный файл. Итак, ниже строк

 insert overwrite table test_table_avro  select * from test_table;

необходимо изменить на

 insert overwrite table test_table_avro  select name,cast(cast(salary as string) as binary),country from test_table;
...