我对hadoop和hive非常陌生。我正在尝试将数据加载到配置单元表中,遇到下面的错误。
另一方面,我尝试使用语句将记录插入到配置单元表中 stmt.execute("INSERT INTO employee VALUES(1201,'Gopal',45000,'Technical manager')")
它正在成功插入记录,但在加载大量数据时失败。
val filePath=C:\\AllProjects\\xxxxxxx\\src\\main\\resources\\input\\sample.txt
val con =
DriverManager.getConnection("jdbc:hive2://xxxxxhive.xxxx.com:10000/dehl_dop;principal=hive/xxxxxhive.com.com@internal.xxxxx.com;" +
"mapred.job.queue.name=usa;AuthMech=3;SSL=1;user=zzzz;password=vvvv;" +
"SSLTrustStore=C:\\Program Files\\Java\\jre1.8.0_144\\lib\\security\\hjsecacerts;UseNativeQuery=0")
val stmt = con.createStatement()
print("\n" + "executing the query" +"\n")
stmt.execute(s"load data inpath $filePath into table Employee")
错误
errorMessage:Error while compiling statement: FAILED: ParseException line 1:17 mismatched input 'C' expecting StringLiteral near 'inpath' in load statement), Query: load data inpath C:\xxxxx\xxxxx\xxxxx\xxxxx\xxxxx\xxxxx\sample.txt into table Employee.
任何帮助都将不胜感激
1条答案
按热度按时间cigdeys31#
LOAD DATA INPATH
接受字符串文本。$filePath
需要单引号但是,该命令要求文件位于hdfs上。你在读你的c盘
LOAD DATA LOCAL INPATH
将读取本地文件系统,但我不确定它在jdbc上是如何工作的,因为它取决于实际执行查询的位置(您的本地计算机或hiveserver)我建议您在特定的hdfs位置创建一个具有必要模式的外部配置单元表,然后直接将文本文件复制到hdfs。
以编程方式将文件复制到hdfs是一种选择,但是
hadoop fs -put
会更简单。如果您只想将本地文件加载到hdfs/hive,那么spark比jdbc更有意义