Я хочу сделать таблицу в улье, содержащую только 1 столбец и 2 значения: «Y» и «N»
Я уже пробую это:
create external table if not exists tx_test_table (FLAG string)
row format delimited fields terminated by ','
stored as textfile location "/user/hdd/data/";
Мой вопрос: почему он находится в таблице по умолчанию? как пройти путь, который я желаю?
Когда я делаю запрос из таблицы, которую я просто делаю, мне не удалось показать поле (используя select * from
)
Bad status for request TFetchResultsReq(fetchType=0,
operationHandle=TOperationHandle(hasResultSet=True, modifiedRowCount=None,
operationType=0,
operationId=THandleIdentifier(secret='pE\xff\xfdu\xf6B\xd4\xb3\xb7\x1c\xdd\x16\x95\xb85',
guid = "\n\x05\x16\xe7'\xe4G \xb6R\xe06\x0b\xb9\x04\x87")),
orientation=4, maxRows=100):
TFetchResultsResp(status=TStatus(errorCode=0,
errorMessage='java.io.IOException: java.io.IOException: Not a file:
hdfs://nameservice1/user/hdd/data/AC22', sqlState=None,
infoMessages=['*org.apache.hive.service.cli.HiveSQLException:java.io.IOException:
java.io.IOException: Not a file: hdfs://nameservice1/user/hdd/data/AC22:14:13',
'org.apache.hive.service.cli.operation.SQLOperation:getNextRowSet:SQLOperation.java:496',
'org.apache.hive.service.cli.operation.OperationManager:getOperationNextRowSet:OperationManager.java:297',
'org.apache.hive.service.cli.session.HiveSessionImpl:fetchResults:HiveSessionImpl.java:869', 'org.apache.hive.service.cli.CLIService:fetchResults:CLIService.java:507',
'org.apache.hive.service.cli.thrift.ThriftCLIService:FetchResults:ThriftCLIService.java:708',
'org.apache.hive.service.rpc.thrift.TCLIService$Processor$FetchResults:getResult:TCLIService.java:1717',
'org.apache.hive.service.rpc.thrift.TCLIService$Processor$FetchResults:getResult:TCLIService.java:1702',
'org.apache.thrift.ProcessFunction:process:ProcessFunction.java:39',
'org.apache.thrift.TBaseProcessor:process:TBaseProcessor.java:39', 'org.apache.hadoop.hive.thrift.HadoopThriftAuthBridge$Server$TUGIAssumingProcessor:process:HadoopThriftAuthBridge.java:605',
'org.apache.thrift.server.TThreadPoolServer$WorkerProcess:run:TThreadPoolServer.java:286',
'java.util.concurrent.ThreadPoolExecutor:runWorker:ThreadPoolExecutor.java:1149',
'java.util.concurrent.ThreadPoolExecutor$Worker:run:ThreadPoolExecutor.java:624', 'java.lang.Thread:run:Thread.java:748',
'*java.io.IOException:java.io.IOException: Not a file: hdfs://nameservice1/user/hdd/data/AC22:18:4',
'org.apache.hadoop.hive.ql.exec.FetchOperator:getNextRow:FetchOperator.java:521'
, 'org.apache.hadoop.hive.ql.exec.FetchOperator:pushRow:FetchOperator.java:428',
'org.apache.hadoop.hive.ql.exec.FetchTask:fetch:FetchTask.java:146',
'org.apache.hadoop.hive.ql.Driver:getResults:Driver.java:2227',
'org.apache.hive.service.cli.operation.SQLOperation:getNextRowSet:SQLOperation.java:491',
'*java.io.IOException:Not a file: hdfs://nameservice1/user/hdd/data/AC22:21:3',
'org.apache.hadoop.mapred.FileInputFormat:getSplits:FileInputFormat.java:329',
'org.apache.hadoop.hive.ql.exec.FetchOperator:getNextSplits:FetchOperator.java:372',
'org.apache.hadoop.hive.ql.exec.FetchOperator:getRecordReader:FetchOperator.java:304',
'org.apache.hadoop.hive.ql.exec.FetchOperator:getNextRow:FetchOperator.java:459'], statusCode=3),
results=None, hasMoreRows=None)
Каждая таблица в HDFS имеет собственное местоположение. И место, которое вы указали для своей таблицы, кажется, используется как обычное место, где расположены другие папки таблицы.
Согласно исключению: java.io.IOException:Not a file: hdfs://nameservice1/user/hdd/data/AC22:21:3'
найдена хотя бы одна папка (не файл) в папке /user/hdd/data/. Я предполагаю, что это принадлежит какому-то другому столу.
Вы должны указать местоположение таблицы, где будут храниться только файлы, принадлежащие этой таблице, а не общее местоположение хранилища данных, в котором находятся другие местоположения таблицы.
Обычно расположение таблицы называется именем таблицы: /user/hdd/data/tx_test_table
Исправлено предложение создать таблицу:
create external table if not exists tx_test_table (FLAG string)
row format delimited fields terminated by ','
stored as textfile location "/user/hdd/data/tx_test_table";
Теперь таблица будет иметь собственное местоположение, в котором будут храниться ее файлы, а не смешанные с другими папками или файлами таблицы.
Вы можете поместить файлы в папку /user/hdd/data/tx_test_table
или загрузить данные в таблицу с помощью INSERT, файлы будут созданы в папке.
Временные таблицы @thecardcaptor обычно управляются и удаляются автоматически по завершении сеанса, поэтому вам не нужно беспокоиться о их местоположении, пусть оно будет по умолчанию. Hive создаст его во временном файле пользователя. зачем вам таблица с одним столбцом и только Y, N???
@thecardcaptor Ответил на ваш вопрос, пожалуйста, проверьте. Для этого вам не нужна временная таблица, также вам не нужен SELECT + UNION ALL, не нужен двойной. стек() работает быстрее
Вы не возражаете, если мы поболтаем минут 5?
@thecardcaptor хорошо
Давайте продолжим обсуждение в чате.
оно работает! спасибо .. как насчет того, чтобы создать временную таблицу со столбцом FLAG только со значениями Y и N?