如何解决未能在所需路径上制作配置单元表并插入值
我想在 hive 中制作表格,只包含 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 中的每个表都有自己的位置。您为表指定的位置似乎用作其他表文件夹所在的常见位置。
根据异常:this
,至少在 /user/hdd/data/ 位置找到了一个文件夹(不是文件)。我猜它属于某个其他表。
您应该指定将仅存储属于该表的文件的表位置,而不是其他表位置所在的公共数据仓库位置。
通常表位置命名为表名:java.io.IOException:Not a file: hdfs://nameservice1/user/hdd/data/AC22:21:3'
固定创建表语句:
/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";
位置或使用 INSERT 将数据加载到表中,文件将在该位置创建。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。