Вставьте данные в улей, используя мультидлиметр - PullRequest
0 голосов
/ 08 января 2019

как вставить данные в улей с помощью мультидельметра, а между столбцами разделитель не указан.

Ниже мои данные:

25380 20130101  2.514 -135.69   58.43     8.3     1.1     4.7     4.9     5.6     0.01 C     1.0    -0.1     0.4    97.3    36.0    69.4 -99.000 -99.000 -99.000 -99.000 -99.000 -9999.0 -9999.0 -9999.0 -9999.0 -9999.0
25380 20130102  2.514 -135.69   58.43     3.0    -0.3     1.4     1.2     0.0     0.35 C     1.3    -1.0    -0.1   100.0    89.5    98.2 -99.000 -99.000 -99.000 -99.000 -99.000 -9999.0 -9999.0 -9999.0 -9999.0 -9999.0

Я хочу вставить только первые 7 столбцов в мою таблицу кустов, и у меня есть текстовый файл для вышеуказанных данных.

скрипт создания таблицы:

CREATE TABLE hotcold (a int,b int,c float,d float,e float,f float,g float,h string,i string,j string,k string,l string,m string,n string,o string,p string,q string,
r string,s string,t string,u string,v string,w string,x string,y string,z string,aa string,bb string,cc string,dd string,ee string
) 
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ('input.regex'='\\s+'); 

Мой скрипт вставки данных приведен ниже:

LOAD DATA LOCAL INPATH '/home/cloudera/WeatherData.txt' into table hotcold;

Ниже приведен мой выбор оператора и ошибка:

select * from hotcold;

Ошибка:

Failed with exception java.io.IOException:org.apache.hadoop.hive.serde2.SerDeException: Number of matching groups doesn't match the number of columns

1 Ответ

0 голосов
/ 08 января 2019

Каждый столбец должен иметь соответствующую группу захвата () в регулярном выражении.

В приведенном ниже примере первая группа в начале строки ^(\\d+) - соответствует положительному целому числу,

\\s+ - один или несколько разделителей пробелов,

вторая группа захвата соответствует положительному целому числу (\\d+),

снова \\s+ - один или несколько разделителей пробелов,

третья группа захвата - ([+-]?[0-9.]+) - число с плавающей запятой, не очень строгий формат, допускающий знак + - и любую комбинацию дидитов и точек

и .* в конце, позволяющие любым символам в конце строки, не захваченным, добавить все остальные столбцы в регулярное выражение, мой пример содержит регулярное выражение для трех столбцов (три группы захвата):

WITH SERDEPROPERTIES ('input.regex'='^(\\d+)\\s+(\\d+)\\s+([+-]?[0-9.]+).*') 

Прочтите это для более подробной информации: Использование регулярных выражений для извлечения полей для таблиц кустов

...