Вставьте данные в улей, используя мультидлиметр
Как вставить данные в улей с помощью мультиделяметра и между столбцом разделитель не указан.
Ниже приведены мои данные:
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 ответ
Каждый столбец должен иметь соответствующую группу захвата ()
в регулярном выражении
В приведенном ниже примере первая группа в начале строки ^(\\d+)
- соответствует положительному целому числу,
\\s+
- один или несколько разделителей пробелов,
вторая группа захвата соответствует положительному целому числу (\\d+)
,
снова \\s+
- один или несколько разделителей пробелов,
третья группа захвата - ([+-]?[0-9.]+)
- число с плавающей точкой, не очень строгий формат, допускающий знак +- и любую комбинацию точек и точек
а также .*
в конце, разрешив любые символы в конце строки, не захваченные, добавить все остальные столбцы в регулярное выражение, мой пример содержит регулярное выражение для трех столбцов (три группы захвата):
WITH SERDEPROPERTIES ('input.regex'='^(\\d+)\\s+(\\d+)\\s+([+-]?[0-9.]+).*')
Прочитайте это для более подробной информации: Использование регулярных выражений для извлечения полей для таблиц кустов