Создание таблицы с помощью Regex Serde в Hive возвращает ошибку - PullRequest
1 голос
/ 22 апреля 2019

Я создал таблицу, используя Regex Serde в Hive. В Hue возвращается, что создание таблицы прошло успешно. Однако, когда я пытаюсь вернуть таблицу SELECT * FROM pricefile_edited или просмотреть таблицу по оттенку, она не работает, и я получаю сообщение об ошибке.

Данные состоят из 130 символов (каждая строка) без разделителя.

Кто-нибудь знает в чем проблема, и поможет? Спасибо

CREATE EXTERNAL TABLE pricefile_edited(
field1 STRING,
field2 STRING,
field3 STRING,
field4 STRING,
field5 STRING,
field6 STRING, 
field7 STRING,
field8 STRING,
field9 STRING,
field10 STRING,
field11 STRING,
field12 STRING,
field13 STRING,
field14 STRING,
field15 STRING,
field16 STRING,
field17 STRING,
field18 STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' 
 WITH SERDEPROPERTIES ("input.regex" = 
"(\\.{12})(\\.{1})(\\.{1})(\\.{24})(\\.{6})(\\.{6})(\\.{13})(\\.{6})(\\.{1})(\\.{4})(\\.{1})(\\.{3})(\\.{17})(\\.{9})(\\.{12})(\\.{1})(\\.{1})(\\.
{12})")
LOCATION '/user/hive/warehouse';

Я получаю эту ошибку:

Плохой статус для запроса TFetchResultsReq (fetchType = 0, operationHandle = TOperationHandle (hasResultSet = True, ifiedRowCount = Нет, operationType = 0, OperationID = THandleIdentifier (секрет = '\ xc3 \ xd7 \ x97 \ xd3coB \ xa1 \ x90P \ x9e \ Xab \ x82 \ xa4 \ xf4A', справ = '\ x80 \ xa1 \ x93 \ XE2 \ x10 \ xefJ \ xd9 \ XA3 \ XA3 \ XDB \ x1f \ x95 \ x85 \ x88 \ xb3')), ориентация = 4, maxRows = 100): TFetchResultsResp (статус = TStatus (ERRORCODE = 0, errorMessage = 'java.io.IOException: java.io.IOException: не файл: HDFS: //quickstart.cloudera: 8020 / пользователя / ульи / склад / категория, не SQLSTATE = None, infoMessages = [ '* org.apache.hive.service.cli.HiveSQLException: java.io.IOException: java.io.IOException: не файл: HDFS: //quickstart.cloudera: 8020 / пользователя / ульи / склад / категория: 25: 24' , 'Org.apache.hive.service.cli.operation.SQLOperation: getNextRowSet: SQLOperation.java: 463', 'Org.apache.hive.service.cli.operation.OperationManager: getOperationNextRowSet: OperationManager.java: 294', 'Org.apache.hive.service.cli.session.HiveSessionImpl: fetchResults: HiveSessionImpl.java: 769', 'Sun.reflect.GeneratedMethodAccessor20: взывать :: - 1', 'Sun.reflect.DelegatingMethodAccessorImpl: взывать: DelegatingMethodAccessorImpl.java: 43', 'Java.lang.reflect.Method: взывать: Method.java: 498', 'Org.apache.hive.service.cli.session.HiveSessionProxy: взывать: HiveSessionProxy.java: 78', 'Org.apache.hive.service.cli.session.HiveSessionProxy: доступ $ 000: HiveSessionProxy.java: 36', 'Org.apache.hive.service.cli.session.HiveSessionProxy $ 1: запуск: HiveSessionProxy.java: 63', 'Java.security.AccessController: doPrivileged: AccessController.java: -2', 'Javax.security.auth.Subject: DOAS: Subject.java: 422', 'Org.apache.hadoop.security.UserGroupInformation: DOAS: UserGroupInformation.java: 1917', 'Org.apache.hive.service.cli.session.HiveSessionProxy: взывать: HiveSessionProxy.java: 59', 'Com.sun.proxy $ Proxy21: fetchResults :: - 1', 'Org.apache.hive.service.cli.CLIService: fetchResults: CLIService.java: 462', 'Org.apache.hive.service.cli.thrift.ThriftCLIService: FetchResults: ThriftCLIService.java: 694', 'Org.apache.hive.service.cli.thrift.TCLIService $ Процессор $ FetchResults: GetResult: TCLIService.java: 1553', 'Org.apache.hive.service.cli.thrift.TCLIService $ Процессор $ FetchResults: GetResult: TCLIService.java: 1538', 'Org.apache.thrift.ProcessFunction: процесс: ProcessFunction.java: 39', 'Org.apache.thrift.TBaseProcessor: процесс: TBaseProcessor.java: 39', 'Org.apache.hive.service.auth.TSetIpAddressProcessor: процесс: TSetIpAddressProcessor.java: 56', 'Org.apache.thrift.server.TThreadPoolServer $ WorkerProcess: пробег: TThreadPoolServer.java: 286', 'Java.util.concurrent.ThreadPoolExecutor: runWorker: ThreadPoolExecutor.java: 1149', 'Java.util.concurrent.ThreadPoolExecutor $ Рабочий: пробег: ThreadPoolExecutor.java: 624', 'Java.lang.Thread: бежать: Thread.java: 748', '* java.io.IOException: java.io.IOException: не файл: HDFS: //quickstart.cloudera: 8020 / пользователя / ульи / склад / категория: 29: 4' , 'Org.apache.hadoop.hive.ql.exec.FetchOperator: getNextRow: FetchOperator.java: 508', 'Org.apache.hadoop.hive.ql.exec.FetchOperator: pushRow: FetchOperator.java: 415', 'Org.apache.hadoop.hive.ql.exec.FetchTask: принести: FetchTask.java: 140', 'Org.apache.hadoop.hive.ql.Driver: getResults: Driver.java: 2069', 'Org.apache.hive.service.cli.operation.SQLOperation: getNextRowSet: SQLOperation.java: 458', '* java.io.IOException: не файл: HDFS: //quickstart.cloudera: 8020 / пользователя / ульи / склад / категория: 32: 3' , 'Org.apache.hadoop.mapred.FileInputFormat: getSplits: FileInputFormat.java: 322','org.apache.hadoop.hive.ql.exec.FetchOperator: getNextSplits: FetchOperator.java: 363', 'org.apache.hadoop.hive.ql.exec.FetchOperator: getRecordReader: FetchOperator.java: 295', или.apache.hadoop.hive.ql.exec.FetchOperator: getNextRow: FetchOperator.java: 446 '], statusCode = 3), results = None, hasMoreRows = None)

1 Ответ

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

Расположение таблицы кажется неправильным: /user/hive/warehouse - это похоже на каталог хранилища по умолчанию.Внутри есть несколько каталогов.Сбой на /user/hive/warehouse/categories, говоря, что это не файл.Похоже, это каталог таблиц категорий.

Создайте папку в каталоге / user / hive / warehouse и поместите в нее файлы.Например:

/user/hive/warehouse/pricefiles/pricefile_edited.txt

Изменить расположение таблицы в DDL:

LOCATION '/user/hive/warehouse/pricefiles

Регулярное выражение неверно.Каждый столбец должен иметь соответствующую группу в регулярном выражении (in parenthesis).Например, ваше регулярное выражение для первого столбца говорит, что это 12 точек ., потому что \\. буквально означает символ точки.Если вам нужны любые 12 символов, они должны быть (. {12}) без двух косых черт.Также добавьте разделители между группами (пробел или табуляции или что): (. {12}) (. {1}) - это займет 12 символов из 140219078921B0 (140219078921) и B в качестве второго столбца.Исправьте свое регулярное выражение соответствующим образом и добавьте пробелы (разделители) между группами, если это необходимо.Также удалите дополнительный ввод из регулярного выражения, запишите его в одну строку.

Вы можете проверить регулярное выражение простым способом, используя regexp_extract(string, regexp, group_number):

hive> select regexp_extract('140219078921B0 A1DU1M 1223105DDB','(.{12})',1); --extract group number 1 (group 0 is the whole regexp)
OK
140219078921
Time taken: 1.057 seconds, Fetched: 1 row(s)

hive> select regexp_extract('140219078921B0 A1DU1M 1223105DDB','(.{12})(.{1})',2); --extract group number 2
OK
B
Time taken: 0.441 seconds, Fetched: 1 row(s)

И так далее.Добавьте больше групп и тщательно протестируйте

...