Имена столбцов NULL в результатах запроса Hive

Я загрузил файлы .txt погоды с сайта NOAA, которые выглядят так:

WBAN,Date,Time,StationType,SkyCondition,SkyConditionFlag,Visibility,VisibilityFlag,WeatherType,WeatherTypeFlag,DryBulbFarenheit,DryBulbFarenheitFlag,DryBulbCelsius,DryBulbCelsiusFlag,WetBulbFarenheit,WetBulbFarenheitFlag,WetBulbCelsius,WetBulbCelsiusFlag,DewPointFarenheit,DewPointFarenheitFlag,DewPointCelsius,DewPointCelsiusFlag,RelativeHumidity,RelativeHumidityFlag,WindSpeed,WindSpeedFlag,WindDirection,WindDirectionFlag,ValueForWindCharacter,ValueForWindCharacterFlag,StationPressure,StationPressureFlag,PressureTendency,PressureTendencyFlag,PressureChange,PressureChangeFlag,SeaLevelPressure,SeaLevelPressureFlag,RecordType,RecordTypeFlag,HourlyPrecip,HourlyPrecipFlag,Altimeter,AltimeterFlag
00102,20150101,0001,0,OVC043, ,10.00, , , ,27, ,-2.8, ,26, ,-3.1, ,25, ,-3.9, , 92, , 0, ,000, , , ,30.05, , , , , ,30.36, ,AA, , , ,30.23, 
00102,20150101,0101,0,OVC045, ,10.00, , , ,27, ,-2.8, ,26, ,-3.1, ,25, ,-3.9, , 92, , 6, ,080, , , ,30.07, , , , , ,30.37, ,AA, , , ,30.25, 
00102,20150101,0201,0,OVC047, ,10.00, , , ,26, ,-3.3, ,25, ,-3.7, ,24, ,-4.4, , 92, , 6, ,090, , , ,30.08, , , , , ,30.39, ,AA, , , ,30.26, 
00102,20150101,0301,0,OVC049, ,10.00, , , ,26, ,-3.3, ,25, ,-3.7, ,24, ,-4.4, , 92, , 7, ,100, , , ,30.09, , , , , ,30.40, ,AA, , , ,30.27, 

Затем я создал следующую таблицу:

CREATE EXTERNAL TABLE weather(WBAN STRING, `Date` STRING, Time STRING, StationType INT, SkyCondition STRING, SkyConditionFlag STRING, Visibility INT, VisibilityFlag STRING, WeatherType STRING, WeatherTypeFlag STRING, DryBulbFarenheit INT, DryBulbFarenheitFlag STRING, DryBulbCelsius DECIMAL, DryBulbCelsiusFlag INT, WetBulbFarenheit INT, WetBulbFarenheitFlag INT, WetBulbCelsius DECIMAL, WetBulbCelsiusFlag INT, DewPointFarenheit INT, DewPointFarenheitFlag INT, DewPointCelsius DECIMAL, DewPointCelsiusFlag INT, RelativeHumidity INT, RelativeHumidityFlag INT, WindSpeed INT, WindSpeedFlag INT, WindDirection INT, WindDirectionFlag INT, ValueForWindCharacter INT, ValueForWindCharacterFlag INT, StationPressure DECIMAL, StationPressureFlag INT, PressureTendency INT, PressureTendencyFlag INT, PressureChange INT, PressureChangeFlag INT, SeaLevelPressure DECIMAL, SeaLevelPressureFlag INT, RecordType STRING, RecordTypeFlag STRING, HourlyPrecip DECIMAL, HourlyPrecipFlag INT, Altimeter DECIMAL, AltimeterFlag INT) 
    COMMENT 'Our weather table in HIVE!' 
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
     LINES TERMINATED BY '\n' 
     LOCATION '/data/Weather';

Теперь, если я попробую простой запрос, например:

hive> select * from weather limit 10;

Я получаю результат, подобный следующему, и Null заменяет имена некоторых столбцов!

WBAN    Date    Time    NULL    SkyCondition    SkyConditionFlag    NULL    VisibilityFlag  WeatherType WeatherTypeFlag NULL    DryBulbFarenheitFlag    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULLNULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    RecordType  RecordTypeFlag  NULL    NULL    NULL    NULL
00102   20150101    0001    0   OVC043      10              27      -3  NULL    26  NULL    -3  NULL25  NULL    -4  NULL    NULL    NULL    NULL    NULL    0   NULL    NULL    NULL    30  NULL    NULL    NULL    NULL    NULL    30  NULL    AA      NULL    NULL    30  NULL
00102   20150101    0101    0   OVC045      10              27      -3  NULL    26  NULL    -3  NULL25  NULL    -4  NULL    NULL    NULL    NULL    NULL    80  NULL    NULL    NULL    30  NULL    NULL    NULL    NULL    NULL    30  NULL    AA      NULL    NULL    30  NULL
00102   20150101    0201    0   OVC047      10  

как вы могли заметить, четвертый и седьмой столбцы (и многие последующие) имеют наклон NULL, когда они должны быть StationType и Visibility... и т.д. соответственно!

Даже если бы я попытался:

hive> select Visibility from weather limit 10;

Я получу правильный результат, но с заголовком/именем столбца NULL!!!

Почему имена/названия столбцов NULL?!


person abutmah    schedule 13.11.2016    source источник
comment
Это из-за первой строки в файле данных.. ;)   -  person Sathiyan S    schedule 13.11.2016


Ответы (2)


Интересный вопрос, мне потребовалась минута, чтобы понять, что происходит, но при правильном знании улья это на самом деле очевидно!

  1. Первое, на что следует обратить внимание, это то, что значения NULL встречаются в столбцах, которые не имеют строкового типа.
  2. Второе, что нужно понять, это то, что hive (в отличие, например, от beeline) обычно НЕ печатает заголовки столбцов над вашим выбором.

Итак, складываем 1 и 2:

  • С именами столбцов все в порядке, как вы увидите из запроса типа Describe Weather.
  • Файл, который вы используете в качестве источника данных, имеет имена столбцов в первой строке. Теперь они составляют первую строку вашей таблицы улья. Конечно, у столбцов типа string нет проблем с обработкой этих данных, но столбцы типа int будут отображать NULL, когда их попросят обработать строки, которые не могут быть правильно преобразованы в int.

Предположение:

Попробуйте избавиться от первой строки, желательно до создания внешней таблицы.

person Dennis Jaheruddin    schedule 13.11.2016

Чтобы добавить к комментарию Денниса выше, вы можете пропустить первую строку из вставки в вашу таблицу, если вы используете CSV SerDe следующим образом:

CREATE EXTERNAL TABLE cases (
  id INT,
  case_number STRING,
  name STRING,
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
STORED AS TEXTFILE
LOCATION '/hdfs/path'
tblproperties("skip.header.line.count"="1");

Оперативная линия:

tblproperties("skip.header.line.count"="1")
person Emeka    schedule 01.05.2019