- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我是 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.
任何帮助将不胜感激
最佳答案
LOAD DATA INPATH
采用字符串文字。
$filePath
需要用单引号括起来
stmt.execute(s"load data inpath '$filePath' into table Employee")
但是,该命令需要一个文件位于 HDFS 上。你正在从你的 C 驱动器读取
LOAD DATA LOCAL INPATH
将读取local 文件系统,但我不确定它如何在 JDBC 上工作,因为它取决于查询实际执行的位置(您的本地机器,或 HiveServer)
我建议您在特定的 HDFS 位置创建一个具有必要模式的外部 Hive 表,然后只需将文本文件直接复制到 HDFS。
以编程方式将文件复制到 HDFS 是一种选择,但 hadoop fs -put
会更简单。
如果您只想将本地文件加载到 HDFS/Hive,Spark 比 JDBC 更有意义
import org.apache.spark.sql.SparkSession
val spark = SparkSession.builder()
.appName("Sample App").enableHiveSupport().getOrCreate()
val df = spark.read.option("header", "false").csv(filePath)
df.createOrReplaceTempView("emp")
spark.sql("INSERT INTO dehl_dop.Employee SELECT * from emp")
关于scala - 在加载语句中期望 StringLiteral 接近 'inpath',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48630888/
我是 hadoop 和 hive 的新手。我正在尝试将数据加载到配置单元表中,但遇到以下错误。 另一方面,我尝试使用语句 stmt.execute("INSERT INTO employee VALU
文件“/home/hadoop/_user_active_score_small”确实存在。但是当如下运行 load data local 时,得到一个 SemanticException: hive
我想使用“LOAD DATA LOCAL INPATH..”在本地机器上导入文件 但是,我不能导入 $ beeline -u jdbc:hive2://example:10000 -e "LOAD D
在我的公司,我经常看到这两个命令,我想知道它们之间的区别,因为它们的功能对我来说似乎是一样的: 1 create table (name string, number double); load d
我有两个 CSV 文件,已上传到 HDInsight 中的 Azure Blob 存储。我可以毫无问题地将这两个文件上传到集群。然后我创建两个 Hive 表... CREATE EXTERNAL TA
我希望在 cron 上运行到 Hive 的导入,并且希望只使用 “将数据本地输入路径‘/tmp/data/x’加载到表 X”到表中就足够了。 后续命令会覆盖表中已有的内容吗?还是会追加? 最佳答案 本
我正在尝试使用来自 Windows 的文件加载 Hive 表。但是我收到以下错误: java.sql.SQLException: Error while compiling statement: FA
我是一名优秀的程序员,十分优秀!